]> git.llucax.com Git - z.facultad/75.68/celdas.git/blobdiff - trunk/src/sistemaautonomo.cpp
Últimos cambios y documentación.
[z.facultad/75.68/celdas.git] / trunk / src / sistemaautonomo.cpp
index 7bc390b34e9f7576f87a7364834fbf7b84f62581..695e5381e5518c5967ba3a83f62f53ca96422e0c 100644 (file)
@@ -31,16 +31,24 @@ void CSistemaAutonomo::plan()
 {
        double p = 1.0;
        m_plan.clear();
+       if (teorias.count() > max_teorias) purgar_teorias();
 #ifdef DEBUG
        std::cout << "SA: Planificando...\n";
        std::cout << "SA: \tentorno:\n" << p_entorno->datos << "\n";
        std::cout << "SA: \tteorias:\n" << teorias << "\n";
-       std::cout << "SA: \tdatos finales:\n" << m_datos_finales << "\n";
 #endif // DEBUG
+#ifdef LOG
+       std::cout << "Planificando...\n";
+       std::cout << "Entorno:\n" << p_entorno->datos << "\n";
+       std::cout << "Teorias:\n" << teorias << "\n";
+#endif // LOG
        planificar(p_entorno->datos, m_datos_finales, m_plan, p);
 #ifdef DEBUG
        std::cout << "SA: \tplan:\n" << m_plan << "\n";
 #endif // DEBUG
+#ifdef LOG
+       std::cout << "Plan:\n" << m_plan << "\n";
+#endif // LOG
        curr_theory = m_plan.begin();
 #ifdef DEBUG
        if (curr_theory == m_plan.end())
@@ -48,7 +56,6 @@ void CSistemaAutonomo::plan()
        else
                std::cout << "SA: curr teoria: " << **curr_theory << "\n";
 #endif // DEBUG
-       if (teorias.count() > TEORIAS_MAX) purgar_teorias();
 }
 
 //--------------------------------------------------------------------------------------------
@@ -69,6 +76,12 @@ CTeoria* CSistemaAutonomo::get_next_theory()
        }
        else
        {
+#ifdef DEBUG
+               std::cout << "SA: ejecuta teoria: " << **(curr_theory) << "\n";
+#endif // DEBUG
+#ifdef LOG
+               std::cout << "Ejecutando teoria:\n" << **(curr_theory) << "\n";
+#endif // LOG
                return *(curr_theory++);
        }
 }
@@ -82,6 +95,15 @@ bool CSistemaAutonomo::validate_theory(CTeoria* t)
        // Aumento k (cantidad de veces que se probó la teoría
        ++t->k;
 
+#ifdef DEBUG
+       std::cout << "SA: Entorno de verificacion:\n" << p_entorno->datos;
+#endif // DEBUG
+
+#ifdef LOG
+       std::cout << "Verificacion...\n";
+       std::cout << "Entorno:\n" << p_entorno->datos << "\n";
+#endif // LOG
+
        // Verifico
        result = verificar_condicion(t->datos_finales) ;
 
@@ -96,17 +118,33 @@ bool CSistemaAutonomo::validate_theory(CTeoria* t)
                std::cout << "SA: No verifica, aplicando heuristicas...\n";
                std::cout << "SA: Aplicando heuristica de observacion\n";
 #endif // DEBUG
+#ifdef LOG
+               std::cout << "No verifica, aplicando heuristicas...\n";
+               std::cout << "Aplicando heuristica de observacion:\n";
+#endif // LOG
                this->heuristca_observacion(*t) ;
 #ifdef DEBUG
                std::cout << "SA: Aplicando heuristica de generalizacion\n";
 #endif // DEBUG
-               this->heuristca_generalizacion(*t);
+#ifdef LOG
+               std::cout << "Aplicando heuristica de generalizacion:\n";
+#endif // LOG
+               //this->heuristca_generalizacion(*t);
 #ifdef DEBUG
                std::cout << "SA: Aplicando heuristica de retraccion\n";
 #endif // DEBUG
+#ifdef LOG
+               std::cout << "Aplicando heuristica de retraccion:\n";
+#endif // LOG
                // Aplico heuristicas de correccion
                this->heuristca_retraccion(*t) ;
        }
+#ifdef DEBUG
+       else std::cout << "SA: Verifica!\n";
+#endif // DEBUG
+#ifdef LOG
+       else std::cout << "Verifica!\n";
+#endif // LOG
 
        return result;
 }
@@ -156,6 +194,9 @@ void CSistemaAutonomo::heuristca_observacion(CTeoria& t)
        std::cout << "SA: \tdatos_iniciales:\n" << nt.datos_iniciales << "\n";
        std::cout << "SA: \tdatos_finales:\n" << nt.datos_finales << "\n";
 #endif // DEBUG
+#ifdef LOG
+       std::cout << "Agrega teoria: " << nt << "," << nt.datos_iniciales << "," << nt.datos_finales << "\n";
+#endif // LOG
 
 }
 
@@ -217,6 +258,9 @@ void CSistemaAutonomo::heuristca_generalizacion(CTeoria& t)
                                std::cout << "SA: \tdatos_iniciales:\n" << nt->datos_iniciales << "\n";
                                std::cout << "SA: \tdatos_finales:\n" << nt->datos_finales << "\n";
 #endif // DEBUG
+#ifdef LOG
+                               std::cout << "Agrega teoria: " << *nt << "," << nt->datos_iniciales << "," << nt->datos_finales << "\n";
+#endif // LOG
                        }
                }
                posicionCambio = -1;
@@ -251,6 +295,11 @@ void CSistemaAutonomo::heuristca_retraccion(CTeoria& t)
                std::cout << "SA: Se modifica la teoria: " << t << ", el dato final '"
                        << t.datos_finales.keys(modif) << "' puede tomar ahora cualquier valor\n";
 #endif // DEBUG
+#ifdef LOG
+               std::cout << "Se modifica teoria:\n" << t << "\nEl dato final '"
+                       << t.datos_finales.keys(modif) << "' puede tomar ahora cualquier valor\n";
+               std::cout << "Agrega teoria: " << t << "," << t.datos_iniciales << "," << t.datos_finales << "\n";
+#endif // LOG
        }
 }
 
@@ -272,7 +321,7 @@ void CSistemaAutonomo::planificar (CIndiceMagico<t_dato>&   datos_iniciales,
 
        if ( incluye_a(datos_iniciales, datos_finales) ) return ;
 
-       if ( numero_de_llamada > PASOS_MAXIMOS_DE_PLAN ) return ;
+       if (numero_de_llamada > max_pasos) return ;
 
        for (i = 0; i < teorias.count(); i++)
                if ( incluye_a(teorias[i]->datos_iniciales, datos_iniciales) )
@@ -313,8 +362,11 @@ void CSistemaAutonomo::purgar_teorias()
        }
        teorias.remove(pos);
 #ifdef DEBUG
-       std::cout << "SA: Se purgo la teoria " << teorias[pos] << "\n";
+       std::cout << "SA: Se purgo la teoria " << *teorias[pos] << "\n";
 #endif // DEBUG
-       if (size - 1 > TEORIAS_MAX) purgar_teorias();
+#ifdef LOG
+       std::cout << "Se purgo la teoria:\n" << *teorias[pos] << "\n";
+#endif // LOG
+       if (size - 1 > max_teorias) purgar_teorias();
 }