2016-08-01 11 views
0

Я пытаюсь создать алгоритм, который, как я считаю, похож на проблему с рюкзаком. Проблема заключается в том, чтобы найти рецепты/Билль-Материалы для некоторых промежуточных продуктов. Существуют разные альтернативы рецептов для промежуточных продуктов. Например, продукт X может состоять из 25% сырья A + 75% сырья B или 50% сырья A + 50% сырья B и т. Д. Для каждого рецепта существует от 1 до 100 различных альтернатив.Кодирование генетического алгоритма

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

Благодаря & наилучшими пожеланиями

ответ

1

Вы можете кодировать проблему с числом хромосом. Если у вашего продукта есть N ингредиентов, то ваш номер хромосомы имеет длину N: X = {x1, x2, .., xN}. Каждое число xi хромосомы представляет собой компоненты ингредиента i. Не требуется, чтобы числа составляли единицу. . X = {23,5,0} означает, что вам нужно 23 части ингредиента 1, 5 частей ингредиента 2 и нулевые части ингредиента.

С помощью этой кодировки кроссовер не приведет к аннулированию хромосомы.

+0

Я не полностью описал проблему, но вы все еще поняли ее правильно. Спасибо вам обоим. –

1

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

X={x1,x2,x3,...,x100} xi∈[0,1] ∑(xi)=1.0 

Это трудно использовать кроссовер operation.So Я полагаю, что потомство только может быть произведено посредством операции мутации.

операция Мутация по отношению к родительскому личности «X»:

(1)randly choose two dimention 'xi' and 'xj' from 'X'; 

(2)p=rand(0,1); 

(3)xj=xj+(1-p)*xi; 

(4)xi=xi*p;