};
template < typename T >
+inline
std::ostream& operator<< (std::ostream& os, CIndiceMagico<T>& im)
{
unsigned c = im.count();
+#ifdef LOG
+ if (c-- == 0) return os << "";
+ for (unsigned i = 0; i < c; ++i)
+ os << im[i] << ",";
+ os << im[c];
+ return os;
+#else // ! LOG
if (c == 0) return os << "\t\tvacío\n";
for (unsigned i = 0; i < c; ++i)
os << "\t\t" << im.keys(i) << ":\t" << im[i] << "\n";
return os;
+#endif // LOG
}
template < typename T >
+inline
std::ostream& operator<< (std::ostream& os, CIndiceMagico<T*>& im)
{
unsigned c = im.count();
+#ifdef LOG
+ if (c-- == 0) return os << "";
+ for (unsigned i = 0; i < c; ++i)
+ os << *im[i] << ",";
+ os << *im[c];
+ return os;
+#else // ! LOG
if (c == 0) return os << "\t\tvacío\n";
for (unsigned i = 0; i < c; ++i)
os << "\t\t" << im.keys(i) << ":\t" << *im[i] << "\n";
return os;
+#endif // LOG
}
#endif
CTeoria* t = (CTeoria*) BRPOINTER(args+1);\r
sa->teorias.add(t->nombre, 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
+ std::cout << "Agrega teoria " << *t << ":\n";\r
+ std::cout << "\tdatos_iniciales:\n" << t->datos_iniciales << "\n";\r
+ std::cout << "\tdatos_finales:\n" << t->datos_finales << "\n";\r
#endif // DEBUG\r
+#ifdef LOG\r
+ std::cout << "Agrega teoria: " << *t << "," << t->datos_iniciales << "," << t->datos_finales << "\n";\r
+#endif // LOG\r
return EC_OK;\r
}\r
\r
std::cout << "SA: Planificando...\n";
std::cout << "SA: \tentorno:\n" << p_entorno->datos << "\n";
std::cout << "SA: \tteorias:\n" << teorias << "\n";
- std::cout << "SA: \tdatos finales:\n" << m_datos_finales << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Planificando...\n";
+ std::cout << "Entorno:\n" << p_entorno->datos << "\n";
+ std::cout << "Teorias:\n" << teorias << "\n";
+#endif // LOG
planificar(p_entorno->datos, m_datos_finales, m_plan, p);
#ifdef DEBUG
std::cout << "SA: \tplan:\n" << m_plan << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Plan:\n" << m_plan << "\n";
+#endif // LOG
curr_theory = m_plan.begin();
#ifdef DEBUG
if (curr_theory == m_plan.end())
#ifdef DEBUG
std::cout << "SA: ejecuta teoria: " << **(curr_theory) << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Ejecutando teoria:\n" << **(curr_theory) << "\n";
+#endif // LOG
return *(curr_theory++);
}
}
std::cout << "SA: Entorno de verificacion:\n" << p_entorno->datos;
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Verificacion...\n";
+ std::cout << "Entorno:\n" << p_entorno->datos << "\n";
+#endif // LOG
+
// Verifico
result = verificar_condicion(t->datos_finales) ;
std::cout << "SA: No verifica, aplicando heuristicas...\n";
std::cout << "SA: Aplicando heuristica de observacion\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "No verifica, aplicando heuristicas...\n";
+ std::cout << "Aplicando heuristica de observacion:\n";
+#endif // LOG
this->heuristca_observacion(*t) ;
#ifdef DEBUG
std::cout << "SA: Aplicando heuristica de generalizacion\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Aplicando heuristica de generalizacion:\n";
+#endif // LOG
this->heuristca_generalizacion(*t);
#ifdef DEBUG
std::cout << "SA: Aplicando heuristica de retraccion\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Aplicando heuristica de retraccion:\n";
+#endif // LOG
// Aplico heuristicas de correccion
this->heuristca_retraccion(*t) ;
}
#ifdef DEBUG
else std::cout << "SA: Verifica!\n";
#endif // DEBUG
+#ifdef LOG
+ else std::cout << "Verifica!\n";
+#endif // LOG
return result;
}
std::cout << "SA: \tdatos_iniciales:\n" << nt.datos_iniciales << "\n";
std::cout << "SA: \tdatos_finales:\n" << nt.datos_finales << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Agrega teoria: " << nt << "," << nt.datos_iniciales << "," << nt.datos_finales << "\n";
+#endif // LOG
}
std::cout << "SA: \tdatos_iniciales:\n" << nt->datos_iniciales << "\n";
std::cout << "SA: \tdatos_finales:\n" << nt->datos_finales << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Agrega teoria: " << *nt << "," << nt->datos_iniciales << "," << nt->datos_finales << "\n";
+#endif // LOG
}
}
posicionCambio = -1;
std::cout << "SA: Se modifica la teoria: " << t << ", el dato final '"
<< t.datos_finales.keys(modif) << "' puede tomar ahora cualquier valor\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Se modifica teoria:\n" << t << "\nEl dato final '"
+ << t.datos_finales.keys(modif) << "' puede tomar ahora cualquier valor\n";
+ std::cout << "Agrega teoria: " << t << "," << t.datos_iniciales << "," << t.datos_finales << "\n";
+#endif // LOG
}
}
#ifdef DEBUG
std::cout << "SA: Se purgo la teoria " << *teorias[pos] << "\n";
#endif // DEBUG
+#ifdef LOG
+ std::cout << "Se purgo la teoria:\n" << *teorias[pos] << "\n";
+#endif // LOG
if (size - 1 > max_teorias) purgar_teorias();
}
inline
std::ostream& operator<< (std::ostream& os, const CTeoria& t)
{
+#ifdef LOG
+ return os << t.nombre << "," << t.funcion << "," << t.p << "," << t.k;
+#else // ! LOG
return os << "CTeoria(nombre=" << t.nombre << ", funcion=" << t.funcion
- << ", p=" << t.p << ", k=" << t.k << /*", ciclos=" << t.ciclos <<*/ ")";
-// << "):\n\tdatos_iniciales:\n" << t.datos_iniciales
-// << "\tdatos_finales:\n" << t.datos_finales << "\n";
+ << ", p=" << t.p << ", k=" << t.k << ")";
+#endif // LOG
+}
+
+template < >
+inline
+std::ostream& operator<< (std::ostream& os, CIndiceMagico<CTeoria*>& im)
+{
+ unsigned c = im.count();
+ if (c-- == 0) return os << "";
+ for (unsigned i = 0; i < c; ++i)
+ os << *im[i] << "\n";
+ os << *im[c];
+ return os;
}