Autor Tema: Haciendo IA para simplificación de 3 en línea ¿sugerencias?

0 Usuarios y 1 Visitante están viendo este tema.

07 Febrero, 2025, 04:40 am
Leído 489 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Acabo de poner la función de borrar y probablemente ande mal por eso, luego de eso no lo revisé mucho aún.

La simplificación es:
- No hay rival.
- Sólo se gana cuando un signo está a un costado de otro.
- El tablero es de 2x2.

Claro que la idea es hacer algo mejor, pero para mí es mejor empezar por lo simple.

Código: [Seleccionar]
// 2 en línea horizontal, en tablero de 2x2, sólo X:
//
// Uso arrays porque es más fácil así modificar los nombres...
// de variables:
//
// Los casilleros están numerados así:
// 0 1
// 2 3
// Situación inicial (v es casillero vacío):
SituacionBase = ["v", "v", "v", "v"];
// Ponerla en la lista de situaciones a experimentar:
SaE1 = SituacionBase.slice();
// Situaciones a experimentar (cuántas son):
SaE = 1;
NroDeSExperimentandose = 1;
// Unir el array:
NombreDeSE = "S"+(SaE1.join(""));
// Acción a realizarse (casillero a marcar):
Action = 0;
// Este programa tiene básicamente 2 etapas:
// 1: Buscar situaciones en que se puede ganar mediante 1 acción.
// 2: FALTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
function BuscarBuenasSituaciones () {
// Plantear situación porque puede modificarse pero...
// podría requerirse su estado original luego:
Situacion = SituacionBase.slice();
trace("La situación experimentándose es "+Situacion);
EvaluarAplicabilidadEt1();
}
// ¿La acción es realizable?
// Etapa 1 (buscar buenas situaciones)
function EvaluarAplicabilidadEt1 () {
trace("Ejecutando EvaluarAplicabilidadEt1");
if (Situacion[Action] == "v") {
// Sí, realizarla:
AplicarAccionEt1();
} else if (Action < 3) {
trace("La acción "+Action+" no es realizable.");
// Sino si queda alguna acción sin probar...
// en la situación, probarla:
Action++;
EvaluarAplicabilidadEt1();
} else {
trace("No hay más acciones realizables.");
BuscarOtraSituacionEt1();
}
}
function AplicarAccionEt1 () {
trace("Ejecutando AplicarAccionEt1");
Situacion[Action] = "X";
trace("Se realizó la acción "+Action+"; ahora la situación es "+Situacion);
// ¿Ganó?
// Para averiguarlo, calcular fila (contando desde 0):
ObtenerColumnayFilaDelMarcado();
CuadraditoMinimoDeLaFila = FilaDelMarcado*2;
if (Situacion[CuadraditoMinimoDeLaFila] == Situacion[CuadraditoMinimoDeLaFila+1]) {
// trace("Situacion[CuadraditoMinimoDeLaFila] == Situacion[CuadraditoMinimoDeLaFila+1]: "+Situacion[CuadraditoMinimoDeLaFila]+" == "+Situacion[CuadraditoMinimoDeLaFila+1]);
// Sí, crear datos sobre eso:
// En la situación base conviene la acción realizada:
set (NombreDeSE+"BestAction", Action);
// En esa situación se requiere 1 acción para ganar:
set (NombreDeSE+"DistanciaaGanar", 1);
trace("Ganó, ahora se sabe que en la situación "+SituacionBase+" se gana usando la acción "+Action);
// Se borra la situación de la lista a experimentar,
// pues ya se halló la mejor acción en ella:
BorrarSaEEt1();
BuscarOtraSituacionEt1();
} else {
EvaluarConocimientoSobreSEt1();
// ¿Queda alguna acción sin probar...
// en la situación?
if (Action < 3) {
// Sí, probarla:
Action++;
// Se ejecutará BuscarBuenasSituaciones.
} else {
BuscarOtraSituacionEt1();
}
}
}
function ObtenerColumnayFilaDelMarcado () {
FilaDelMarcado = Math.floor(Action/2);
ColumnaDelMarcado = Action%2;
}
// ¿Aún hay situaciones a experimentar?
function BuscarOtraSituacionEt1 () {
trace("Ejecutando BuscarOtraSituacionEt1");
if (SaE > NroDeSExperimentandose) {
IniciarExperimentosEnOtraSEt1();
} else {
trace( "No hay más situaciones a experimentar; inicia la etapa 2.");
IniciarEtapa2();
}
}
function BorrarSaEEt1 () {
// La última SaE ponerla en la actual:
trace("ATENCIÓN: SaE "+NroDeSExperimentandose+", que es "+eval("SaE"+NroDeSExperimentandose));
set ("SaE"+NroDeSExperimentandose, eval("SaE"+SaE).slice());
trace("...ahora es: "+eval("SaE"+NroDeSExperimentandose));
// Borrar la última:
delete("SaE"+SaE);
// Indicar que hay una menos:
SaE--;
// Indicar que vuelva a invertigarse la del número actual,
// pues ahora es otra:
NroDeSExperimentandose--;
}
// ¿La situación está anotada en las que deben investigarse?
function EvaluarConocimientoSobreSEt1 () {
trace("Ejecutando EvaluarConocimientoSobreSEt1");
SituacionHechaTexto = Situacion.join("");
NombreDeSituacion = "S"+SituacionHechaTexto;
Resumen = NombreDeSituacion+"BestAction";
if (eval(Resumen) == undefined) {
// No, anotar que debe investigarse:
SaE++;
// Copiar array (porque no se puede normalmente):
set ("SaE"+SaE, Situacion.slice());
trace("Esa situación no está anotada; se anota como nro "+SaE);
// Esto para saber que está anotada:
set (Resumen, "Desconocida");
}
}
function IniciarExperimentosEnOtraSEt1 () {
trace("Ejecutando IniciarExperimentosEnOtraSEt1");
NroDeSExperimentandose++;
NombreDeSE = "S"+(eval("SaE"+NroDeSExperimentandose).join(""));
SituacionBase = eval("SaE"+NroDeSExperimentandose);
// trace("SituacionBase: "+SituacionBase);
// Reset de la acción a probar:
Action = 0;
trace("Se inician experimentos en otra situación, la anotada nro "+NroDeSExperimentandose);
}
function IniciarEtapa2 () {
DistanciaaGanarAceptada = 1;
trace("Se experimentaron todas las situaciones; se reexperimentarán buscando resultados menos óptimos");
trace("Son "+SaE+" situaciones; se acepta que la distancia a la victoria sea "+DistanciaaGanarAceptada);
gotoAndStop (3);
}

