Как изобразить расписание для задачи расписания в генетических алгоритмах? - PullRequest
7 голосов
/ 30 декабря 2010

Для генетических алгоритмов обычно гены символизируются следующим образом:

PARENT1: 101101010101001001001001110011100110101011101101
PARENT2: 010100111011010101110101001001101011001010010110

, поэтому пересечение, мутации могут быть сделаны с такими представлениями, как:

Выберите точку пересечения:

PARENT1: 1011010101010010 01001001110011100110101011101101
PARENT2: 0101001110110101 01110101001001101011001010010110

Выполните кроссовер для создания потомка:

CHILD: 1011010101010010 01110101001001101011001010010110

Который затем станет совершенно новой хромосомой:

CHILD: 101101010101001001110101001001101011001010010110

Моя проблема заключается в том, как представить ген недельного расписания в Java?

Примеры взяты из этой статьи: http://secretgeek.net/content/bambrilg.pdf

Я решаю эту проблему с хронометрированием в Java и хочу представить

FIGURE 10: An Entire University Timetable

в Java.

1 Ответ

2 голосов
/ 30 декабря 2010

Код ниже может дать вам представление о том, как решить проблему.Одно из решений (которое будет составлять расписание университета) состоит из множества отдельных комнат.Эти отдельные комнаты имеют двумерный массив, где столбцы - это дни, а строки - часы.Я установил ЧАСЫ на 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 на своей работе или в качестве студента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...