From fd72896c8b832ca19985ed67f6b1e4d570c85da2 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Sun, 17 Dec 2006 23:38:30 +0000 Subject: [PATCH] =?utf8?q?Se=20agregan=20la=20m=C3=A1xima=20cantidad=20de?= =?utf8?q?=20pasos=20al=20planificar=20y=20la=20m=C3=A1xima=20cantidad=20d?= =?utf8?q?e=20teor=C3=ADas=20que=20puede=20tener=20el=20planificador=20com?= =?utf8?q?o=20par=C3=A1metros=20del=20constructor=20del=20sistema=20aut?= =?utf8?q?=C3=B3nomo=20as=C3=AD=20no=20hay=20que=20recompilar=20para=20pro?= =?utf8?q?bar=20valores=20distintos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- trunk/src/breve/Celdas.tz | 3 ++- trunk/src/breve/SistemaAutonomo.tz | 4 ++-- trunk/src/breve/SistemaAutonomoDemo.tz | 1 + trunk/src/plugin.cpp | 6 +++--- trunk/src/sistemaautonomo.cpp | 6 +++--- trunk/src/sistemaautonomo.h | 25 ++++++++++++++----------- 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/trunk/src/breve/Celdas.tz b/trunk/src/breve/Celdas.tz index 7c1afdc..6ed43f4 100644 --- a/trunk/src/breve/Celdas.tz +++ b/trunk/src/breve/Celdas.tz @@ -7,7 +7,7 @@ @use SistemaAutonomo. @define CELDAS_MAX_VELOCITY 30. -@define CELDAS_TURNO 100. +@define CELDAS_TURNO 80. @define CELDAS_SENSOR_THRESHOLD 9. PhysicalControl : CeldasControl { @@ -255,6 +255,7 @@ CeldasLightVehicle : CeldasVehicle (aka CeldasVehicles) { # Configuracion de sistema autonomo sa = new SistemaAutonomo. + sa init with-max-pasos 4 with-max-teorias 15. iterate = 0. plan_finished = 1. # así planificamos apenas empezamos diff --git a/trunk/src/breve/SistemaAutonomo.tz b/trunk/src/breve/SistemaAutonomo.tz index 3bcf5c1..e2fd6b8 100644 --- a/trunk/src/breve/SistemaAutonomo.tz +++ b/trunk/src/breve/SistemaAutonomo.tz @@ -37,8 +37,8 @@ Object : SistemaAutonomo { + variables: ptr (pointer). - + to init: - ptr = SistemaAutonomoNew(). + + to init with-max-pasos max-pasos = 4 (int) with-max-teorias max-teorias = 15 (int): + ptr = SistemaAutonomoNew(max-pasos, max-teorias). + to add teoria theTeoria (object): SistemaAutonomoAddTeoria(ptr, (theTeoria get-ptr)). diff --git a/trunk/src/breve/SistemaAutonomoDemo.tz b/trunk/src/breve/SistemaAutonomoDemo.tz index aff71cd..9a79373 100644 --- a/trunk/src/breve/SistemaAutonomoDemo.tz +++ b/trunk/src/breve/SistemaAutonomoDemo.tz @@ -14,6 +14,7 @@ Control : SistemaAutonomoController { print "Crea Sistema autonomo". sa = new SistemaAutonomo. + sa init with-max-pasos 4 with-max-teorias 15. print "Llena entorno". entorno{"sensor1"} = 0. diff --git a/trunk/src/plugin.cpp b/trunk/src/plugin.cpp index 52e1404..9571aa2 100644 --- a/trunk/src/plugin.cpp +++ b/trunk/src/plugin.cpp @@ -53,10 +53,10 @@ int SAbrTeoriaGetAccion(brEval args[], brEval* result, void* data) /////////////////////////// CSistemaAutonomo ///////////////////////// -// pointer{SistemaAutonomo} SistemaAutonomoNew() +// pointer{SistemaAutonomo} SistemaAutonomoNew(int, int) int SAbrSistemaAutonomoNew(brEval args[], brEval* result, void* data) { - result->set(new CSistemaAutonomo()); + result->set(new CSistemaAutonomo(BRINT(args), BRINT(args+1))); return EC_OK; } @@ -143,7 +143,7 @@ DLLEXPORT void SAbrFunctions(void *data) brNewBreveCall(data, "TeoriaGetAccion", SAbrTeoriaGetAccion, AT_STRING, AT_POINTER, 0); brNewBreveCall(data, "SistemaAutonomoNew", SAbrSistemaAutonomoNew, - AT_POINTER, 0); + AT_POINTER, AT_INT, AT_INT, 0); brNewBreveCall(data, "SistemaAutonomoAddTeoria", SAbrSistemaAutonomoAddTeoria, AT_NULL, AT_POINTER, AT_POINTER, 0); brNewBreveCall(data, "SistemaAutonomoSetValue", SAbrSistemaAutonomoSetValue, diff --git a/trunk/src/sistemaautonomo.cpp b/trunk/src/sistemaautonomo.cpp index bb04b5b..54b13cc 100644 --- a/trunk/src/sistemaautonomo.cpp +++ b/trunk/src/sistemaautonomo.cpp @@ -31,7 +31,7 @@ void CSistemaAutonomo::plan() { 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"; @@ -272,7 +272,7 @@ void CSistemaAutonomo::planificar (CIndiceMagico& datos_iniciales, 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) ) @@ -315,6 +315,6 @@ void CSistemaAutonomo::purgar_teorias() #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(); } diff --git a/trunk/src/sistemaautonomo.h b/trunk/src/sistemaautonomo.h index 819db8a..91efc99 100644 --- a/trunk/src/sistemaautonomo.h +++ b/trunk/src/sistemaautonomo.h @@ -54,11 +54,6 @@ typedef double t_dato ; // [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. @@ -66,11 +61,6 @@ 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 20 - // Es la minima relacion P/K que puede tener una teoria para considerarse como aceptable. #define TOLERANCIA 0.75 @@ -188,9 +178,22 @@ public: // Las teorias que tiene el SA. CIndiceMagico 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() -- 2.43.0