Puede que este diagrama (incompleto) ayude a entender mejor cómo funciona:


Salida:
Citar
La situación experimentándose es v,v,v,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,v,v,v
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 2
La situación experimentándose es v,v,v,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es v,X,v,v
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 3
La situación experimentándose es v,v,v,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 2; ahora la situación es v,v,X,v
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 4
La situación experimentándose es v,v,v,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 3; ahora la situación es v,v,v,X
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 5
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es X,v,v,v
Ejecutando EvaluarAplicabilidadEt1
La acción 0 no es realizable.
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es X,X,v,v
Ganó, ahora se sabe que en la situación X,v,v,v se gana usando la acción 1
ATENCIÓN: SaE 2, que es X,v,v,v
...ahora es: v,v,v,X
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es v,v,v,X
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,v,v,X
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 5
La situación experimentándose es v,v,v,X
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es v,X,v,X
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 6
La situación experimentándose es v,v,v,X
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 2; ahora la situación es v,v,X,X
Ganó, ahora se sabe que en la situación v,v,v,X se gana usando la acción 2
ATENCIÓN: SaE 2, que es v,v,v,X
...ahora es: v,X,v,X
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es v,X,v,X
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,X,v,X
Ganó, ahora se sabe que en la situación v,X,v,X se gana usando la acción 0
ATENCIÓN: SaE 2, que es v,X,v,X
...ahora es: X,v,v,X
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es X,v,v,X
Ejecutando EvaluarAplicabilidadEt1
La acción 0 no es realizable.
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es X,X,v,X
Ganó, ahora se sabe que en la situación X,v,v,X se gana usando la acción 1
ATENCIÓN: SaE 2, que es X,v,v,X
...ahora es: v,v,X,v
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es v,v,X,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,v,X,v
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 4
La situación experimentándose es v,v,X,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es v,X,X,v
Ejecutando EvaluarConocimientoSobreSEt1
Esa situación no está anotada; se anota como nro 5
La situación experimentándose es v,v,X,v
Ejecutando EvaluarAplicabilidadEt1
La acción 2 no es realizable.
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 3; ahora la situación es v,v,X,X
Ganó, ahora se sabe que en la situación v,v,X,v se gana usando la acción 3
ATENCIÓN: SaE 2, que es v,v,X,v
...ahora es: v,X,X,v
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es v,X,X,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,X,X,v
Ganó, ahora se sabe que en la situación v,X,X,v se gana usando la acción 0
ATENCIÓN: SaE 2, que es v,X,X,v
...ahora es: X,v,X,v
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es X,v,X,v
Ejecutando EvaluarAplicabilidadEt1
La acción 0 no es realizable.
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 1; ahora la situación es X,X,X,v
Ganó, ahora se sabe que en la situación X,v,X,v se gana usando la acción 1
ATENCIÓN: SaE 2, que es X,v,X,v
...ahora es: v,X,v,v
Ejecutando BuscarOtraSituacionEt1
Ejecutando IniciarExperimentosEnOtraSEt1
Se inician experimentos en otra situación, la anotada nro 2
La situación experimentándose es v,X,v,v
Ejecutando EvaluarAplicabilidadEt1
Ejecutando AplicarAccionEt1
Se realizó la acción 0; ahora la situación es X,X,v,v
Ganó, ahora se sabe que en la situación v,X,v,v se gana usando la acción 0
ATENCIÓN: SaE 2, que es v,X,v,v
...ahora es: v,X,v,v
Ejecutando BuscarOtraSituacionEt1
No hay más situaciones a experimentar; inicia la etapa 2.
Se experimentaron todas las situaciones; se reexperimentarán buscando resultados menos óptimos
Son 1 situaciones; se acepta que la distancia a la victoria sea 1

