From: Leandro Lucarella Date: Sun, 17 Dec 2006 20:11:07 +0000 (+0000) Subject: Se purgan teorias porque cuando hay muchas se arrastra el planificador. Tambien se... X-Git-Tag: entrega-20061218~10 X-Git-Url: https://git.llucax.com/z.facultad/75.68/celdas.git/commitdiff_plain/b914931109eeea8f1dd22f82147fd755c86c1084?hp=3576e09328fd118cbd62a1ce4ab66a2f78b863f4 Se purgan teorias porque cuando hay muchas se arrastra el planificador. Tambien se baja la cantidad maxima de recursiones al planificar. --- diff --git a/trunk/src/sistemaautonomo.cpp b/trunk/src/sistemaautonomo.cpp index 413f685..7bc390b 100644 --- a/trunk/src/sistemaautonomo.cpp +++ b/trunk/src/sistemaautonomo.cpp @@ -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& 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& datos_iniciales, plan.add (new_plan) ; } - -/* -//-------------------------------------------------------------------------------------------- -//-- -bool CSistemaAutonomo::ejecutar (CIndiceMagico& plan) +void CSistemaAutonomo::purgar_teorias() { - bool result = true ; - unsigned i ; - t_fnc(pFnc) ; - CTeoria t ; - - - for (i=0; ip_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(); } -*/ + diff --git a/trunk/src/sistemaautonomo.h b/trunk/src/sistemaautonomo.h index 6ef8899..1aa60d9 100644 --- a/trunk/src/sistemaautonomo.h +++ b/trunk/src/sistemaautonomo.h @@ -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: