¿Resuelto? IA aprendiendo con pistas. ¿Por qué al final me da 1?

Iniciado por Tachikomaia, 9 Junio 2020, 19:04 PM

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

Tachikomaia

Cuando no hay pistas, no he tenido mucho problema por ahora; la "pista" es si cumplió el objetivo o no, y de qué situación se produjo cada una de las producidas que llevaron a cumplirse el objetivo.

Así:
Escena 1
  actions for fotograma 1
     // SitIni.
     Base.S = 10;
     // Guardar SitIni.
     SitID = "S"+Base.S;
     Depth = 1;
     attachMovie("Circ", SitID, Depth);
     setProperty (SitID, _x, random(401));
     setProperty (SitID, _y, random(301));
     set (SitID+".S", Base.S);
     set (SitID+".C", "Ninguno");
     // Cand normal.
     C = 1;
     // Vars de Unsolved sits.
     U = 0;
     Us = 0;
  actions for fotograma 2
     // Reset Sit. Aplic.
     S = Base.S+C;
     // ¿Sol?
     if (20<S) {
        // Sol; begin to show list
        List = C;
        gotoAndPlay (4);
        // Sino ¿la sit está anotada?
     } else if (eval("S"+S+".S") == undefined) {
        // No. Anotarla.
        SitID = "S"+S;
        Depth = Depth+1;
        attachMovie("Circ", SitID, Depth);
        setProperty (SitID, _x, random(401));
        setProperty (SitID, _y, random(301));
        set (SitID+".S", Base.S);
        set (SitID+".C", C);
        Us = Us+1;
        SitID = "U"+Us;
        Depth = Depth+1;
        attachMovie("Circ", SitID, Depth);
        setProperty (SitID, _x, random(401));
        setProperty (SitID, _y, random(301));
        set (SitID+".S", S);
     }
  actions for fotograma 3
     // La sit existe. ¿Candmod is pos?
     if (C<2) {
        // Candmod.
        C = C+1;
        gotoAndPlay (2);
     } else if (U < Us) {
        // Use Uns.
        U = U+1;
        Base.S = eval("U"+U+".S");
        C = 1;
        gotoAndPlay (2);
     } else {
        // No hay Sol.
        stop ();
     }
  actions for fotograma 5
     SitID = eval("S"+Base.S+".C");
     Base.S = eval("S"+Base.S+".S");
     if (SitID != "Ninguno") {
        List = List+" "+SitID;
        gotoAndPlay (4);
     } else {
        stop ();
     }
El pseudocódigo sería más o menos así:
Parte 1:
- Establecer situación inicial.
- Establecer valor inicial del candidato.
- Establecer situaciones halladas.
- Establecer situaciones analizadas.
...
Obviamente sigue pero no tengo ganas de pensar cómo describirlo humanamente. El candidato varía, las situaciones nuevas se analizan aplicándoles diferentes candidatos...

Cuando hay pistas, habría que ver el tipo de pista ¿cuales son posibles?
- Parecido de un valor. "Más" o "menos".
- Parecido de parte de un valor. Una forma de esto es lo que se hace en MasterMind.
- Parecido de la suma de las partes de un valor.
...son muchos imagino. Por ahora me interesa la 1, la más típica.

Otro punto relevante es si son suficientes o insuficientes. Empezaré por las suficientes.

Lo intenté...
Escena 1
  actions for fotograma 1
    // SitIni.
     Base.S = 10;
     // Guardar SitIni.
     SitID = "S"+Base.S;
     Depth = 1;
     attachMovie("Circ", SitID, Depth);
     setProperty (SitID, _x, random(401));
     setProperty (SitID, _y, random(301));
     set (SitID+".S", Base.S);
     set (SitID+".C", "Ninguno");
     // Cand normal.
     C = 1;
     // Vars de Unsolved sits.
     U = 0;
     Us = 0;
     Pista = "";
  actions for fotograma 2
     // Reset Sit.
     S = Base.S;
     // Mod de Aplic, basado en pistas.
     if (Pista == 2) {
        C = 2;
     }
     // Aplic
     S = S+C;
     // ¿Sol?
     if (20<S) {
        // Sol; begin to show list
        List = C;
        gotoAndPlay (4);
     } else {
        // sino se dan pistas si es posible
        if (20<=S) {
           Pista = 2;
        } else {
           Pista = "";
        }
        // ¿La sit está anotada?
        if (eval("S"+S+".S") == undefined) {
           // No. Anotarla.
           SitID = "S"+S;
           Depth = Depth+1;
           attachMovie("Circ", SitID, Depth);
           setProperty (SitID, _x, random(401));
           setProperty (SitID, _y, random(301));
           set (SitID+".S", Base.S);
           set (SitID+".C", C);
           Us = Us+1;
           SitID = "U"+Us;
           Depth = Depth+1;
           attachMovie("Circ", SitID, Depth);
           setProperty (SitID, _x, random(401));
           setProperty (SitID, _y, random(301));
           set (SitID+".S", S);
        }
     }
  actions for fotograma 3
     // La sit existe. ¿Candmod is pos?
     if (C<2) {
        // Candmod.
        C = C+1;
        gotoAndPlay (2);
     } else if (U<Us) {
        // Use Uns.
        U = U+1;
        Base.S = eval("U"+U+".S");
        C = 1;
        gotoAndPlay (2);
     } else {
        // No hay Sol.
        stop ();
     }
  actions for fotograma 5
     SitID = eval("S"+Base.S+".C");
     Base.S = eval("S"+Base.S+".S");
     if (SitID != "Ninguno") {
        List = List+" "+SitID;
        gotoAndPlay (4);
     } else {
        stop ();
     }
