X-Git-Url: https://git.llucax.com/z.facultad/75.68/celdas.git/blobdiff_plain/651df9d4bd2ec484ec71c80d7dd2165d7cf4290e..5530730f6759a3c449df3e78f122084d16f825d6:/trunk/src/sistemaautonomo.cpp?ds=sidebyside diff --git a/trunk/src/sistemaautonomo.cpp b/trunk/src/sistemaautonomo.cpp index 7469d10..2c85e51 100644 --- a/trunk/src/sistemaautonomo.cpp +++ b/trunk/src/sistemaautonomo.cpp @@ -31,9 +31,11 @@ void CSistemaAutonomo::plan() { double p = 1.0; m_plan.clear(); + if (teorias.count() > max_teorias) purgar_teorias(); #ifdef DEBUG 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 planificar(p_entorno->datos, m_datos_finales, m_plan, p); @@ -67,6 +69,9 @@ CTeoria* CSistemaAutonomo::get_next_theory() } else { +#ifdef DEBUG + std::cout << "SA: ejecuta teoria: " << **(curr_theory) << "\n"; +#endif // DEBUG return *(curr_theory++); } } @@ -80,6 +85,10 @@ bool CSistemaAutonomo::validate_theory(CTeoria* t) // Aumento k (cantidad de veces que se probó la teoría ++t->k; +#ifdef DEBUG + std::cout << "SA: Entorno de verificacion:\n" << p_entorno->datos; +#endif // DEBUG + // Verifico result = verificar_condicion(t->datos_finales) ; @@ -105,6 +114,9 @@ bool CSistemaAutonomo::validate_theory(CTeoria* t) // Aplico heuristicas de correccion this->heuristca_retraccion(*t) ; } +#ifdef DEBUG + else std::cout << "SA: Verifica!\n"; +#endif // DEBUG return result; } @@ -270,7 +282,7 @@ void CSistemaAutonomo::planificar (CIndiceMagico& datos_iniciales, if ( incluye_a(datos_iniciales, datos_finales) ) return ; - if ( numero_de_llamada > 7 ) return ; + if (numero_de_llamada > max_pasos) return ; for (i = 0; i < teorias.count(); i++) if ( incluye_a(teorias[i]->datos_iniciales, datos_iniciales) ) @@ -281,7 +293,7 @@ void CSistemaAutonomo::planificar (CIndiceMagico& datos_iniciales, test_p = p * ((double)teorias[i]->p)/((double)teorias[i]->k) ; planificar(teorias[i]->datos_finales, datos_finales, test_plan, test_p, numero_de_llamada+1) ; - + if ( test_p>max_p ) if ( incluye_a(test_plan[test_plan.count()-1]->datos_finales, datos_finales) ) { @@ -295,52 +307,24 @@ void CSistemaAutonomo::planificar (CIndiceMagico& datos_iniciales, plan.add (new_plan) ; } - -/* -//-------------------------------------------------------------------------------------------- -//-- -bool CSistemaAutonomo::ejecutar (CIndiceMagico& plan) +void CSistemaAutonomo::purgar_teorias() { - bool result = true ; - unsigned i ; - t_fnc(pFnc) ; - CTeoria t ; - - - for (i=0; ip_entorno)) ; - - // Incremento el K - t.k++ ; - - // Actualizo los datos del entorno - this->p_entorno->actualizar() ; - - // Veo si se verifica la condicion final - result = this->verificar_condicion(t.datos_finales) ; - - // Si fallo la teoria - if (!result) - { - // Aplico heuristicas de correccion - this->heuristca_retraccion(t) ; - } - else + double p = (double)teorias[i]->p / (double)teorias[i]->k; + if (p < whorst_prob) { - t.p++ ; + whorst_prob = p; + pos = i; } - - // Aplico heuristicas de observacion - this->heuristca_observacion(t) ; - this->heuristca_generalizacion(t); } - - // - return result ; + teorias.remove(pos); +#ifdef DEBUG + std::cout << "SA: Se purgo la teoria " << *teorias[pos] << "\n"; +#endif // DEBUG + if (size - 1 > max_teorias) purgar_teorias(); } -*/ +