Другой (интересный) способ решить эту проблему - использовать генетический алгоритм.
Генетический алгоритм мощный, но вам нужно использовать множество параметров, чтобы найти лучший.
Genetic Step следующие:
а. Создание: число случайных людей, первое поколение (например, 100).
б. мутация: мутация небольшого процента из них (например: 0,5%).
c. Оценка: оценка (также называемая фитнесом) всем индивидуумам.
d. Воспроизведение: выберите (используя ставки) пару из них и создайте ребенка (например: 2 ребенка)
е. Выбор: выберите Родитель и Дочерний, чтобы создать новое поколение (например: оставить 100 человек за поколением)
f. Цикл: вернитесь к шагу а и повторите весь процесс несколько раз (например: 400 поколений).
грамм. Выбрать: выберите человека последнего поколения с максимальной скоростью. Индивидуальным будет ваше решение.
Вот что вам предстоит решить:
- Найдите генетический код для своего человека
Вы должны представить возможное решение (назвать индивидуальным) вашей проблемы в виде генетического кода.
В вашем случае это может быть группа букв, представляющая узел, который соблюдает ограничение ИЛИ и НЕ.
Например :
[ A E B Y ], [ A C K H ], [A E Z B Y] ...
- Найдите способ оценить человека
Чтобы узнать, является ли человек хорошим решением, вы должны оценить его, чтобы сравнить с другим человеком.
В вашем случае это может быть довольно просто: индивидуальная ставка = количество узлов - количество отдельных узлов
Например :
[ A E B Y ] = 8 - 4 = 4
[ A E Z B Y] = 8 - 5 = 3
[A E B Y] как лучшая оценка, чем [A E Z B Y]
- Выбор
Благодаря индивидуальному рейтингу мы можем выбрать пару из них для воспроизведения.
Например, используя генетический алгоритм выбора колеса рулетки
- Воспроизведение
Возьмите пару индивидуумов и создайте от них (например, 2) ребенка (другого человека).
Например :
Возьмите узел из первого и замените его узлом второго.
Сделайте некоторую корректировку, чтобы соответствовать или, и ограничению.
[A E BY], [AC K H] = ›[AC E HBY], [AEC K К]
Обратите внимание: это не лучший способ воспроизвести это, потому что ребенок стоит, чем родитель. Может быть, мы сможем поменять диапазон узлов.
- Мутация
Вам нужно просто изменить генетический код избранной особи.
Например :
Как видите, это несложно реализовать, но необходимо сделать большой выбор, чтобы разработать его с учетом конкретной проблемы и контролировать различные параметры (процент мутаций, система оценок, система воспроизводства, количество особей, количество поколений). , ...)
person
Mathieu Momal
schedule
03.06.2015