// [Planificador]
-// 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 4
-
// 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.
// Una opcion es determinar una cantidad maxima de posibles planes que se pueden testear.
// 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 20
-
// Es la minima relacion P/K que puede tener una teoria para considerarse como aceptable.
#define TOLERANCIA 0.75
inline
std::ostream& operator<< (std::ostream& os, const CTeoria& t)
{
+#ifdef LOG
+ return os << t.nombre << "," << t.funcion << "," << t.p << "," << t.k;
+#else // ! LOG
return os << "CTeoria(nombre=" << t.nombre << ", funcion=" << t.funcion
- << ", p=" << t.p << ", k=" << t.k << /*", ciclos=" << t.ciclos <<*/ ")";
-// << "):\n\tdatos_iniciales:\n" << t.datos_iniciales
-// << "\tdatos_finales:\n" << t.datos_finales << "\n";
+ << ", p=" << t.p << ", k=" << t.k << ")";
+#endif // LOG
+}
+
+template < >
+inline
+std::ostream& operator<< (std::ostream& os, CIndiceMagico<CTeoria*>& im)
+{
+ unsigned c = im.count();
+ if (c-- == 0) return os << "";
+ for (unsigned i = 0; i < c; ++i)
+ os << *im[i] << "\n";
+ os << *im[c];
+ return os;
}
// Las teorias que tiene el SA.
CIndiceMagico<CTeoria*> 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.
+ unsigned max_pasos;
+
+ // 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. El valor en realidad no es la cantidad máxima, pueden haber
+ // más, pero en cada nueva planificación se seleccionan las mejores max_teorias teorias.
+ unsigned max_teorias;
+
public:
// Constructor
- CSistemaAutonomo(): p_entorno(new CEntorno) {}
+ CSistemaAutonomo(unsigned max_pasos = 4, unsigned max_teorias = 15):
+ p_entorno(new CEntorno), max_pasos(max_pasos),
+ max_teorias(max_teorias) {}
// Destructor
~CSistemaAutonomo()