Arrays resultantes:
Citar
  Variable _level0.SituacionBase = [object #10] [
    0:"v",
    1:"X",
    2:"v",
    3:"v"
  ]
  Variable _level0.SaE1 = [object #11] [
    0:"v",
    1:"v",
    2:"v",
    3:"v"
  ]
  Variable _level0.Situacion = [object #12] [
    0:"X",
    1:"X",
    2:"v",
    3:"v"
  ]
  Variable _level0.SaE2 = [object #13] [
    0:"v",
    1:"X",
    2:"v",
    3:"v"
  ]
  Variable _level0.SaE3 = [object #14] [
    0:"v",
    1:"X",
    2:"v",
    3:"v"
  ]
  Variable _level0.SaE4 = [object #15] [
    0:"X",
    1:"v",
    2:"X",
    3:"v"
  ]
  Variable _level0.SaE5 = [object #16] [
    0:"v",
    1:"X",
    2:"X",
    3:"v"
  ]
  Variable _level0.SaE6 = [object #17] [
    0:"v",
    1:"X",
    2:"v",
    3:"X"
  ]

Variables resultantes:
Citar
  Variable _level0.Action = 0
  Variable _level0.ColumnaDelMarcado = 0
  Variable _level0.CuadraditoMinimoDeLaFila = 0
  Variable _level0.DistanciaaGanarAceptada = 1
  Variable _level0.FilaDelMarcado = 0
  Variable _level0.NombreDeSE = "SvXvv"
  Variable _level0.NombreDeSituacion = "SvXXv"
  Variable _level0.NroDeSExperimentandose = 1
  Variable _level0.Resumen = "SvXXvBestAction"
  Variable _level0.SaE = 1
  Variable _level0.SituacionHechaTexto = "vXXv"
  Variable _level0.SvvvXBestAction = 2
  Variable _level0.SvvvXDistanciaaGanar = 1
  Variable _level0.SvvXvBestAction = 3
  Variable _level0.SvvXvDistanciaaGanar = 1
  Variable _level0.SvXvvBestAction = 0
  Variable _level0.SvXvvDistanciaaGanar = 1
  Variable _level0.SvXvXBestAction = 0
  Variable _level0.SvXvXDistanciaaGanar = 1
  Variable _level0.SvXXvBestAction = 0
  Variable _level0.SvXXvDistanciaaGanar = 1
  Variable _level0.SXvvvBestAction = 1
  Variable _level0.SXvvvDistanciaaGanar = 1
  Variable _level0.SXvvXBestAction = 1
  Variable _level0.SXvvXDistanciaaGanar = 1
  Variable _level0.SXvXvBestAction = 1
  Variable _level0.SXvXvDistanciaaGanar = 1

Luego lo reviso mejor. ¿Sugerencias?