Генетический алгоритм: оптимизация запросов - PullRequest
4 голосов
/ 12 января 2011

Я новичок в генетических алгоритмах, и мне поручили реализовать генетический алгоритм для оптимизации порядка запросов в будний день аптеки. Прежде всего, позвольте мне объяснить проблему:

9 семей подают заявки на посещение в любой день рабочей недели (с понедельника по пятницу). Аптека может посещать от 1 до 3 семей в день, не больше и не реже, и они не могут повторять ни одну семью в течение одной недели. Основная цель состоит в том, чтобы оптимизировать лучший день для каждой семьи для посещения, таким образом, аптека обслуживает максимальное количество запросов в неделю с учетом ограничений, налагаемых на проблему. Входными данными для алгоритма оптимизации являются среднегодовое значение каждого числа запросов, выданных каждой семьей. Например:

(давайте работать только с 3 семействами, чтобы упростить пример):

Введите:

| Пн | Вт | Ср | Чт | Пт
F1 | 10 | 20 | 2 | 0 | 7
F2 | 20 | 12 | 0 | 1 | 2
F3 | 2 | 0 | 0 | 19 | 3

Возможное решение:

| Пн | Вт | Ср | Чт | Пт
| | F2 | F1 | F3 |

До сих пор я изучал всю концепцию генетики и генетических алгоритмов. Я посмотрел на оптимизацию роя частиц, но так как у меня мало времени, я решил использовать фреймворк. Я использую JGAP, но моя главная проблема в том, каким образом я представляю потенциальное решение? Я имею в виду, как мне организовать гены хромосомы, используемые для спаривания, размножения и т. Д ... Я уже разработал фитнес-функцию, но я не могу кодировать гены так, как хотел. Есть предложения?

1 Ответ

1 голос
/ 13 января 2011

каким образом я представляю потенциальное решение?

Каждая семья должна быть назначена на один день.Таким образом, вы можете запомнить, на какой день запланирована каждая семья.Ген был бы одним из 5 дней, хром имел бы 9 из них, по одному на каждую семью

         1 2 3 4 5 6 7 8 9
Chrome   M T T F W H T M T

Итак, семья 1 в понедельник, семья 2 и 3 во вторник и т. Д. Вы должны навязать вседругие ограничения (The pharmacy can only attend 1 to 3 families per day) в фитнес-функции.

Другой кодировкой может быть

 M1 M2 M3 T1 T2 T3 W1 W2 W3 ... F2 F3
 1  2  -  -  5  -  9  -  3  ... 4  -

Таким образом, вы будете принимать все возможные встречи и заполнять семейства или оставлять их пустыми.В этом случае функция фитнеса должна обеспечивать, чтобы у каждой семьи был ровно один прием.

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