@use SistemaAutonomo.\r
\r
@define CELDAS_MAX_VELOCITY 30.\r
-@define CELDAS_TURNO 100.\r
+@define CELDAS_TURNO 80.\r
@define CELDAS_SENSOR_THRESHOLD 9.\r
\r
PhysicalControl : CeldasControl {\r
\r
# Configuracion de sistema autonomo\r
sa = new SistemaAutonomo.\r
+ sa init with-max-pasos 4 with-max-teorias 15.\r
iterate = 0.\r
plan_finished = 1. # así planificamos apenas empezamos\r
\r
+ variables:\r
ptr (pointer).\r
\r
- + to init:\r
- ptr = SistemaAutonomoNew(). \r
+ + to init with-max-pasos max-pasos = 4 (int) with-max-teorias max-teorias = 15 (int):\r
+ ptr = SistemaAutonomoNew(max-pasos, max-teorias).\r
\r
+ to add teoria theTeoria (object):\r
SistemaAutonomoAddTeoria(ptr, (theTeoria get-ptr)).\r
print "Crea Sistema autonomo".
sa = new SistemaAutonomo.
+ sa init with-max-pasos 4 with-max-teorias 15.
print "Llena entorno".
entorno{"sensor1"} = 0.
\r
/////////////////////////// CSistemaAutonomo /////////////////////////\r
\r
-// pointer{SistemaAutonomo} SistemaAutonomoNew()\r
+// pointer{SistemaAutonomo} SistemaAutonomoNew(int, int)\r
int SAbrSistemaAutonomoNew(brEval args[], brEval* result, void* data)\r
{\r
- result->set(new CSistemaAutonomo());\r
+ result->set(new CSistemaAutonomo(BRINT(args), BRINT(args+1)));\r
return EC_OK;\r
}\r
\r
brNewBreveCall(data, "TeoriaGetAccion", SAbrTeoriaGetAccion,\r
AT_STRING, AT_POINTER, 0);\r
brNewBreveCall(data, "SistemaAutonomoNew", SAbrSistemaAutonomoNew,\r
- AT_POINTER, 0);\r
+ AT_POINTER, AT_INT, AT_INT, 0);\r
brNewBreveCall(data, "SistemaAutonomoAddTeoria", SAbrSistemaAutonomoAddTeoria,\r
AT_NULL, AT_POINTER, AT_POINTER, 0);\r
brNewBreveCall(data, "SistemaAutonomoSetValue", SAbrSistemaAutonomoSetValue,\r
{
double p = 1.0;
m_plan.clear();
- if (teorias.count() > TEORIAS_MAX) purgar_teorias();
+ if (teorias.count() > max_teorias) purgar_teorias();
#ifdef DEBUG
std::cout << "SA: Planificando...\n";
std::cout << "SA: \tentorno:\n" << p_entorno->datos << "\n";
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) )
#ifdef DEBUG
std::cout << "SA: Se purgo la teoria " << *teorias[pos] << "\n";
#endif // DEBUG
- if (size - 1 > TEORIAS_MAX) purgar_teorias();
+ if (size - 1 > max_teorias) purgar_teorias();
}
// [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
// 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()