else
std::cout << "SA: curr teoria: " << **curr_theory << "\n";
#endif // DEBUG
+ if (teorias.count() > TEORIAS_MAX) purgar_teorias();
}
//--------------------------------------------------------------------------------------------
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) )
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();
}
-*/
+
// 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.
// 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
// 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: