4

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

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

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

Вход:

                |   Mon   |   Tue   |   Среда   |   Thu   |   Fri
F1       |         |     |           |         | F2     | 20         | 12     | 0         | 1       | 2
F3   | 2         | 0       | 0           | 19     | 3

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

| Пн | Tue | Ср | Thu | Fri
|               | F2     | F1     | F3     |

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

+1

Из того, что вы описали и приведенного примера, я думаю, что эта проблема представляет собой проблему линейной комбинаторной оптимизации и может быть решена с помощью соответствующих методов, таких как алгоритмы симплекса или ранца (не совсем уверен, какой из них более уместен в данном конкретном случае) , Вам нужно использовать GA или это ваше желание для этого проекта? – posdef

+0

Вы разрабатываете новое расписание каждую неделю или вы заранее планируете расписание на несколько недель? – Alain

+2

С 9 семьями на 5 дней существует не более 5^9, 1 миллион, решений. Это не так много, простая BFS должна сделать трюк. Или не так ли? – Ishtar

ответ

1

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

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

  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 - 

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

Смежные вопросы