遺傳演算法 01揹包問題 C

2021-08-10 03:03:29 字數 1490 閱讀 9944

#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揹包問題的應用

確定或幾乎確定的方式尋找 充滿隨機性的啟發式方法,例如遺傳演算法 演化論的 物競天擇,適者生存 基因和染色體 基因是不能分割的最小單位,染色體一組基因的組合,例項用基因表示遺傳特徵,簡單一般就是以基因作為遺傳特徵 種群和個體 遺傳和變異遺傳不是平穩的,有一定概率變異,可能變好,可能變壞 基因交叉,基...