#include //#include #include #include #include using namespace std;
const int pack_max_w = 80; //揹包最大承受重量
const int pack_max_v = 75; //揹包最大承受容積
const int num = 32; //物品數
const int max_generation = 100; //遺傳最大代數
const int ps = 500; //種群規模
const float pc = 0.8; //交叉率
const float pv = 0.1; //變異率
const int zl[num]=;
const int tj[num]=;
const int value[num]=;
//隨機產生01
int pp()
else
}//個體類
class entity
};//遺傳演算法類
class ga
//交叉
void cross();
//是否變異
bool isvariation()
//變異
void variation();
//進行遺傳,每五代機率變異
void run()
}cal_fitness();
cal_maxval_single(max_generation);
cout<<"the best value is:"<>n;pack_max_v = n;
//fin>>n;pack_max_w= n;
//fin>>n;num = n;
for(i = 0;i < num;i++)
for(i = 0;i < num;i++)
for(i = 0;i < num;i++)
//for(i=0;ipack_max_w||vsum > pack_max_v) //產生符合條件的個體
i--;
}/* cout<<"init:" pack_max_v)
zq[i].fit = val;
//cout}void ga::select()
//使用輪賭法進行選擇
selected_rate[0] = float(zq[0].fit) / fit_sum;
for(i = 1; i < ps; i++)
for(i = 0; i < ps; i++) }}
for(i = 0;i < ps;i++){
zq[i]= new_zq[i];
//cout<
遺傳演算法解決揹包問題
總體思想與之前的相似,評價函式就是物品的價值之和,但要注意一旦物品的重量大於揹包的重量,那麼該條染色體的倖存概率為0 基因就是每乙個物品是否選擇,這裡預設有10條染色體在比較,並且每一條染色體上的第i個基因就是代表第i個物品是否選擇 突變就是隨機選擇的染色體的隨機位置由0變1,由1變0 另外建議把變...
遺傳演算法解決揹包問題(python)
1.問題重述 給定n個物品,價值分別是 v1,v2,vn,重量分別是 w1,w2,wn。在物品不可分割的情況下,挑選物品放入承重為w的揹包,使得揹包內物品的價值最大,且揹包內物品的總重量小於w.2.解決方案 本問題可用多種方法解決,這裡採用遺傳演算法來求解,以下是遺傳演算法的流程圖 要採用遺傳演算法...
遺傳演算法介紹及在01揹包問題的應用
確定或幾乎確定的方式尋找 充滿隨機性的啟發式方法,例如遺傳演算法 演化論的 物競天擇,適者生存 基因和染色體 基因是不能分割的最小單位,染色體一組基因的組合,例項用基因表示遺傳特徵,簡單一般就是以基因作為遺傳特徵 種群和個體 遺傳和變異遺傳不是平穩的,有一定概率變異,可能變好,可能變壞 基因交叉,基...