Генетические алгоритмы: значения генов должны составлять до одного
Я хочу реализовать генетический алгоритм (пока не уверен насчет языка / фреймворка, возможно, часовщика), чтобы оптимизировать соотношение смешивания некоторых жидкостей.
Каждая смесь состоит из до 5 ингредиентов a, b, c, d, e
, который я бы смоделировал как гены с меняющимися значениями. Поскольку хромосома представляет собой соотношение смешивания, существуют (как минимум) два дополнительных условия:
(1) a + b + c + d + e = 1
(2) a, b, c, d, e >= 0
Я все еще на стадии планирования своего проекта, поэтому я не могу дать пример кода, однако я хочу знать, могут ли и как эти условия быть реализованы в генетическом алгоритме с помощью такой инфраструктуры, как Watchmaker.
[редактировать]
Поскольку это не кажется прямым объяснением:
Проблема в условии (1) - если каждый ген a, b, c, d, e
случайным и независимым образом, вероятность этого равна приблизительно 0. Поэтому мне нужно реализовать мутацию таким образом, чтобы a, b, c, d, e
выбираются в зависимости друг от друга (см. Случайные числа, которые добавляют к 100: Matlab в качестве примера).
Однако я не знаю, возможно ли это и будет ли это соответствовать эволюционным алгоритмам в целом.
1 ответ
Первое условие (a+b+c+d+e=1
) могут быть удовлетворены наличием более коротких хромосом, только с a,b,c,d
, e
значение может быть представлено (в функции пригодности или для последующего использования) e:=1-a-b-c-d
,
РЕДАКТИРОВАТЬ:
Другой способ выполнить первое условие - нормализовать значения:
sum:= a+b+c+d+e
a:= a/sum;
b:= b/sum;
c:= c/sum;
d:= d/sum;
e:= e/sum;
Новая сумма будет равна 1.
Для второго условия (a,b,c,d,e>=0
), вы можете добавить фазу одобрения для новых хромосом потомства (генерируемых мутацией и / или кроссовером), прежде чем выбросить их в генофонд (и позволить им размножаться), и отклонить тех, кто не удовлетворяет условию.