]> git.llucax.com Git - z.facultad/75.68/celdas.git/blob - trunk/src/main.cpp
Evitamos memory leaks.
[z.facultad/75.68/celdas.git] / trunk / src / main.cpp
1
2 #include "main.h"
3 #include <iostream>
4
5 //
6 void CMiEntorno::inicializar()
7 {
8         // Inicializo el Entorno
9         datos.add("robot.sensor_adelante",      1) ;
10         datos.add("robot.sensor_atras",         0) ;
11         datos.add("robot.sensor_derecha",       0) ;
12         datos.add("robot.sensor_izquierda",     0) ;
13         datos.add("robot.avanzo_adelante",      0) ;
14         datos.add("robot.avanzo_atras",         0) ;
15         datos.add("robot.avanzo_derecha",       0) ;
16         datos.add("robot.avanzo_izquierda",     0) ;
17 }
18
19
20 void CMiEntorno::actualizar()
21 {
22         datos.set_val("robot.sensor_adelante",          0) ;
23         datos.set_val("robot.sensor_atras",             0) ;
24         datos.set_val("robot.sensor_derecha",           0) ;
25         datos.set_val("robot.sensor_izquierda",         1) ;
26         datos.set_val("robot.avanzo_adelante",          1) ;
27         datos.set_val("robot.avanzo_atras",             0) ;
28         datos.set_val("robot.avanzo_derecha",           0) ;
29         datos.set_val("robot.avanzo_izquierda",         0) ;
30 }
31
32
33
34 //
35 int main(int argc, char* argv[])
36 {
37         //
38         CMiEntorno*                     e = new CMiEntorno;
39         CSistemaAutonomo                a ;
40
41         e->inicializar() ;
42
43         // Inicializo las teorias
44         CTeoria* pt1 = new CTeoria("Avanzar", "avanzar", 1, 1) ;
45         CTeoria& t1 = *pt1;
46         t1.datos_iniciales.add ("robot.sensor_adelante",        0) ;
47         t1.datos_iniciales.add ("robot.sensor_atras",           ANY) ;
48         t1.datos_iniciales.add ("robot.sensor_derecha",         ANY) ;
49         t1.datos_iniciales.add ("robot.sensor_izquierda",       ANY) ;
50         t1.datos_iniciales.add ("robot.avanzo_adelante",        ANY) ;
51         t1.datos_iniciales.add ("robot.avanzo_atras",           ANY) ;
52         t1.datos_iniciales.add ("robot.avanzo_derecha",         ANY) ;
53         t1.datos_iniciales.add ("robot.avanzo_izquierda",       ANY) ;  
54         t1.datos_finales.add ("robot.sensor_adelante",          ANY) ;
55         t1.datos_finales.add ("robot.sensor_atras",             ANY) ;
56         t1.datos_finales.add ("robot.sensor_derecha",           ANY) ;
57         t1.datos_finales.add ("robot.sensor_izquierda",         ANY) ;
58         t1.datos_finales.add ("robot.avanzo_adelante",          1) ;
59         t1.datos_finales.add ("robot.avanzo_atras",             0) ;
60         t1.datos_finales.add ("robot.avanzo_derecha",           0) ;
61         t1.datos_finales.add ("robot.avanzo_izquierda",         0) ;
62
63         CTeoria* pt2 = new CTeoria("Retroceder", "retroceder", 1, 1) ;
64         CTeoria& t2 = *pt2;
65         t2.datos_iniciales.add ("robot.sensor_adelante",        ANY) ;
66         t2.datos_iniciales.add ("robot.sensor_atras",           0) ;
67         t2.datos_iniciales.add ("robot.sensor_derecha",         ANY) ;
68         t2.datos_iniciales.add ("robot.sensor_izquierda",       ANY) ;
69         t2.datos_iniciales.add ("robot.avanzo_adelante",        ANY) ;
70         t2.datos_iniciales.add ("robot.avanzo_atras",           ANY) ;
71         t2.datos_iniciales.add ("robot.avanzo_derecha",         ANY) ;
72         t2.datos_iniciales.add ("robot.avanzo_izquierda",       ANY) ;  
73         t2.datos_finales.add ("robot.sensor_adelante",          ANY) ;
74         t2.datos_finales.add ("robot.sensor_atras",             ANY) ;
75         t2.datos_finales.add ("robot.sensor_derecha",           ANY) ;
76         t2.datos_finales.add ("robot.sensor_izquierda",         ANY) ;
77         t2.datos_finales.add ("robot.avanzo_adelante",          0) ;
78         t2.datos_finales.add ("robot.avanzo_atras",             1) ;
79         t2.datos_finales.add ("robot.avanzo_derecha",           0) ;
80         t2.datos_finales.add ("robot.avanzo_izquierda",         0) ;
81
82
83         CTeoria* pt3 = new CTeoria("Derecha", "derecha", 1, 1) ;
84         CTeoria& t3 = *pt3;
85         t3.datos_iniciales.add ("robot.sensor_adelante",        ANY) ;
86         t3.datos_iniciales.add ("robot.sensor_atras",           ANY) ;
87         t3.datos_iniciales.add ("robot.sensor_derecha",         0) ;
88         t3.datos_iniciales.add ("robot.sensor_izquierda",       ANY) ;
89         t3.datos_iniciales.add ("robot.avanzo_adelante",        ANY) ;
90         t3.datos_iniciales.add ("robot.avanzo_atras",           ANY) ;
91         t3.datos_iniciales.add ("robot.avanzo_derecha",         ANY) ;
92         t3.datos_iniciales.add ("robot.avanzo_izquierda",       ANY) ;  
93         t3.datos_finales.add ("robot.sensor_adelante",          ANY) ;
94         t3.datos_finales.add ("robot.sensor_atras",             ANY) ;
95         t3.datos_finales.add ("robot.sensor_derecha",           ANY) ;
96         t3.datos_finales.add ("robot.sensor_izquierda",         ANY) ;
97         t3.datos_finales.add ("robot.avanzo_adelante",          0) ;
98         t3.datos_finales.add ("robot.avanzo_atras",             0) ;
99         t3.datos_finales.add ("robot.avanzo_derecha",           1) ;
100         t3.datos_finales.add ("robot.avanzo_izquierda",         0) ;
101
102
103         CTeoria* pt4 = new CTeoria("Eludir.1", "derecha", 1, 1) ;
104         CTeoria& t4 = *pt4;
105         t4.datos_iniciales.add ("robot.sensor_adelante",        1) ;
106         t4.datos_iniciales.add ("robot.sensor_atras",           ANY) ;
107         t4.datos_iniciales.add ("robot.sensor_derecha",         0) ;
108         t4.datos_iniciales.add ("robot.sensor_izquierda",       ANY) ;
109         t4.datos_iniciales.add ("robot.avanzo_adelante",        ANY) ;
110         t4.datos_iniciales.add ("robot.avanzo_atras",           ANY) ;
111         t4.datos_iniciales.add ("robot.avanzo_derecha",         ANY) ;
112         t4.datos_iniciales.add ("robot.avanzo_izquierda",       ANY) ;  
113         t4.datos_finales.add ("robot.sensor_adelante",          0) ;
114         t4.datos_finales.add ("robot.sensor_atras",             ANY) ;
115         t4.datos_finales.add ("robot.sensor_derecha",           ANY) ;
116         t4.datos_finales.add ("robot.sensor_izquierda",         ANY) ;
117         t4.datos_finales.add ("robot.avanzo_adelante",          0) ;
118         t4.datos_finales.add ("robot.avanzo_atras",             ANY) ;
119         t4.datos_finales.add ("robot.avanzo_derecha",           1) ;
120         t4.datos_finales.add ("robot.avanzo_izquierda",         ANY) ;
121
122
123         a.teorias.add(t1.nombre, pt1) ;
124         a.teorias.add(t2.nombre, pt2) ;
125         a.teorias.add(t3.nombre, pt3) ;
126         a.teorias.add(t4.nombre, pt4) ;
127 #ifdef DEBUG
128         std::cout << "Agrega teoria: " << t1 << "\n";
129         std::cout << "\tdatos_iniciales:\n" << t1.datos_iniciales << "\n";
130         std::cout << "\tdatos_finales:\n" << t1.datos_finales << "\n";
131         std::cout << "Agrega teoria: " << t2 << "\n";
132         std::cout << "\tdatos_iniciales:\n" << t2.datos_iniciales << "\n";
133         std::cout << "\tdatos_finales:\n" << t2.datos_finales << "\n";
134         std::cout << "Agrega teoria: " << t3 << "\n";
135         std::cout << "\tdatos_iniciales:\n" << t3.datos_iniciales << "\n";
136         std::cout << "\tdatos_finales:\n" << t3.datos_finales << "\n";
137         std::cout << "Agrega teoria: " << t4 << "\n";
138         std::cout << "\tdatos_iniciales:\n" << t4.datos_iniciales << "\n";
139         std::cout << "\tdatos_finales:\n" << t4.datos_finales << "\n";
140 #endif // DEBUG
141
142         // Inicializo el SA
143         delete a.p_entorno;
144         a.p_entorno = e;
145
146         // Obtengo un plan
147         CIndiceMagico<t_dato> datos_finales;
148
149         a.m_datos_finales.add ("robot.avanzo_adelante", 1) ;
150         //a.m_datos_finales.add ("robot.avanzo_en_x", 1) ;
151
152         for (int i = 0; i < 3; ++i)
153         {
154
155                 std::cout << "Teorias:\n" << a.teorias << "\n";
156
157                 a.plan();
158
159
160                 while (a.has_next_theory())
161                 {
162                         CTeoria* t = a.get_next_theory();
163                         // Deberia ejecutar accion y actualizar entorno
164                         if (a.validate_theory(t))
165                         {
166                                 std::cout << "Valida\n";
167                         }
168                         else
169                         {
170                                 std::cout << "No valida, planificamos de nuevo\n";
171                                 break;
172                         }
173                 }
174
175         }
176
177         return 0 ;
178 }
179
180