確定或幾乎確定的方式尋找
充滿隨機性的啟發式方法,例如遺傳演算法
演化論的 物競天擇,適者生存
基因和染色體:基因是不能分割的最小單位,染色體一組基因的組合,例項用基因表示遺傳特徵,簡單一般就是以基因作為遺傳特徵
種群和個體
遺傳和變異遺傳不是平穩的,有一定概率變異,可能變好,可能變壞
基因交叉,基因突變: 變化太頻繁無法收斂到近似最優解,變化頻率太底也不行,無法保證種群多樣性,可能收斂到區域性最優解。
選擇
適應度:個體對環境的適應程度。
基因的編碼 : 01揹包問題可以採用 01編碼
適應度評估函式 揹包問題可以根據基因101001,計算出對應的價值,價值越大越好
遺傳運算元設計
a) 選擇運算元
i. 比例選擇:又稱輪盤賭選擇,按種群比例來確定
ii. 隨機競爭選擇 每次隨機選擇兩個或多個,取適應度高的。
iii. 最佳保留選擇 選擇最好的替換最差的,而且不參與交叉和變異
iv. 排序選擇
v. 確定式取樣選擇
b) 交叉運算元
i. 單點交叉 隨機選擇1個點,隨機概率交換這個點的片段
ii. 兩點交叉與多點交叉 隨機選擇兩個點或多個點,隨機概率交換每個點的片段
iii. 均勻交叉 一致交叉,基因上每個點都按照相同概率互換基因片段
iv. 算術交叉 用於浮點數編碼表示的基因,線性組合產生
c) 變異運算元
i. 單點變異 隨機選擇乙個點,隨機概率變異
ii. 固定位置變異 乙個或幾個固定位置,隨機變異
iii. 均勻變異 每個片段,使用均勻分布的隨機數,以小的隨機概率進行變異
iv. 邊界變異 如果基因編碼規則有邊界值(最大最小),根據規則選乙個替換成邊界值
v. 高斯變異
運算引數 種群大小m,交叉概率pc, 變異概率pm,進化迭代次數t
01揹包問題遺傳演算法的應用:
weight = ;value = ;
test_round = 500; 測試次數
obj_count = 7;
capacity = 150;揹包重量
population_size = 32; 種群個數
max_generations = 100;//500; 種群迭代次數
p_xover = 0.8; 交叉編譯概率
p_mutation = 0.15; 變異概率
選擇運算元採用 輪盤賭策略
交叉運算元: 兩點交叉,隨機個數的基因位進行交換(1~7的隨機數),交換的位置也是隨機等概率選擇
變異運算元:對隨機個數的基因位進行變異 每個位置被交換的概率是相等的
結果統計正確的次數:success 495
github
遺傳演算法 01揹包問題 C
include include include include include using namespace std const int pack max w 80 揹包最大承受重量 const int pack max v 75 揹包最大承受容積 const int num 32 物品數 con...
遺傳演算法解決揹包問題
總體思想與之前的相似,評價函式就是物品的價值之和,但要注意一旦物品的重量大於揹包的重量,那麼該條染色體的倖存概率為0 基因就是每乙個物品是否選擇,這裡預設有10條染色體在比較,並且每一條染色體上的第i個基因就是代表第i個物品是否選擇 突變就是隨機選擇的染色體的隨機位置由0變1,由1變0 另外建議把變...
遺傳演算法解決揹包問題(python)
1.問題重述 給定n個物品,價值分別是 v1,v2,vn,重量分別是 w1,w2,wn。在物品不可分割的情況下,挑選物品放入承重為w的揹包,使得揹包內物品的價值最大,且揹包內物品的總重量小於w.2.解決方案 本問題可用多種方法解決,這裡採用遺傳演算法來求解,以下是遺傳演算法的流程圖 要採用遺傳演算法...