...pero las pistas siempre deberían ser "2" y no obstante el programa en el último caso elige "1".

Es un programa de posicionarse en un casillero que inicialmente es mayor al objeto que se posiciona.

¿Cual es la falla?

Emertech

CitarIA aprendiendo con pistas
Según esto piensas que tus líneas de código en Action Script están "aprendiendo" y tú estás desarrollando Inteligencia Artificial? Si es así, que te hace creer eso o en que te basas para afirmar que tus líneas de código van a "aprender" y que estás desarrollando IA?

Tachikomaia

#2
Cita de: Emertech en 10 Junio 2020, 00:09 AM
Según esto piensas que tus líneas de código en Action Script están "aprendiendo" y tú estás desarrollando Inteligencia Artificial? Si es así, que te hace creer eso o en que te basas para afirmar que tus líneas de código van a "aprender" y que estás desarrollando IA?

Estoy cansado no sé por qué (en parte porque no hallo la solución) y me vienes con esas... preguntas. A veces soy simplista, pero a ver, todo empezó cuando desesperado pensé en ir a una iglesia a ver si así el supuesto Dios me respondía cierta duda, y me di cuenta que si no existe sería bueno crearlo con programación. A partir de ahí tuve la suposición muy marcada de que una cosa es la IA de juegos donde por ejemplo si saltas hacia el rival te hace dragon punch (en Street Fighter 4, una pirata, de NES, es así), y otra cosa es que luego de hacer varas pruebas aprenda que eso conviene o en qué casos. ¿Es aprender? Son datos que en principio no están, que yo no le doy (sólo le doy qué posibles movimentos hay), y que sirven para lograr un objetivo que le planteo. Tal vez "aprender" es demasiado pretencioso, pero qué más da...
Similar en cuanto a si es IA o no es.
No sé si quedó respondido.
Imagina un eje de X y un objeto posicionado en él, antes del 20. Si le digo "ve al 20" así nomás, eso no es IA o es una sin aprendizaje, sin gracia, casi un programa normal. Si en cambio le digo que se mueva de todas las formas posibles en todas las condiciones posibles mientras no supere la casilla 20, hay diferencia...

En este caso hay pistas, pero eso es un agregado que estoy poniendo, que como expliqué puede tener diferentes formas, dificultad, suficiencia...

Realmente estoy cansado de gente que en vez de ayudar critica, o bien de discutir cosas. No digo que sea tu caso pero se parece. Posteo buscando soluciones obviamente, no para defender mis ideas.

La diferencia también o básicamente es que yo no sé qué solución hallará, pero eso sólo en programas complejos que no he llegado a hacer. Cómo superar el 20 es fácil, pero otras situaciones no, aunque tengan cierta analogía.

Emertech

Lo pregunté por lo siguiente:
Tu problema sí se puede resolver con IA específicamente redes neuronales y aprendizaje profundo incluyendo una función tangente (inicialmente esta función para verificar eficacia por objetivo).
Pero para llegar a resolver de este modo entenderás lo que se necesita saber, sin mencionar que Action Script no está a la altura para poder desarrollar la solución.
Lo que estás haciendo se puede comparar a una persona que acaba de aprender a sumar y quiere realizar una suma algebraica de polinomios usando solamente sumas (sin recorrer el camino entre ambas), es por ese motivo que difícilmente encuentres a alguien pueda ayudarte.

Tachikomaia

Si saben tanto entonces podrían decirme por qué al final me da 1... No pido más que eso creo.

Tachikomaia

#5
Hice una "investigación manual", o simulación manual, así:

Y como ven en la última línea es 1, es decir, la 1era situación, que cuando la duda está resuelta es la última en cargarse, dice 1. No sé exactamente por qué pasa eso o por qué ese es el problema, pero creo que está relacionado conque al inicio la pista no es 2.
Una solución es cambiar inmediatamente a C=2 una vez que se obtiene que pista es 2.
Dudo que sea la solución correcta o ideal, pero me quité un peso de encima.