Ejercicio 2

Ejercicio 2

de Juan Ignacio Cabrera Garcia -
Número de respuestas: 3

Buenas, tengo problemas con el ejercicio 2

Para resolver el problema  de inicialización calculé un máximo de items que puedo tener de cada tipo de comida según la regla (2 * W/S), luego puedo inicializar con un random entre 0 y ese numero.

Para las condiciones de borde, penalice el valor de fitness calculando cuanto me estoy "pasando", ya sea por el monto máximo a gastar o por la cantidad de items de cada tipo de menu.

El problema es que mi fitness se estanca en un valor y el algoritmo termina por timeout y me da una solucion que se pasa mucho del monto a gastar, por ej:

con una entrada:

N: 10

S: 4

N - G - P - H

0 - 17 - 8 - 1

1 - 15 - 9 - 3

2 - 19 - 8 - 1

3 - 10 - 8 - 4

4 - 12 - 10 - 4

5 - 6 - 6 - 1

6 - 1 - 19 - 4

7 - 4 - 18 - 2

8 - 10 - 9 - 1

9 - 13 - 13 - 2

W: 54

La evolucion del fitness:

Fitness: 15.0

Fitness: 15.0

Fitness: 16.0

Fitness: 16.0

Fitness: 18.0

Fitness: 18.0

Fitness: 21.0

Fitness: 21.0

Fitness: 21.0

Fitness: 21.0

Fitness: 21.0

Fitness: 21.0

Fitness: 22.0

Fitness: 22.0

Fitness: 22.0

Fitness: 22.0

....

El algoritmo se estanca con un fitness 22 y no sale de ahi hasta que termina por timeout, probe varias tipos de penalizaciones, incluso penalizar con fitness=0.

El resultado es:

1 1

2 1

3 1

4 4

5 3

6 1

7 1

8 1

9 1

10 1

Monto total: 152 (mucho mayor a W)


gracias!



En respuesta a Juan Ignacio Cabrera Garcia

Re: Ejercicio 2

de Renzo Massobrio -

Hola,

Por lo que entendí de tu mensaje, creo que no estás controlando que la población inicial esté compuesta por individuos que representen soluciones factibles al problema. Es probable que estés comenzando con una población compuesta por todos elementos no factibles y que esto se mantenga a lo largo de la evolución. Como resultado, tu AE está devolviendo la mejor solución que encontró, pero esta solución es no factible. Te recomiendo que imprimas la población inicial y lo verifiques.

Para el problema planteado, es posible diseñar un mecanismo de inicialización de la población sencillo que garantice que la población inicial está compuesta por soluciones factibles. Con la inicialización que tenés actualmente es muy probable que excedas el presupuesto disponible.

Por último, se vieron tres mecanismos para el manejo de soluciones no factibles durante la evolución: descartar, penalizar, corregir. Forzar fitness=0 no corresponde a ninguno de esos esquemas (no es una penalización adecuada ni asegura que se estén descartando las soluciones). Para el problema planteado en el práctico se pueden diseñar estrategias de corrección que transformen soluciones no factibles en factibles. Pensá qué vuelve a una solución "no factible" y qué es necesario hacer para transformarla en factible.

Si no queda claro lo vemos en clase.

Saludos,
Renzo

En respuesta a Renzo Massobrio

Re: Ejercicio 2

de Juan Ignacio Cabrera Garcia -

Buenas,

entiendo... lo que tengo que implementar el es operador de cruzamiento y corregir los hijos no factibles y lo mimos en el operador de mutación, correcto?

de todas formas, repase el teórico y la penalización no se hace en la función de fitness? es decir, si yo a un individuo le asigno un menor valor de fitness va a tener menos chance de sobrevivir.

saludos y gracias!


En respuesta a Juan Ignacio Cabrera Garcia

Re: Ejercicio 2

de Renzo Massobrio -

Buenas,

Podés corregir luego de cruzar y luego de mutar, o corregir una única vez luego de aplicar todos los operadores evolutivos. Si aplicas un mecanismo de corrección y siempre trabajas con individuos factibles, no necesitas penalizar soluciones.

Si elegís utilizar un mecanismo de penalización, en efecto, lo debes hacer durante la función de evaluación. Como dices, si el mecanismo de penalización está bien implementado, un individuo no factible tendrá un valor de fitness (penalizado) que será peor que el de cualquier individuo factible y, por lo tanto, tendrá menor chance de sobrevivir. El detalle está en que menor chance no significa cero chance y de ahí mi comentario anterior sobre la diferencia entre penalizar y descartar individuos.

Saludos,
Renzo