Я думаю, вы путаете гены и хромосомы. Хромосома кодирует вариант решения вашей проблемы. Ген является частью хромосомы.
При таком параметре, зачем вам такое ограничение на хромосомы? похоже, вы хотите, чтобы это было в генах хромосомы.
Для этого вы можете сделать несколько вещей: сделать так, чтобы каждый ген кодировал целое число в [0, 100]
. Если в конце концов гены не складываются в 100
, начисляется штраф за пригодность этих хромосом.
Другой способ, который может сделать операторы кроссинговера более естественными для применения, состоит в том, чтобы каждый ген хранил 100 битов. Если установлены x
бита, это означает, что ген будет кодировать x%
.
Еще один способ состоит в том, чтобы вся хромосома кодировала 100
установленных битов. Тогда каждый ген будет содержать значение x
, которое представляет интервал. Количество установленных битов между двумя точками разделения представляет собой процент, связанный с этим геном. Например:
1 2 3 4 5 6 7 8 ... 100
1 1 1 1 1 1 1 1 ... 1
| | | | |
g1 g2 g3 g4
Это можно сделать, сгенерировав 5 случайных чисел <= 100
, отсортировав их и взяв различия между ними.
person
IVlad
schedule
20.02.2015