elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Hola, alguien desarrollo su propia IA ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hola, alguien desarrollo su propia IA ?  (Leído 762 veces)
bajozero123

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Hola, alguien desarrollo su propia IA ?
« en: 17 Octubre 2025, 07:37 am »

Hola amigos, alguien desarrollo su propia LLm o arquitectura de IA ?

me encuentro desarrollando mi propio code con el fin de aprender y mejorar mi conocimiento. Si alguien quisiera compartir experiencias e intereses similares.

saludos


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.649


Hackentifiko!


Ver Perfil
Re: Hola, alguien desarrollo su propia IA ?
« Respuesta #1 en: 18 Octubre 2025, 06:44 am »

Lo mío es más simplón.

Creo ya haber contado la historia en el foro...

Más o menos en 2008 empecé a tener dudas sobre qué hacer, cuales eran las opciones y las consecuencias, se me ocurrió que lo averigue un programa y así fue como empecé con el tema.

Aunque ya había tenido una experiencia haciendo un campeonato virtual de luchadores con los puntos diferentemente repartidos en puntos de vida y de ataque, con un resultado al revés del que suponía: Lo mejor fue aproximadamente 60% a la vida y 40% al ataque.

¿Qué es lo más sencillo que una PC puede averiguar? Me lo pregunté muchas veces en distintas ocasiones. Volví a empezar en muchas ocasiones. Si mal no recuerdo, un número, aunque el mismo programa lo tiene guardado, es sólo para practicar.

¿Cuales son los posibles siguientes niveles? O sea, cosas más difíciles. Pensé en eso muchas veces, pero no me sirvió de mucho, he dado muchas vueltas... Por ejemplo esto fue de 2015:


