Код ниже может дать вам представление о том, как решить проблему.Одно из решений (которое будет составлять расписание университета) состоит из множества отдельных комнат.Эти отдельные комнаты имеют двумерный массив, где столбцы - это дни, а строки - часы.Я установил ЧАСЫ на 16, так как я думаю, что в ночное время не будет занятий.Итак, Часовой ряд 1 будет первым часом дня ... вероятно, с 7 до 8 утра.Значения массива показывают, какой класс забронирован.
public class SingleRoom {
static final int DAYS = 7;
static final int HOURS = 16;
. . .
private int[][] timetable = new int[DAYS][HOURS]; //0 would say room is not booked, >0 indicates the booked class (english advanced (12), object oriented programming (139), etc..)
}
public class Solution {
static final int AVAILABLE_ROOMS = 26;
. . .
private SingleRoom[] university_timetable = new SingleRoom[AVAILABLE_ROOMS];
}
мутации:
изменить мутацию класса - изменить класс на другой случайный класс или на ноль = нет резервирования
включить / выключить класс - если забронирован час в конкретном номере, выключите его, если он не забронирован, включите его случайным классом, чтобы алгоритм имел возможность не бронировать часы, посколькув мутации класса изменений 0 имеет низкую вероятность выбора ограничений
: после создания ваших решений проверьте все ограничения и оставьте решения в силе, новые действительные решения должны быть вставлены в ваше население (решений), если они лучше других решений, уже существующих в вашем населении, или если они улучшают разнообразие вашего населения
Но в документе, на который вы ссылались, довольно хорошо описано, как реализовать GA для этой проблемы(начинается со страницы 16).
Я написал общую Java-инфраструктуру для многоцелевого алгоритма оптимизации mPOEMS (многоцелевая оптимизация прототипа с развитыми шагами улучшения), который представляет собой GA с использованием эволюционных концепций.
Вы можете найти код здесь , это может дать вам представление о том, как подойти к вашей проблеме:
Решения, которые вы можете найти с помощью этого алгоритма, сравнивались в научной работе с современными алгоритмамиSPEA-2 и NSGA, и было доказано, что алгоритм работает сравнимо или даже лучше, в зависимости от метрик, которые вы используете для измерения производительности.
Вы можете найти его здесь .
Дополнительные ресурсы: Мой тезис, который применяет эту структуру к проблеме выбора проекта: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf
Документация по структуре: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
Презентационный документ mPOEMS: http://portal.acm.org/citation.cfm?id=1792634.1792653
На самом деле, с небольшим энтузиазмом вы можете легко адаптировать код универсальной структуры к вашим потребностям.
Вы пишете этот GA на своей работе или в качестве студента?