Как заставить зависимость / связь генов в генетическом алгоритме? - PullRequest
0 голосов
/ 30 мая 2018

Для текущего проекта я хочу использовать генетические алгоритмы - в настоящее время я заглянул в библиотеку jenetics .

Как я могу заставить некоторые гены зависеть друг от друга?Я хочу отобразить CSS на гене, например, у меня есть гены, указывающие, отображается ли изображение, и в случае, если это также соответствующая высота и ширина.Поэтому я хочу, чтобы эти гены были объединены в группу, так как не имело бы смысла, что после кроссовера хромосома будет указывать что-то вроде «нет изображения» - высота 100 пикселей - ширина 0 пикселей.

Есть ли методсделать это?Или, может быть, другая библиотека (в java ), которая поддерживает это?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы хотите внедрить больше знаний в свою систему, чтобы уменьшить пространство поиска.

Если бы это были знания о структуре решения, я бы предложил взглянуть на грамматическую эволюцию (GE).Ваши знания, как представляется, больше относятся к действительным комбинациям кодонов, поэтому GE не так легко применить.

Возможно, можно объединить несколько признаков в один кодон, но это может быть нежелательным и / или неосуществимым (например,из-за большого количества возможных комбинаций).

Но на самом деле у вас нет проблемы здесь:

  • хорошо иметь бессмысленные генотипы - они будут удалены из-задавление выбора
  • хорошо иметь бессмысленные последовательности кодонов - это называется «раздувание»;раздувание довольно распространено в некоторых эволюционных алгоритмах (обычно обсуждается в контексте генетическое программирование ) и не является строго плохим;слишком большая борьба с раздутием может снизить производительность поиска
0 голосов
/ 30 мая 2018

Если вы знаете, как кодируется ваш геном, т. Е. Какие последовательности хромосом образуют группы, вы можете расширить (поскольку вы упоминаете дженетику) io.jenetics.MultiPointCrossover, чтобы избежать разделения групп.(Исходный код доступен на GitHub .)

Это может быть так же просто, как сохранение диапазонов генов, которые образуют группы, если один из индексов случайного среза разделит группу, приспособив индекс кближайший конец группы.(Конечно, это приведет к статистически более высокой вероятности порезов на концах групп; вероятно, было бы лучше создать новое случайное место, пока оно не пересекает группу.)

Но это также верно (как отмечает Пит), чтобы иметь гены, которые не имеют смысла (игнорируются) на основе других генов;если комбинация против выживания, она будет выбрана.

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