2016-08-01 110 views
0

我想創建一個我認爲類似於揹包問題的算法。問題是爲某些中間產品找到配方/物料清單。中間產品配方有不同的選擇。例如,產品X可以由25%的原材料A + 75%的原材料B或50%的原材料A + 50%的原材料B等組成。對於每種配方,有1到100種不同的替代品。遺傳算法編碼

我的問題是,如何最好地編碼不同的配方替代品(和/或在哪裏可以找到類似的問題在互聯網上)。我想我必須使用值編碼,即爲每個配方的替代選項分配一個值。我有合理的,不同的選擇嗎?

感謝&親切的問候

回答

1

您可以編碼與一些染色體的問題。如果您的產品具有N成分,那麼您的數字染色體長度爲N:X = {x1,x2,...,xN}。染色體的每個數字xi代表成分的部分我。這不是必須的,數字總和爲1。 例如X = {23,5,0}表示需要23份成分1,5份成分2和0份成分3.

使用此編碼,交叉不會使染色體失效。

+0

我沒有完全描述這個問題,但你仍然理解它是正確的。感謝你們倆。 –

1

您可以使用100個dimentions變量提出一個單獨的,就像下面

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;