Actualmente intento que un programa averigüe cómo jugar bien al Signos en línea, que es como el 3 en línea pero en vez de 3 puede ser otro número y el tamaño del tablero otro (aunque siempre cuadrado), pero como no funcionó y no le encontré la falla empecé a hacer una versión para un juego más sencillo. La original puedes verla aquí en la sección de Programación general, la versión más sencilla (que aún no terminé) es:
Código
  1. // Juego simple para aprender a programar mejor:
  2. // Aportar o no, 1 o 0, 2 jugadores se turnan aportando o...
  3. // no, hasta que haya 3 aportes o 2 fallos. No son rivales,
  4. // ganan ambos o pierden ambos.
  5. // Este programa tiene básicamente 2 etapas,
  6. // que se pueden resumir así:
  7. // Nota: La situación inicial, en que no se realizaron acciones,
  8. // estará guardada en la lista nro 0 (0 acciones).
  9. // 1:
  10. // Probar acciones en cada situación de la lista nro 0,
  11. // guardando en una nueva lista las nuevas situaciones (que no...
  12. // sean victoria ni derrota). Repetir con cada nueva lista...
  13. // hasta que no se genere una nueva situación.
  14. // 2:
  15. // Desde las últimas listas, probar las acciones.
  16. // Guardar cuántas acciones causan victoria y cuántas derrota.
  17. // Averiguar la mejor acción en cada situación, basado en el...
  18. // mejor resultado seguro que causa (asumiendo que el compañero...
  19. // juega bien), y en 2nda instancia el más probable (asumiendo...
  20. // que juegue al azar). Repetir hasta resolver la lista 0.
  21. AportesRequeridos = 3;
  22. FallosParaDerrota = 2;
  23. // En las listas L_SaE se irán poniendo las situaciones a...
  24. // experimentar en que hayan transcurrido _ turnos.
  25. // En la lista 0 se agrega una situación, la inicial:
  26. L0SaE1 = "";
  27. // Los datos de las situaciones no están en las listas,
  28. // se crean aparte. Con esta variable se evita repetidamente...
  29. // convertir en texto y concatenar:
  30. S_ = "S";
  31. // Datos de la situación:
  32. // Usada para fácilmente saber de qué signo es turno:
  33. set (S_+"Turno", "X");
  34. NroDeListaRevisandose = -1;
  35. // /////////////////////////////////////////////
  36. // /////////////////  Etapa 1  /////////////////
  37. // /////////////////////////////////////////////
  38. // Consiste en llegar a nuevas situaciones y guardarlas,
  39. // si no son victoria ni derrota.
  40. //
  41. // Usada a continuación y durante la etapa 1 (Et1)...
  42. // cuando no hay más situaciones en la lista revisándose:
  43. function BuscarOtraListaEt1 () {
  44. trace("Ejecutando BuscarOtraListaEt1");
  45. NroDeListaRevisandose++;
  46. PrepararUsoDeLista();
  47. PrepararSaE();
  48. // El if no está bien, pero funcionará creo:
  49. // Si la lista tiene alguna situación:
  50. if (NroDeListaRevisandose < 5) {
  51. // Para evitar concatenar cosas al guardar datos de situaciones nuevas:
  52. NextL_SaE = "L"+(NroDeListaRevisandose+1)+"SaE";
  53. // trace("NextL_SaE: "+NextL_SaE);
  54. // Usado en EvaluarConocimientoSobreSEt1 para...
  55. // nombrar las situaciones nuevas que se logren:
  56. SituacionesNuevas = 0;
  57. } else {
  58. trace( "No se hallaron situaciones en la nueva lista; inicia la etapa 2.");
  59. // Iniciar Etapa 3:
  60. gotoAndStop(4);
  61. }
  62. }
  63. BuscarOtraListaEt1();
  64. // Usada cuando se cambia de lista, en BuscarOtraListaEt1,
  65. // y al comenzar Et2:
  66. function PrepararUsoDeLista () {
  67. trace("Ejecutando PrepararUsoDeLista");
  68. // Para evitar concatenar repetidamente:
  69. L_SaE = "L"+NroDeListaRevisandose+"SaE";
  70. // trace("L_SaE: "+L_SaE);
  71. NroDeSExperimentandose = 1;
  72. // También para evitar concatenar repetidamente:
  73. L_SaE_ = L_SaE+"1";
  74. // trace("L_SaE_: "+L_SaE_);
  75. trace("La lista preparada es la "+NroDeListaRevisandose);
  76. }
  77. // Usada cuando se elige una SaE, en BuscarOtraListaEt1,
  78. // BuscarOtraSituacionEt1 y PrepararSaEEt3:
  79. function PrepararSaE () {
  80. trace("Ejecutando PrepararSaE");
  81. SituacionBase = eval(L_SaE_);
  82. trace("Se inician experimentos en otra situación de la lista, la nro "+NroDeSExperimentandose+", que es "+SituacionBase);
  83. S_ = "S"+SituacionBase;
  84. Turno = eval(S_+"Turno");
  85. Action = 0;
  86. }
  87. // Usada en frame 2 (o etapa 1) repetidamente:
  88. function ResetearSituacionEt1 () {
  89. trace("Ejecutando ResetearSituacionEt1");
  90. // Plantear situación porque puede modificarse pero...
  91. // podría requerirse su estado original luego:
  92. Situacion = SituacionBase;
  93. // trace("La situación experimentándose es "+Situacion);
  94. EvaluarAplicabilidadEt1();
  95. }
  96. // Inútil aquí, queda para no complicar la simplificación:
  97. function EvaluarAplicabilidadEt1 () {
  98. AplicarAccionEt1();
  99. }
  100. // Usada luego de EvaluarAplicabilidadEt1,
  101. // si una acción es realizable:
  102. function AplicarAccionEt1 () {
  103. trace("Ejecutando AplicarAccionEt1");
  104. Situacion = Situacion+Action;
  105. trace("Se realizó la acción "+Action+"; ahora la situación es "+Situacion);
  106. // ¿Se debe continuar? ¿hay 2 0s o 3 1s?
  107. EvaluarContinuabilidad();
  108. if (Continuabilidad == "Sí") {
  109. EvaluarConocimientoSobreSEt1();
  110. }
  111. // ¿Queda alguna acción sin probar en la situación?
  112. BuscarOtraAccionEt1();
  113. }
  114. // Usada en AplicarAccionEt1:
  115. function EvaluarContinuabilidad () {
  116. trace("Ejecutando EvaluarContinuabilidad");
  117. Continuabilidad = "Sí";
  118. CantidadDe0s = 0;
  119. CantidadDe1s = 0;
  120. CaracteraContar = 0;
  121. do {
  122. if (Situacion.charat(CaracteraContar) == "0") {
  123. CantidadDe0s++;
  124. } else {
  125. CantidadDe1s++;
  126. }
  127. CaracteraContar++;
  128. } while (CaracteraContar < Situacion.length);
  129. if (CantidadDe0s == 2) {
  130. trace ("Se hallaron 2 0s");
  131. Continuabilidad = 0;
  132. } else if (CantidadDe1s == 3) {
  133. trace ("Se hallaron 3 1s");
  134. Continuabilidad = 1;
  135. }
  136. }
  137. // Usada en EvaluarAplicabilidadEt1 cuando una acción no es...
  138. // realizable:
  139. function SinResetBuscarOtraAccionEt1 () {
  140. trace("Ejecutando SinResetBuscarOtraAccionEt1");
  141. if (Action < 1) {
  142. // Si queda alguna acción sin probar...
  143. // en la situación, probarla:
  144. Action++;
  145. EvaluarAplicabilidadEt1();
  146. } else {
  147. trace("No hay más acciones realizables.");
  148. BuscarOtraSituacionEt1();
  149. }
  150. }
  151. // Usada luego de AplicarAccionEt1:
  152. function BuscarOtraAccionEt1 () {
  153. trace("Ejecutando BuscarOtraAccionEt1");
  154. if (Action < 1) {
  155. // Si queda alguna acción sin probar...
  156. // en la situación, probarla:
  157. Action++;
  158. trace("La nueva acción a probar es "+Action);
  159. // Se ejecutará ResetearSituacionEt1.
  160. } else {
  161. trace("No hay más acciones realizables.");
  162. BuscarOtraSituacionEt1();
  163. }
  164. }
  165. // Usada en AplicarAccionEt1 cuando no hay victoria (ni empate,
  166. // aunque por ahora no ocurren):
  167. function EvaluarConocimientoSobreSEt1 () {
  168. trace("Ejecutando EvaluarConocimientoSobreSEt1");
  169. // Estas 2 variables son para evitar reconcatenar:
  170. NewS_ = "S"+Situacion;
  171. NewS_BestAction = NewS_+"BestAction";
  172. // ¿Se ha llegado antes a la situación?
  173. if (eval(NewS_BestAction) == undefined) {
  174. // No, anotar que debe investigarse:
  175. SituacionesNuevas++;
  176. trace("Situación a anotar a "+NextL_SaE+SituacionesNuevas+" es "+Situacion);
  177. set (NextL_SaE+SituacionesNuevas, Situacion);
  178. trace("Esa situación no está anotada; se anota como nro "+SituacionesNuevas);
  179. // trace(" NewS_: "+NewS_);
  180. // trace(" NewS_BestAction: "+NewS_BestAction);
  181. set(NewS_BestAction, "Desconocida");
  182. if (Turno == "X") {
  183. set (NewS_+"Turno", "0");
  184. } else {
  185. set (NewS_+"Turno", "X");
  186. }
  187. }
  188. }
  189. // Usada en BuscarOtraAccionEt1 cuando no hay más acciones posibles,
  190. // y en SinResetBuscarOtraAccionEt1:
  191. function BuscarOtraSituacionEt1 () {
  192. trace("Ejecutando BuscarOtraSituacionEt1");
  193. NroDeSExperimentandose++;
  194. if (eval(L_SaE+NroDeSExperimentandose) != undefined) {
  195. // Hay otra situación en la lista,
  196. // prepararse a usarla:
  197. L_SaE_ = L_SaE+NroDeSExperimentandose;
  198. PrepararSaE();
  199. } else {
  200. trace("No hay más situaciones a experimentar en la lista actual, se mirará otra.");
  201. BuscarOtraListaEt1();
  202. }
  203. }
  204. // /////////////////////////////////////////////
  205. // /////////////////  Etapa 2  /////////////////
  206. // /////////////////////////////////////////////
  207. // Innecesaria aquí.
  208. // /////////////////////////////////////////////
  209. // /////////////////  Etapa 3  /////////////////
  210. // /////////////////////////////////////////////
  211. // Consiste en guardar los resultados de las acciones en...
  212. // situaciones en que más de 1 acción es posible.
  213. // Particularmente se guarda la mejor acción.
  214. // El resultado de las acciones puede ser victoria,
  215. // una situación con posibles resultados,
  216. // y en la penúltima lista una situación con un único posible...
  217. // resultado.
  218. //
  219. // Usada antes y durante esta etapa...
  220. // cuando no hay más situaciones en la lista revisándose:
  221. function BuscarOtraListaEt3 () {
  222. trace("Ejecutando BuscarOtraListaEt3");
  223. NroDeListaRevisandose--;
  224. if (NroDeListaRevisandose > -1) {
  225. // Si se halla una lista:
  226. PrepararUsoDeLista();
  227. PrepararSaEEt3();
  228. } else {
  229. trace("No hay más listas a revisar; programa terminado.");
  230. // En este frame nada hay, es sólo para mostrar el mensaje:
  231. gotoAndStop(5);
  232. }
  233. }
  234. // Casi como PrepararSaE. Usada cuando se elige una SaE,
  235. // en BuscarOtraListaEt3 y BuscarOtraSituacionEt3:
  236. function PrepararSaEEt3 () {
  237. trace("Ejecutando PrepararSaEEt3");
  238. PrepararSaE();
  239. // Para evitar evals y concatenaciones repetidamente:
  240. BestAction = "";
  241. Victorias = 0;
  242. Derrotas = 0;
  243. // Establecer que hasta ahora los resultados hallados...
  244. // son peores que lo posible, para que se sustituyan por...
  245. // cualquier acción:
  246. // EL VALOR DEBERÍA SER PEOR?
  247. BestResultadoEObtenido = "Derrota";
  248. // Si 2 acciones causan victoria segura,
  249. // esto sirve para elegir la mejor de ellas:
  250. BestDistanciaaGanar = 10;
  251. // No HAY DERROTA SEGURA, esto está por probar...
  252. // Si 2 acciones causan derrota segura,
  253. // esto sirve para elegir la mejor de ellas:
  254. BestChanceDeGanarEnD = -1;
  255. BestDistanciaaGanarEnD = 10;
  256. }
  257. // Usada en frame 4 (o etapa 3) repetidamente:
  258. function ResetearSituacionEt3 () {
  259. // Plantear situación porque puede modificarse pero...
  260. // podría requerirse su estado original luego:
  261. Situacion = SituacionBase;
  262. trace("La situación experimentándose es "+Situacion);
  263. EvaluarAplicabilidadEt3();
  264. }
  265. // Usada luego de que cambia la SaE y/o la acción, en Et3:
  266. function EvaluarAplicabilidadEt3 () {
  267. AplicarAccionEt3();
  268. }
  269. // Usada luego de EvaluarAplicabilidadEt3,
  270. // si una acción es realizable:
  271. function AplicarAccionEt3 () {
  272. // Los datos se guardarán bien en GuardarDatosEt3.
  273. // Por ahora varios se están guardando en variables más simples de nombrar.
  274. // Además algunos no se pueden guardar aún (VictoriasDeX, NewVictoriasDe0...).
  275. // Y DistanciaaGanar se está guardando como -1 de lo que debe, para no tener que estar sumando.
  276. trace("Ejecutando AplicarAccionEt3");
  277. Situacion = Situacion+Action;
  278. trace("Se realizó la acción "+Action+"; ahora la situación es "+Situacion);
  279. // ¿Se debe continuar? ¿hay 2 0s o 3 1s?
  280. EvaluarContinuabilidad();
  281. if (Continuabilidad == "Sí") {
  282. trace("No hubo victoria, agregando datos...");
  283. // Agregar los posibles resultados de la...
  284. // situación obtenida:
  285. // Estas 5 variables son para evitar reconcatenar:
  286. NewS_ = "S"+Situacion;
  287. NewVictorias = eval(NewS_+"Victorias");
  288. NewDerrotas = eval(NewS_+"Derrotas");
  289. Victorias = Victorias+NewVictorias;
  290. Derrotas = Derrotas+NewDerrotas;
  291. trace(Victorias+", "+Derrotas);
  292. // Si en la SaE ya se halló una acción que...
  293. // causa victoria segura:
  294. if (BestResultadoEObtenido == "Victoria") {
  295. trace("El mejor resultado logrado es victoria");
  296. // Si la acción recién usada también causa eso:
  297. if (eval(NewS_+"ResultadoEsperado") == "Victoria") {
  298. trace("La acción causa victoria segura (no inmediata)");
  299. trace("Pero ya se halló otra, se verá cual causa más rápido");
  300. // Si dicha acción la causa faster:
  301. if (eval(NewS_+"DistanciaaGanar") < BestDistanciaaGanar) {
  302. // Sustituir datos:
  303. trace("La nueva fue mejor, sustituyendo datos...");
  304. BestDistanciaaGanar = eval(NewS_+"DistanciaaGanar");
  305. BestAction = Action;
  306. }
  307. // SINO SI LA CAUSA IGUAL DE RÁPIDO HABRÍA QUE AVERIGUAR CHANCES, pero se gana igual...
  308. // sino dicha acción es peor, no prestarle más atención.
  309. }
  310. // idem.
  311. // sino el mejor resultado esperado hallado es derrota:
  312. } else {
  313. // Si la acción recién usada causa que...
  314. // el resultado esperado sea victoria:
  315. if (eval(NewS_+"ResultadoEsperado") == "Victoria") {
  316. // Sustituir datos:
  317. BestResultadoEObtenido = "Victoria";
  318. BestDistanciaaGanar = eval(NewS_+"DistanciaaGanar");
  319. BestAction = Action;
  320. // sino es derrota:
  321. } else {
  322. // Averiguar chance de ganar:
  323. Posibilidades = NewVictorias+NewDerrotas;
  324. ChanceDeGanar = NewVictorias*100/Posibilidades;
  325. // Si es más alta que la hallada antes:
  326. if (ChanceDeGanar > BestChanceDeGanarEnD) {
  327. // Sustituir datos:
  328. BestChanceDeGanarEnD = ChanceDePerder;
  329. BestAction = Action;
  330. // sino si la chance es igual:
  331. // ACÁ HABRÍA QUE VER LA DISTANCIA A GANAR EN D
  332. // sino es peorm, no prestarle atención.
  333. }
  334. }
  335. }
  336. } else {
  337. // Incrementar victorias:
  338. // Esta es para evitar reconcatenar:
  339. VariableaIncrementar = "Victorias";
  340. set (VariableaIncrementar, eval(VariableaIncrementar)+1);
  341. if (BestDistanciaaGanar > 0) {
  342. // Sustituir datos:
  343. BestResultadoEObtenido = "Victorias";
  344. BestDistanciaaGanar = 0;
  345. BestAction = Action;
  346. }
  347. }
  348. // ¿Queda alguna acción sin probar en la situación?
  349. BuscarOtraAccionEt3();
  350. }
  351. // Usada en EvaluarAplicabilidadEt3 cuando una acción no es...
  352. // realizable:
  353. function SinResetBuscarOtraAccionEt3 () {
  354. trace("Ejecutando SinResetBuscarOtraAccionEt3");
  355. if (Action < LastActionPosible) {
  356. // Si queda alguna acción sin probar...
  357. // en la situación, probarla:
  358. Action++;
  359. EvaluarAplicabilidadEt3();
  360. } else {
  361. trace("No hay más acciones realizables.");
  362. BuscarOtraSituacionEt3();
  363. }
  364. }
  365. // Usada luego de AplicarAccionEt3:
  366. function BuscarOtraAccionEt3 () {
  367. trace("Ejecutando BuscarOtraAccionEt3");
  368. if (Action < LastActionPosible) {
  369. // Si queda alguna acción sin probar...
  370. // en la situación, probarla:
  371. Action++;
  372. // Se ejecutará ResetearSituacionEt3.
  373. } else {
  374. trace("No hay más acciones realizables.");
  375. BuscarOtraSituacionEt3();
  376. }
  377. }
  378. // Usada cuando no hay más acciones posibles:
  379. function GuardarDatosEt3 () {
  380. trace("Ejecutando GuardarDatosEt3");
  381. set(S_+"VictoriasDeX", VictoriasDeX);
  382. set(S_+"VictoriasDe0", VictoriasDe0);
  383. set(S_+"Empates", Empates);
  384. set(S_+"BestAction", BestAction);
  385. set(S_+"DistanciaaGanar", BestDistanciaaGanar+1);
  386. set(S_+"ResultadoEsperado", BestResultadoEObtenido);
  387. }
  388. // Usada en BuscarOtraAccionEt3 cuando no hay más acciones posibles,
  389. // y en SinResetBuscarOtraAccionEt3:
  390. function BuscarOtraSituacionEt3 () {
  391. trace("Ejecutando BuscarOtraSituacionEt3");
  392. NroDeSExperimentandose++;
  393. if (eval(L_SaE+NroDeSExperimentandose) != undefined) {
  394. // Hay otra situación en la lista,
  395. // prepararse a usarla:
  396. L_SaE_ = L_SaE+NroDeSExperimentandose;
  397. PrepararSaEEt3();
  398. } else {
  399. trace("No hay más situaciones a experimentar en la lista actual, se mirará otra.");
  400. BuscarOtraListaEt3();
  401. }
  402. }

¿Y tú qué de útil o interesante puedes mostrar?


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Apple ya trabaja en el desarrollo de su propia televisión
Noticias
wolfbcn 0 1,597 Último mensaje 26 Octubre 2011, 01:26 am
por wolfbcn
Alguien sabe (Android Studio) (Desarrollo de APP)
Android
ElInquisidor 0 3,310 Último mensaje 25 Junio 2015, 21:59 pm
por ElInquisidor
hola a todos alguien tiene el modulo sys lo nesecito alguien que me lo pase xfa
Scripting
ReAdriel 1 4,774 Último mensaje 7 Agosto 2017, 05:27 am
por engel lex
Alguien me enseña? Desarrollo páginas web
Desarrollo Web
Rare_7 8 5,931 Último mensaje 14 Diciembre 2017, 13:48 pm
por Orubatosu
alguien desarrollo un scaner ?
Hacking
bajo0123 1 2,514 Último mensaje 1 Octubre 2018, 08:33 am
por hackertyper
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines