entorno (hash).
datos-finales (hash).
+ print "Crea Sistema autonomo".
+ sa = new SistemaAutonomo.
+
print "Llena entorno".
- entorno{"sensor"} = 0.
+ entorno{"sensor1"} = 0.
+ entorno{"sensor2"} = 0.
+ entorno{"sensor3"} = 0.
+ entorno{"sensor4"} = 0.
entorno{"movido"} = 0.
- print "Crea Sistema autónomo".
- sa = new SistemaAutonomo.
+ print "Actualiza entorno".
+ sa update-entorno entorno entorno.
- print "Crea Teorías".
+ print "Crea Teoria 1".
teorias = 2 new Teorias.
- teorias{0} init named "t1" with-action "avanza".
- (teorias{0}) set-dato-inicial name "sensor" value 0.
- (teorias{0}) set-dato-inicial name "movido" value -3000000.
- (teorias{0}) set-dato-final name "sensor" value -3000000.
- (teorias{0}) set-dato-final name "movido" value 1.
-
- teorias{1} init named "t2" with-action "retrocede".
- (teorias{1}) set-dato-inicial name "sensor" value 1.
- (teorias{1}) set-dato-inicial name "movido" value -3000000.
- (teorias{1}) set-dato-final name "sensor" value -3000000.
- (teorias{1}) set-dato-final name "movido" value 1.
-
- print "Agrega teorías al sistema autónomo".
+ teorias{0} init named "avanzar X 1" with-action "avanzarX".
+
+ print "Carga datos iniciales Teoria 1".
+ (teorias{0}) set-dato-inicial name "sensor1" value ANY.
+ (teorias{0}) set-dato-inicial name "sensor2" value ANY.
+ (teorias{0}) set-dato-inicial name "sensor3" value ANY.
+ (teorias{0}) set-dato-inicial name "sensor4" value ANY.
+ (teorias{0}) set-dato-inicial name "movido" value ANY.
+
+ print "Carga datos finales Teoria 1".
+ (teorias{0}) set-dato-final name "sensor1" value ANY.
+ (teorias{0}) set-dato-final name "sensor2" value ANY.
+ (teorias{0}) set-dato-final name "sensor3" value ANY.
+ (teorias{0}) set-dato-final name "sensor4" value ANY.
+ (teorias{0}) set-dato-final name "movido" value ANY.
+
+ print "Crea Teoria 2".
+ teorias{1} init named "avanzar X 2" with-action "avanzarX".
+
+ print "Carga datos iniciales Teoria 2".
+ (teorias{1}) set-dato-inicial name "sensor1" value ANY.
+ (teorias{1}) set-dato-inicial name "sensor2" value ANY.
+ (teorias{1}) set-dato-inicial name "sensor3" value ANY.
+ (teorias{1}) set-dato-inicial name "sensor4" value ANY.
+ (teorias{1}) set-dato-inicial name "movido" value ANY.
+
+ print "Carga datos finales Teoria 1".
+ (teorias{1}) set-dato-final name "sensor1" value ANY.
+ (teorias{1}) set-dato-final name "sensor2" value ANY.
+ (teorias{1}) set-dato-final name "sensor3" value ANY.
+ (teorias{1}) set-dato-final name "sensor4" value ANY.
+ (teorias{1}) set-dato-final name "movido" value ANY.
+
+ print "Agrega teorias al sistema autonomo".
sa add teoria (teorias{0}).
sa add teoria (teorias{1}).
- print "Actualiza entorno".
- sa update-entorno entorno entorno.
- print "Ponemos condición final esperada para el plan".
+
+ print "Ponemos condicion final esperada para el plan".
datos-finales{"movido"} = 1.
sa update-datos-finales datos-finales datos-finales.
+
print "Calcula el plan".
sa plan.
- print "Vemos si tiene una teoría más".
+
+ print "Vemos si tiene una teoria mas".
while (sa has-next-theory): {
- print "Sí, tiene".
- print "Obtiene próxima teoría".
+
+ print "Si, tiene".
+ print "Obtiene proxima teoria".
teoria = sa get-next-theory.
- print "Obtiene datos de la teoría teoría".
+
+ print "Obtiene datos de la teoria".
print(teoria get-nombre).
print(teoria get-accion).
- if ((teoria get-accion) == "avanza"): {
- entorno{"sensor"} = 1.
- entorno{"movido"} = 1.
- }
- if ((teoria get-accion) == "retrocede"): {
- entorno{"sensor"} = 0.
+
+ if ((teoria get-accion) == "avanzarX"): {
+ entorno{"sensor1"} = 1.
entorno{"movido"} = 1.
}
- print "Valida teoría".
+
+ print "Valida teoria".
sa update-entorno entorno entorno.
if (sa validate theory teoria): {
print "valida".
else {
print "Teoria no valida, salimos".
}
- print "Vemos si tiene una teoría más".
+
+ print "Vemos si tiene una teoria mas".
}
print "No, no tiene".
a.teorias.add(t1.nombre.c_str(), t1) ;
a.teorias.add(t2.nombre.c_str(), t2) ;
// OLD a.teorias.add(t3.nombre.c_str(), t3) ;
+#ifdef DEBUG
+ std::cout << "Agrega teoria " << t1.nombre << ":\n";
+ std::cout << " .datos_iniciales:\n" << t1.datos_iniciales << "\n";
+ std::cout << " .datos_finales:\n" << t1.datos_finales << "\n";
+ std::cout << "Agrega teoria " << t2.nombre << ":\n";
+ std::cout << " .datos_iniciales:\n" << t2.datos_iniciales << "\n";
+ std::cout << " .datos_finales:\n" << t2.datos_finales << "\n";
+#endif // DEBUG
// Inicializo el SA
// Obtengo un plan
- double p = 1 ;
- CIndiceMagico<CTeoria> plan ;
CIndiceMagico<t_dato> datos_finales;
a.m_datos_finales.add ("robot.avanzo_en_x", 1) ;
a.plan();
for (unsigned i=0; i<a.m_plan.count(); i++)
std::cout << a.m_plan[i].nombre.c_str() << std::endl ;
-
+
+ if (a.has_next_theory())
+ {
+ CTeoria* t = a.get_next_theory();
+ if (a.validate_theory(t))
+ std::cout << "Valida\n";
+ }
// datos_finales.add ("robot.avanzo_en_x", 1) ;
#include "sistemaautonomo.h"\r
#include "slBrevePluginAPI.h"\r
+\r
+#ifdef DEBUG\r
#include <iostream>\r
+#endif // DEBUG\r
\r
/////////////////////////// CTeoria /////////////////////////\r
\r
// string TeoriaGetAccion(pointer{Teoria})\r
int SAbrTeoriaGetAccion(brEval args[], brEval* result, void* data)\r
{\r
- // TODO CTeoria* t = (CTeoria*) BRPOINTER(args);\r
- // TODO result->set(t->accion.c_str());\r
- result->set("avanzar"); // FIXME\r
+ CTeoria* t = (CTeoria*) BRPOINTER(args);\r
+ result->set(t->funcion.c_str());\r
return EC_OK;\r
}\r
\r
CSistemaAutonomo* sa = (CSistemaAutonomo*) BRPOINTER(args);\r
CTeoria* t = (CTeoria*) BRPOINTER(args+1);\r
sa->teorias.add(t->nombre.c_str(), *t);\r
+#ifdef DEBUG\r
+ std::cout << "Agrega teoria " << t->nombre << ":\n";\r
+ std::cout << " .datos_iniciales:\n" << t->datos_iniciales << "\n";\r
+ std::cout << " .datos_finales:\n" << t->datos_finales << "\n";\r
+#endif // DEBUG\r
return EC_OK;\r
}\r
\r
#include "sistemaautonomo.h"
+#ifdef DEBUG
+#include <iostream>
+#endif // DEBUG
+
//--------------------------------------------------------------------------------------------
//-- Funciones Auxiliares
{
double p = 1.0;
m_plan.clear();
+#ifdef DEBUG
+ std::cout << "entorno:\n" << p_entorno->datos << "\n";
+ std::cout << "datos finales:\n" << m_datos_finales << "\n";
+#endif // DEBUG
planificar(p_entorno->datos, m_datos_finales, m_plan, p);
+#ifdef DEBUG
+ std::cout << "plan:\n" << m_plan << "\n";
+#endif // DEBUG
curr_theory = m_plan.begin();
+#ifdef DEBUG
+ if (curr_theory == m_plan.end())
+ std::cout << "No hay teorías\n";
+ else
+ std::cout << "curr teoria: " << &*curr_theory << "=" << curr_theory->nombre << "\n";
+#endif // DEBUG
}
//--------------------------------------------------------------------------------------------
//--
-#include <iostream> // XXX FIXME
bool CSistemaAutonomo::has_next_theory()
{
return curr_theory != m_plan.end();