03-11-2014, 22:48
Estimados, buenas noches!
Mañana debo entregar un TP de lógico que adeudo y no me está saliendo el último punto, así que acudo a ustedes!
El TP sobre agentes y policías que realizan diferentes tareas. Cada tarea tiene su puntuación según sus atributos. El ejercicio pide encontrar al agente de mayor puntuación.
Los predicados con los que se cuentan a modo de ejemplo son:
La ubicación se utilizó en otros puntos, no le den imporancia.
Bien, debería definir un predicado totalmente inversible que halle el agente o policía de mayor puntuación según los criterios de antes.
Llegué a construir lo siguiente, pero no funciona:
Simplemente me da False.
Cualquier tipo de ayuda es bienvenida.
Muchas gracias de antemano!
Mañana debo entregar un TP de lógico que adeudo y no me está saliendo el último punto, así que acudo a ustedes!
El TP sobre agentes y policías que realizan diferentes tareas. Cada tarea tiene su puntuación según sus atributos. El ejercicio pide encontrar al agente de mayor puntuación.
Cita:Hacer un predicado llamado agentePremiado/1 que permite deducir el agente que recibe el premio por tener la mejor puntuación. La puntuación de un agente es la sumatoria de los puntos de cada tarea que el agente realiza, que puede ser positiva o negativa. Se calcula de la siguiente manera:
vigilar: 5 puntos por cada negocio que vigila
ingerir: 10 puntos negativos por cada unidad de lo que ingiera. Las unidades ingeridas se calculan como tamaño x cantidad.
apresar: tantos puntos como la mitad de la recompensa.
asuntosInternos: el doble de la puntuación del agente al que investiga.
Los predicados con los que se cuentan a modo de ejemplo son:
Cita:%tareas:
% ingerir(descripcion, tamaño, cantidad)
% apresar(malviviente, recompensa)
% asuntosInternos(agenteInvestigado)
% vigilar(listaDeNegocios)
tarea(policiaCarlos, vigilar([pizzeria, heladeria]), quilmes).
tarea(agenteMiguel, asuntosInternos(vigilanteDelBarrio), avellaneda).
tarea(policiaJuan, ingerir(vino, 0.5, 5),lanus).
tarea(agenteMartin, apresar(policiaJuan50),avellaneda).
La ubicación se utilizó en otros puntos, no le den imporancia.
Bien, debería definir un predicado totalmente inversible que halle el agente o policía de mayor puntuación según los criterios de antes.
Llegué a construir lo siguiente, pero no funciona:
puntajeTotal([Cab|Cola],Puntos):- puntajeIndividual(Cab,Punto), Puntos is Puntos + Punto, puntajeTotal([Cola],Puntos).
puntajeIndividual(vigiliar(Lugares,_),Punto):- length(Lugares,Cantidad), Punto is 5*Cantidad.
puntajeIndividual(ingerir(_,Tam,Cant),Punto):- Punto is (Tam*Cant*(-1)).
puntajeIndividual(apresar(_,recompensa),Punto):- Punto is (recompensa / 2).
puntajeIndividual(asuntosInternos(Persona),Punto) :- puntaje(Persona,Puntos), Punto is (Puntos / 2).
puntaje(Persona, Puntos):- findall(Persona,tarea(Persona,Tarea,_),Tareas), puntajeTotal(Tareas,Puntos).
agentePremiado(Persona):- tarea(Persona,_,_), puntaje(Persona,Puntos), forall(puntaje(Cualquiera,Puntos2), Puntos >= Puntos2).
Simplemente me da False.
Cualquier tipo de ayuda es bienvenida.
Muchas gracias de antemano!