Прежде всего, вы должны понять, что такое генетический алгоритм и почему мы его так называем.Потому что мы действуем как одноклеточный организм и совершаем кроссоверы и мутации, чтобы достичь лучшего состояния.
Итак, сначала вам нужно внедрить свою хромосому.В вашей ситуации давайте примем сторону клиентов или заводов.Давайте возьмем клиентов.Ваше решение будет выглядеть так:
1 -> A
2 -> B
3 -> C
Итак, ваш пример хромосомы "ABC"
,Затем создайте другую хромосому (например, «BCA»). Теперь вам нужна функция подгонки, которую вы хотите минимизировать / максимизировать.Эта функция вычислит шанс размножения ваших хромосом.В вашей ситуации это будет общая стоимость.Напишите функцию, которая вычисляет стоимость для данной фабрики и данного клиента.
Теперь, что вы собираетесь сделать, это:
- Выберите 2 хромосомы, взвешенные случайным образом.(Веса рассчитываются с помощью функции подбора)
- Выберите индекс из 2 хромосом и создайте новые хромосомы, используя их переключенные части.
- Если новые хромосомы имеют недопустимые части (например,
"ABA"
в вашемситуации), сделайте фиксирующий ход (например, сделайте одно из «A», «C»).Мы называем это «мутацией». - Добавьте вашу новую хромосому в набор хромосом, если ее там не было раньше.
- Перейдите к первому процессу снова.
Вы будете делать это в течение нескольких итераций.У вас могут быть тысячи хромосом.Когда вы думаете, «этого достаточно», остановите процесс и отсортируйте хромосомный набор по возрастанию / убыванию.Первая хромосома будет вашим результатом.
Я знаю, что делает процесс зависимым от времени / хромосомы.Я знаю, что вы можете или не можете найти оптимальную (наиболее подходящую согласно биологии) хромосому, если вы не используете ее достаточно.Но это называется генетический алгоритм.Даже ваш первый запуск и второй запуск могут давать или не давать одинаковые результаты, и это нормально.
Только для вашей ситуации возможный набор хромосом очень мал, поэтому я гарантирую, что вы найдете оптимальный в секунду илидва.Поскольку весь набор хромосом для вас ["ABC", "BCA", "CAB", "BAC", "CBA", "ACB"]
.
В общем, вам нужно 3 информации для применения генетического алгоритма:
- Какой должна быть моя хромосома?(И начальный набор хромосом)
- Какая у меня функция подгонки?
- Как сделать пересечение в моих хромосомах?
Есть еще кое-что, о чем нужно заботитьсяОб этой проблеме:
- Без мутаций генетический алгоритм может придерживаться локального оптимума.Это все еще может использоваться для задач оптимизации с ограничениями.
- Даже если хромосома существует с очень низким шансом выбора для перекрестного перехода, вы не должны сортировать и обрезать набор хромосом до конца итераций,В противном случае вы можете застрять в локальном экстремуме или, что еще хуже, вместо обычного глобального оптимума вы можете получить обычный вариант решения.
- Чтобы ускорить процесс, выберите несходные исходные хромосомы.Без достаточного количества мутаций поиск глобального оптимума может быть настоящей болью.