X-Git-Url: https://git.llucax.com/z.facultad/75.68/celdas.git/blobdiff_plain/44029734cc5263d0548dc78ce9d71c43719d1ea7..2a0c7d1e56dfff663c1fbcaaf39b4e00140a0121:/trunk/src/main.cpp?ds=inline diff --git a/trunk/src/main.cpp b/trunk/src/main.cpp index 648505a..10da19f 100644 --- a/trunk/src/main.cpp +++ b/trunk/src/main.cpp @@ -1,125 +1,178 @@ + #include "main.h" +#include // -double CMiEntorno::AvanzarX() -{ - avanzo_en_x = true ; - return 0 ; -} - - -double CMiEntorno::AvanzarY() -{ - avanzo_en_y = true ; - return 0 ; -} - - -double CMiEntorno::AvanzarZ() -{ - avanzo_en_z = true ; - return 0 ; -} - - -CMiEntorno::CMiEntorno(): - avanzo_en_x(true), avanzo_en_y(true), avanzo_en_z(true) +void CMiEntorno::inicializar() { // Inicializo el Entorno - datos.add("robot.avanzo_en_x", 1) ; - datos.add("robot.avanzo_en_y", 1) ; - datos.add("robot.avanzo_en_z", 1) ; - - datos.add("robot.sensor_1", 0) ; - datos.add("robot.sensor_2", 0) ; - datos.add("robot.sensor_3", 0) ; + datos.add("robot.sensor_adelante", 1) ; + datos.add("robot.sensor_atras", 0) ; + datos.add("robot.sensor_derecha", 0) ; + datos.add("robot.sensor_izquierda", 0) ; + datos.add("robot.avanzo_adelante", 0) ; + datos.add("robot.avanzo_atras", 0) ; + datos.add("robot.avanzo_derecha", 0) ; + datos.add("robot.avanzo_izquierda", 0) ; } void CMiEntorno::actualizar() { - datos.find("robot.sensor_1") = sensor_1 ; - datos.find("robot.sensor_2") = sensor_2 ; - datos.find("robot.sensor_3") = sensor_3 ; - - datos.find("robot.avanzo_en_x") = avanzo_en_x?1:0 ; - datos.find("robot.avanzo_en_y") = avanzo_en_y?1:0 ; - datos.find("robot.avanzo_en_z") = avanzo_en_z?1:0 ; - - + datos.set_val("robot.sensor_adelante", 0) ; + datos.set_val("robot.sensor_atras", 0) ; + datos.set_val("robot.sensor_derecha", 0) ; + datos.set_val("robot.sensor_izquierda", 1) ; + datos.set_val("robot.avanzo_adelante", 1) ; + datos.set_val("robot.avanzo_atras", 0) ; + datos.set_val("robot.avanzo_derecha", 0) ; + datos.set_val("robot.avanzo_izquierda", 0) ; } -struct CMiTeoria1: CTeoria< CMiEntorno > -{ - CMiTeoria1(CMiEntorno& e): - CTeoria< CMiEntorno >("Avanzar_X_1", 1, 1, e) - { - datos_iniciales.add ("robot.sensor_1", 0) ; - datos_finales.add ("robot.avanzo_en_x", 1) ; - } - double funcion() - { - entorno.avanzo_en_x = true ; - return 0 ; - } -}; - -struct CMiTeoria2: CTeoria< CMiEntorno > -{ - CMiTeoria2(CMiEntorno& e): - CTeoria< CMiEntorno >("Avanzar_Y_1", 1, 1, e) - { - datos_iniciales.add ("robot.sensor_2", 0) ; - datos_finales.add ("robot.avanzo_en_y", 1) ; - } - double funcion() - { - entorno.avanzo_en_y = true ; - return 0 ; - } -}; -struct CMiTeoria3: CTeoria< CMiEntorno > -{ - CMiTeoria3(CMiEntorno& e): - CTeoria< CMiEntorno >("Avanzar_Z_1", 1, 1, e) - { - datos_iniciales.add ("robot.sensor_3", 0) ; - datos_finales.add ("robot.avanzo_en_z", 1) ; - } - double funcion() - { - entorno.avanzo_en_z = true ; - return 0 ; - } -}; // -int main(int argc, char** argv) +int main(int argc, char* argv[]) { // - CMiEntorno e ; - CSistemaAutonomo< CMiEntorno > a(e) ; + CMiEntorno* e = new CMiEntorno; + CSistemaAutonomo a ; + e->inicializar() ; // Inicializo las teorias - a.teorias.add("teoria1", new CMiTeoria1(e)) ; - a.teorias.add("teoria2", new CMiTeoria2(e)) ; - a.teorias.add("teoria3", new CMiTeoria3(e)) ; - + CTeoria* pt1 = new CTeoria("Avanzar", "avanzar", 1, 1) ; + CTeoria& t1 = *pt1; + t1.datos_iniciales.add ("robot.sensor_adelante", 0) ; + t1.datos_iniciales.add ("robot.sensor_atras", ANY) ; + t1.datos_iniciales.add ("robot.sensor_derecha", ANY) ; + t1.datos_iniciales.add ("robot.sensor_izquierda", ANY) ; + t1.datos_iniciales.add ("robot.avanzo_adelante", ANY) ; + t1.datos_iniciales.add ("robot.avanzo_atras", ANY) ; + t1.datos_iniciales.add ("robot.avanzo_derecha", ANY) ; + t1.datos_iniciales.add ("robot.avanzo_izquierda", ANY) ; + t1.datos_finales.add ("robot.sensor_adelante", ANY) ; + t1.datos_finales.add ("robot.sensor_atras", ANY) ; + t1.datos_finales.add ("robot.sensor_derecha", ANY) ; + t1.datos_finales.add ("robot.sensor_izquierda", ANY) ; + t1.datos_finales.add ("robot.avanzo_adelante", 1) ; + t1.datos_finales.add ("robot.avanzo_atras", 0) ; + t1.datos_finales.add ("robot.avanzo_derecha", 0) ; + t1.datos_finales.add ("robot.avanzo_izquierda", 0) ; + + CTeoria* pt2 = new CTeoria("Retroceder", "retroceder", 1, 1) ; + CTeoria& t2 = *pt2; + t2.datos_iniciales.add ("robot.sensor_adelante", ANY) ; + t2.datos_iniciales.add ("robot.sensor_atras", 0) ; + t2.datos_iniciales.add ("robot.sensor_derecha", ANY) ; + t2.datos_iniciales.add ("robot.sensor_izquierda", ANY) ; + t2.datos_iniciales.add ("robot.avanzo_adelante", ANY) ; + t2.datos_iniciales.add ("robot.avanzo_atras", ANY) ; + t2.datos_iniciales.add ("robot.avanzo_derecha", ANY) ; + t2.datos_iniciales.add ("robot.avanzo_izquierda", ANY) ; + t2.datos_finales.add ("robot.sensor_adelante", ANY) ; + t2.datos_finales.add ("robot.sensor_atras", ANY) ; + t2.datos_finales.add ("robot.sensor_derecha", ANY) ; + t2.datos_finales.add ("robot.sensor_izquierda", ANY) ; + t2.datos_finales.add ("robot.avanzo_adelante", 0) ; + t2.datos_finales.add ("robot.avanzo_atras", 1) ; + t2.datos_finales.add ("robot.avanzo_derecha", 0) ; + t2.datos_finales.add ("robot.avanzo_izquierda", 0) ; + + + CTeoria* pt3 = new CTeoria("Derecha", "derecha", 1, 1) ; + CTeoria& t3 = *pt3; + t3.datos_iniciales.add ("robot.sensor_adelante", ANY) ; + t3.datos_iniciales.add ("robot.sensor_atras", ANY) ; + t3.datos_iniciales.add ("robot.sensor_derecha", 0) ; + t3.datos_iniciales.add ("robot.sensor_izquierda", ANY) ; + t3.datos_iniciales.add ("robot.avanzo_adelante", ANY) ; + t3.datos_iniciales.add ("robot.avanzo_atras", ANY) ; + t3.datos_iniciales.add ("robot.avanzo_derecha", ANY) ; + t3.datos_iniciales.add ("robot.avanzo_izquierda", ANY) ; + t3.datos_finales.add ("robot.sensor_adelante", ANY) ; + t3.datos_finales.add ("robot.sensor_atras", ANY) ; + t3.datos_finales.add ("robot.sensor_derecha", ANY) ; + t3.datos_finales.add ("robot.sensor_izquierda", ANY) ; + t3.datos_finales.add ("robot.avanzo_adelante", 0) ; + t3.datos_finales.add ("robot.avanzo_atras", 0) ; + t3.datos_finales.add ("robot.avanzo_derecha", 1) ; + t3.datos_finales.add ("robot.avanzo_izquierda", 0) ; + + + CTeoria* pt4 = new CTeoria("Eludir.1", "derecha", 1, 1) ; + CTeoria& t4 = *pt4; + t4.datos_iniciales.add ("robot.sensor_adelante", 1) ; + t4.datos_iniciales.add ("robot.sensor_atras", ANY) ; + t4.datos_iniciales.add ("robot.sensor_derecha", 0) ; + t4.datos_iniciales.add ("robot.sensor_izquierda", ANY) ; + t4.datos_iniciales.add ("robot.avanzo_adelante", ANY) ; + t4.datos_iniciales.add ("robot.avanzo_atras", ANY) ; + t4.datos_iniciales.add ("robot.avanzo_derecha", ANY) ; + t4.datos_iniciales.add ("robot.avanzo_izquierda", ANY) ; + t4.datos_finales.add ("robot.sensor_adelante", 0) ; + t4.datos_finales.add ("robot.sensor_atras", ANY) ; + t4.datos_finales.add ("robot.sensor_derecha", ANY) ; + t4.datos_finales.add ("robot.sensor_izquierda", ANY) ; + t4.datos_finales.add ("robot.avanzo_adelante", 0) ; + t4.datos_finales.add ("robot.avanzo_atras", ANY) ; + t4.datos_finales.add ("robot.avanzo_derecha", 1) ; + t4.datos_finales.add ("robot.avanzo_izquierda", ANY) ; + + + a.teorias.add(t1.nombre, pt1) ; + a.teorias.add(t2.nombre, pt2) ; + a.teorias.add(t3.nombre, pt3) ; + a.teorias.add(t4.nombre, pt4) ; +#ifdef DEBUG + std::cout << "Agrega teoria: " << t1 << "\n"; + std::cout << "\tdatos_iniciales:\n" << t1.datos_iniciales << "\n"; + std::cout << "\tdatos_finales:\n" << t1.datos_finales << "\n"; + std::cout << "Agrega teoria: " << t2 << "\n"; + std::cout << "\tdatos_iniciales:\n" << t2.datos_iniciales << "\n"; + std::cout << "\tdatos_finales:\n" << t2.datos_finales << "\n"; + std::cout << "Agrega teoria: " << t3 << "\n"; + std::cout << "\tdatos_iniciales:\n" << t3.datos_iniciales << "\n"; + std::cout << "\tdatos_finales:\n" << t3.datos_finales << "\n"; + std::cout << "Agrega teoria: " << t4 << "\n"; + std::cout << "\tdatos_iniciales:\n" << t4.datos_iniciales << "\n"; + std::cout << "\tdatos_finales:\n" << t4.datos_finales << "\n"; +#endif // DEBUG + + // Inicializo el SA + delete a.p_entorno; + a.p_entorno = e; // Obtengo un plan - double p = 1 ; - CIndiceMagico* >* p_plan ; - CIndiceMagico datos_finales ; + CIndiceMagico datos_finales; - datos_finales.add ("robot.avanzo_en_x", 1) ; + a.m_datos_finales.add ("robot.avanzo_adelante", 1) ; + //a.m_datos_finales.add ("robot.avanzo_en_x", 1) ; - p_plan = a.new_plan(datos_finales, p) ; + for (int i = 0; i < 3; ++i) + { + + std::cout << "Teorias:\n" << a.teorias << "\n"; + + a.plan(); - for (int i=0; icount(); i++) - std::cout << (*p_plan)[i]->nombre << std::endl ; + while (a.has_next_theory()) + { + CTeoria* t = a.get_next_theory(); + // Deberia ejecutar accion y actualizar entorno + if (a.validate_theory(t)) + { + std::cout << "Valida\n"; + } + else + { + std::cout << "No valida, planificamos de nuevo\n"; + break; + } + } + + } return 0 ; }