2015-11-14 7 views
-4

Я пытаюсь написать программу для поиска оптимальных комбинационных схем с n входами и n выходами с использованием генетического алгоритма. Код работает, но не находит лучшего решения. Алгоритм просто берет «хорошее» решение и пытается случайным образом изменить его, чтобы получить лучший. Мой вопрос: не подходит ли мой подход (не должен делать это случайным образом), или мой код логически ошибочен?Почему мой генетический алгоритм не сходится?

Git Repository: https://github.com/Umuril/Genetic-Circuits

PS: Мне просто нужно взглянуть на код. Код «прокомментирован» и для запуска просто необходимо: cd "dir"; make; ./Genetic.out

+2

Просьба [Minimal, полный и проверяемый примера] (http://stackoverflow.com/help/mcve). Очень маловероятно, что люди собираются клонировать ваш репозиторий Git и просматривать весь ваш код. –

+0

Есть только 5 файлов с 1/2 функциями каждый. Я думаю, что это минимальный пример. –

ответ

1

В целом, эволюционные алгоритмы не гарантируют, что их ответ лучше, но найти хорошее решение. Сначала вы можете найти подходящее решение для своей GA, а затем использовать локальный поиск в своем решении.

Возможно, вам поможет Memetic алгоритм. https://en.wikipedia.org/wiki/Memetic_algorithm

0

Алгоритм не остановит его сам. Вы должны установить некоторые ограничения, когда он должен остановиться, и, следовательно, дать вам лучшее решение. Вот три наиболее распространенных способа остановить его:

  • После нескольких итераций (поколений), например. = ~ 1000
  • После того, как у вас есть процент аберраций в вашей популяции, например. > 40%
  • Когда население в среднем фитнес поражает верхнее значение, а затем начинает ухудшаться

Используйте сочетание все лучшие результатов

+0

Я буду использовать третий подход. Но «верхнее значение» никогда не достигается. –

+0

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

+0

Я использую расстояние Хэмминга между ожидаемым выходом и выходом моей схемы, а затем между количеством используемых логических ворот. –

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