Генетический алгоритм требует некоторого способа вознаграждения хороших генов за большее распространение. Если у вас не было возможности отличить хорошие гены от плохих, вы вообще не могли бы использовать генетический алгоритм.
Для того, чтобы генетический алгоритм работал, вы должны позволить воспроизводить более подходящие решения, предпочитая менее подходящие решения. В противном случае вы бы просто попробовали случайные решения.
Вот типичный пример из моего собственного опыта: при разработке одной из первых систем голосового набора нам было трудно найти алгоритм, позволяющий сопоставить произносимое имя с сохраненной копией того же имени. Нам сказали, что 95% точности выбора одного имени из 25 было достаточно. У нас был сохраненный корпус людей, произносящих 25 имен по 10 раз каждый.
Во-первых, мы разработали систему ввода, которая измеряла длину произносимого слова и частоту энергии в нескольких его нормированных кусках. Затем мы разработали алгоритм, который назначал веса для совпадений по этим параметрам и сравнивал два набора параметров по этим весам.
Теперь у нас был последний шаг - каким должно быть значение этих весов?
Мы создали 1000 случайных наборов весов и проверили их на корпусе. Мы выбросили 500, которые показали худшие результаты. Для оставшихся 500 мы дублировали каждый и в одном из них случайным образом подняли или опустили один из весов.
Мы повторяли этот процесс на компьютере около двух недель, пока он, наконец, не получил набор весов, отвечающий критерию точности 95%. Затем мы проверили это на данных не в корпусе. Это было примерно на 92%. Таким образом, мы потратили больше времени, чтобы достичь 98% точности в корпусе, и этот набор весов обеспечил 95% точности для данных, не входящих в корпус.
Итак, суть в том, что у вас должна быть функция пригодности для запуска генетического алгоритма. Если у вас нет возможности отличить хорошие гены от плохих, как вы можете убедиться, что хорошие гены размножаются, а плохие - нет?