Генетические алгоритмы: значения генов должны составлять до одного

Я хочу реализовать генетический алгоритм (пока не уверен насчет языка / фреймворка, возможно, часовщика), чтобы оптимизировать соотношение смешивания некоторых жидкостей.

Каждая смесь состоит из до 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), вы можете добавить фазу одобрения для новых хромосом потомства (генерируемых мутацией и / или кроссовером), прежде чем выбросить их в генофонд (и позволить им размножаться), и отклонить тех, кто не удовлетворяет условию.

Другие вопросы по тегам