]> git.llucax.com Git - z.facultad/75.68/celdas.git/commitdiff
Se purgan teorias porque cuando hay muchas se arrastra el planificador. Tambien se...
authorLeandro Lucarella <llucax@gmail.com>
Sun, 17 Dec 2006 20:11:07 +0000 (20:11 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 17 Dec 2006 20:11:07 +0000 (20:11 +0000)
trunk/src/sistemaautonomo.cpp
trunk/src/sistemaautonomo.h

index 413f6857a3367d3b5c6409579fe2b26baaa540e8..7bc390b34e9f7576f87a7364834fbf7b84f62581 100644 (file)
@@ -48,6 +48,7 @@ void CSistemaAutonomo::plan()
        else
                std::cout << "SA: curr teoria: " << **curr_theory << "\n";
 #endif // DEBUG
+       if (teorias.count() > TEORIAS_MAX) purgar_teorias();
 }
 
 //--------------------------------------------------------------------------------------------
@@ -271,7 +272,7 @@ void CSistemaAutonomo::planificar (CIndiceMagico<t_dato>&   datos_iniciales,
 
        if ( incluye_a(datos_iniciales, datos_finales) ) return ;
 
-       if ( numero_de_llamada > 7 ) return ;
+       if ( numero_de_llamada > PASOS_MAXIMOS_DE_PLAN ) return ;
 
        for (i = 0; i < teorias.count(); i++)
                if ( incluye_a(teorias[i]->datos_iniciales, datos_iniciales) )
@@ -296,52 +297,24 @@ void CSistemaAutonomo::planificar (CIndiceMagico<t_dato>& datos_iniciales,
                plan.add (new_plan) ;
 }
 
-
-/*
-//--------------------------------------------------------------------------------------------
-//--
-bool CSistemaAutonomo::ejecutar (CIndiceMagico<CTeoria>& plan)
+void CSistemaAutonomo::purgar_teorias()
 {
-       bool result = true ;
-       unsigned i ;
-       t_fnc(pFnc) ;
-       CTeoria t ;     
-
-
-       for (i=0; i<plan.count() && result; i++)
+       unsigned size = teorias.count();
+       unsigned pos = size - 1;
+       double whorst_prob = 1.0;
+       for (unsigned i = 0; i < size; ++i)
        {
-               t = plan[i] ;
-               pFnc = t.funcion;
-
-               // Ejecuto la funcion
-               (*pFnc)(*(this->p_entorno)) ;
-
-               // Incremento el K
-               t.k++ ;
-
-               // Actualizo los datos del entorno
-               this->p_entorno->actualizar() ;
-
-               // Veo si se verifica la condicion final
-               result = this->verificar_condicion(t.datos_finales) ;
-
-               // Si fallo la teoria
-               if (!result)
-               {
-                       // Aplico heuristicas de correccion
-                       this->heuristca_retraccion(t) ;
-               }
-               else
+               double p = (double)teorias[i]->p / (double)teorias[i]->k;
+               if (p < whorst_prob)
                {
-                       t.p++ ;
+                       whorst_prob = p;
+                       pos = i;
                }
-
-               // Aplico heuristicas de observacion
-               this->heuristca_observacion(t) ;
-               this->heuristca_generalizacion(t);
        }
-
-       //
-       return result ;
+       teorias.remove(pos);
+#ifdef DEBUG
+       std::cout << "SA: Se purgo la teoria " << teorias[pos] << "\n";
+#endif // DEBUG
+       if (size - 1 > TEORIAS_MAX) purgar_teorias();
 }
-*/
+
index 6ef889903807a3f3f797f23d4650267a8c288c50..1aa60d9d87708b14f44fcbfd69d22bb01b5f2707 100644 (file)
@@ -57,7 +57,7 @@ typedef double t_dato ;
 // Cantidad maxima de pasos que puede tener un plan.
 // Cuanto mas grande sea este numero, mas ciclos puede tardar el proceso de planificacion.
 // Este valor es un compromiso entre performance y eficiencia.
-#define PASOS_MAXIMOS_DE_PLAN          20
+#define PASOS_MAXIMOS_DE_PLAN          5
 
 // El metodo de planificacion puede encontrar varios planes, y de ellos elige el mejor.
 // Si se hace seleccionar TODOS los posibles planes, puede tardar demasiado.
@@ -66,6 +66,11 @@ typedef double t_dato ;
 // Poner INFINITO si se desea deshabilitar esta opcion.
 #define PLANES_MAXIMOS_TESTEADOS       10
 
+// Cantidad máxima de teorías que puede tener el planificador. Al haber muchas teorías el
+// tarda demasiado tiempo en planificar, por lo tanto es necesario sacar algunas teorías
+// para que sea utilizable.
+#define TEORIAS_MAX                    7
+
 // Es la minima relacion P/K que puede tener una teoria para considerarse como aceptable.
 #define TOLERANCIA                                     0.75
 
@@ -231,6 +236,9 @@ protected:
        // Si dentro de las teorias se encuentra unaque solo difiera de los datos del entorno en una condicíon inicial => se agrega una nueva teoria igual pero con ANY en esa condicion.
        void heuristca_generalizacion(CTeoria&);
 
+       // Purga las teorias que no son muy exitosas.
+       void purgar_teorias();
+
 public: