2016-08-01 34 views
0

Ich versuche einen Algorithmus zu erstellen, der meiner Meinung nach einem Rucksack-Problem ähnelt. Das Problem besteht darin, Rezepte/Stücklisten für bestimmte Zwischenprodukte zu finden. Für die Zwischenprodukte gibt es verschiedene Rezeptvarianten. Zum Beispiel kann Produkt X entweder aus 25% Rohmaterial A + 75% Rohmaterial B oder 50% Rohmaterial A + 50% Rohmaterial B usw. bestehen. Es gibt zwischen 1 und 100 verschiedene Alternativen für jedes Rezept.Genetischer Algorithmus Codierung

Meine Frage ist, wie man am besten die verschiedenen Rezeptalternativen enkodiert (und/oder wo man ähnliche Probleme im Internet findet). Ich denke, ich muss Wertcodierung verwenden, dh jeder Alternative eines Rezepts einen Wert zuweisen. Habe ich vernünftige, andere Möglichkeiten?

Dank & freundlichen Grüßen

Antwort

1

Sie können das Problem mit einer Reihe Chromosom kodieren. Wenn Ihr Produkt N Zutaten hat, dann hat Ihre Zahl Chromosom die Länge N: X = {x1, x2, .., xN}. Jede Zahl xi des Chromosoms repräsentiert die Teile des Bestandteils i. Es ist nicht erforderlich, dass die Zahlen eins ergeben. Zum Beispiel X = {23,5,0} bedeutet, dass Sie 23 Teile des Inhaltsstoffs 1, 5 Teile des Inhaltsstoffs 2 und 0 Teile des Inhaltsstoffs 3 benötigen.

Mit dieser Kodierung wird das Chromosom durch Crossover nicht ungültig gemacht.

+0

Ich habe das Problem nicht vollständig beschrieben, aber Sie haben es immer noch richtig verstanden. Danke euch beiden. –

1

Sie eine 100 dimentions Variable ein Individuum zu präsentieren, wie knapp unter

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

verwenden Es ist schwer Crossover zu verwenden operation.So ich, dass die Nachkommen vorschlagen kann nur hergestellt werden, durch Mutationsoperation.

Mutationsoperation in Richtung Mutter einzelnen '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;