Uploaded by Yeray

Algoritmos Genéticos - Guía ¡SUPREMA!

advertisement
Algoritmos Geneticos - Guia ¡SUP...
Cosma
Análisis y Diseño de Datos y Algoritmos
2º Grado en Ingeniería Informática - Ingeniería del Software
Escuela Técnica Superior de Ingeniería Informática
Universidad de Sevilla
Reservados todos los derechos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
@COSMA en Wuolah
GUÍA SUPREMA DE ALGORITMOS
GENÉTICOS
(Lo que nadie te dijo de los AG)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-10375746
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
¿Cuándo escuchas AG te suena a un idioma inventado? ¿Miras los ejercicios de ejemplo
del repositorio una y otra vez y te quedas igual que antes? ¿Te da pereza pedir tutorías?
Pues en el día de hoy, vas a encontrar la primera guía de como resolver los problemas de
AG para poder sacar un 10 bien bueno y sabrosón, ya que hay muy poco material relativo
a este tema en la facultad (donde en general, solo se enseña la teoría, pero no como
implementarla, por lo que en esta guía, la teoría no se explicara en profundidad).
A partir de ahora trabajaremos con el tercer ejercicio de ejemplo de la PI4, el cuál es
perfecto para entender de manera simple como implementar un AG, por lo que te
recomiendo tener a mano el ejercicio para poder trabajar con esta guía simultáneamente.
Tercer ejercicio PI4 2023/2024
Supongamos que tenemos ya el modelo matemático hecho (usaremos el LSI en este
caso), y que tenemos definidas las clases necesarias para poder leer archivos, y los
métodos que sean necesarios. Analizando el problema, tenemos el siguiente objetivo y
restricciones :
R1: Los grupos tienen todos el mismo número de alumnos
R2: Los alumnos no pueden tener afinidad 0
OF: Maximizar la afinidad de los grupos creados
En PLI solo tenemos que crear un módelo con las restricciones y ya, sin embargo, en AG
tenemos que crear 3 clases principalmente:
 Una para el algoritmo, que tendrá la fitnessFunction - InRangeAlumnosAG
 Una que nos haga un parseo para los datos del Output (Lo dejamos a nuestro
gusto) - SolucionAlumnos
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-10375746
Elimina la publicidad de este documento con 1 coin
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
@COSMA en Wuolah
Análisis y Diseño de Datos y...
Banco de apuntes de la
@COSMA en Wuolah

El test, en el que introduciremos el elitismo, el tamaño de la población… TestAlumnosAGRange
En la cabecera de nuestra clase, expresamos como van a ser nuestros cromosomas, en
este caso ValuesInRange, ya que vamos a tener una lista con todos los alumnos, sea tal
que:
listaManin = [0,0,1,…,2]
Si recorremos la lista, cada índice es un alumno, por lo tanto, el alumno 0 será del grupo
0, el alumno 1 del grupo 0, el alumno 2 del grupo 1, … y el último alumno del grupo 2.
El size es el tamaño del cromosoma, en este caso, como queremos asignar cada alumno
a un grupo, en el cromosoma deben aparecer todos los alumnos, usando el método
getNumAlumnos().
El min y el max serán los valores que pueden adoptar los cromosomas, si ponemos min
0, y max 3 [0,3), significaría que los alumnos deben estar divididos entre 3 grupos (Grupo
0, 1 y 2).
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-10375746
Elimina la publicidad de este documento con 1 coin
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Analicemos primero la clase InRangeAlumnosAG:
@COSMA en Wuolah
Este método simplemente nos devuelve el cromosoma final, para luego tratarlo en la
clase SolucionAlumnos.
Finalmente, llegamos a la joya de la corona, a la fitnessFunction, vamos a analizarla:
Emperamos primero definiendo las variables goal, y error, pensemos en que si el
cromosoma es un crack, le damos una recompensa, pero si no lo es, le castigamos, y le
sumamos al error las cuales son siempre comunes a todos los ejercicios. Ahora,
definiremos un vector cuya dimensión es el número de grupos que hay.
El primer LOOP lo que hace es iterar sobre los elementos de la lista, por lo que, si el
alumno0 es del grupo 1, nos añadirá un 1 en la posición 1 de v (V = [0,1,0,0,0,0]).
Si el alumno1 es del grupo 0 -> V = [1,1,0,0,0,0]
Si el alumno3 es del grupo 0 -> V = [2,1,0,0,0,0]
Lo vas pillando no? Bieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen
Con esto, sabremos cuantos alumnos hay en cada grupo en el cromosoma generado.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-10375746
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
@COSMA en Wuolah
Si la afinidad del alumno i es > 0, le damos una galletita al cromosoma, y añadimos al goal
1, ya que hemos conseguido que 1 alumno tenga afinidad > 0, sin embargo si la afinidad
del alumno es menor que 0, le castigamos sin móvil, y le sumamos 1 al error.
No es tan complicado, a qué no?
Finalmente, tenemos otro LOOP, que itera sobre los elementos del vector v, si el tamaño
no es el mismo que el tamaño predeterminado que deben tener los grupos, penalizamos,
y sumamos 1 al error.
Finalmente, como queremos maximizar (si quisiéramos minimizar ponemos un – antes
del goal), devolvemos goal – k * error (siendo k el Tamaño del torneo, una constante).
La clase del parseo y del test no serán explicadas, ya que son siempre iguales en todos
los ejercicios (CTRL+C -> CTRL+V).
Pues esto sería todo, para más dudas, pedid tutorías >:)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-10375746
Elimina la publicidad de este documento con 1 coin
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ahora, centrémonos en este if, siendo a, la afinidad del alumno i:
Download