




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)五 計(jì)算智能(2)軟工研-142014312170106基于背包問(wèn)題的模型(*),設(shè)計(jì)了針對(duì)于背包問(wèn)題的編碼方法:將待求解的各量實(shí)驗(yàn)?zāi)康睦斫膺z傳算法的求解 ,掌握遺傳算法的原理,通過(guò)運(yùn)用 編程(或相關(guān)編程語(yǔ)言)實(shí)現(xiàn)遺傳算法,并求解實(shí)際問(wèn)題,對(duì)求解結(jié)果進(jìn)行分析。通過(guò)分析結(jié)果了解遺傳算法在求解實(shí)際問(wèn)題的特點(diǎn)和優(yōu)勢(shì)。實(shí)驗(yàn)內(nèi)容編寫一個(gè)遺傳算法及其實(shí)際應(yīng)用的程序,能運(yùn)用遺傳算法求解實(shí)際問(wèn)題。實(shí)驗(yàn)要求(1)簡(jiǎn)述實(shí)驗(yàn)原理及方法,并請(qǐng)給出程序設(shè)計(jì)流程圖。2.1 按照下列公式計(jì)算種群中適:4.1 根據(jù)事先定義好的交叉概率GenMaxgen?新種群的最大適舊種群的置演化代數(shù)gen=gen+1圖 12、主函數(shù)
2、main 的流程圖是舊種群的最大適應(yīng)度到新種群中最小調(diào)用sistics ( )統(tǒng)計(jì)種群的適調(diào)用report( ),輸出結(jié)果信息是調(diào)用generation()生成新種群調(diào)用sistics ( )統(tǒng)計(jì)種群的適調(diào)用initpop( )生成初始種群置演化代數(shù)gen=0調(diào)用 read_infor,讀入背包信息/ knapsack.cpp : Defines the entry pofor the console application./#include stdafx.h#include #include #include #include #include #include / 重要常量參數(shù)#defi
3、ne popsize 200#define pc 0.618#define pm 0.03#define lchrom 50#define maxgen 1000/種群的規(guī)模/雜交概率/變異概率/長(zhǎng)度/最大進(jìn)化代數(shù)struct populationunsignedchromlchrom;/double weight;double fitness;/背包重量/適unsigned;parent1,parent2,cross;/雙親、交叉點(diǎn)/種群、父代種群struct population oldpoppopsize,newpoppopsize;/背包問(wèn)題中物體重量、收益、背包容量weightlch
4、rom,profitlchrom,contain;/種群的總適、最小、最大、平均適double sumfitness,minfitness,maxfitness,avgfitness;/計(jì)算適double alpha;時(shí)使用的 懲罰函數(shù)系數(shù)/一個(gè)種群中最大和最小適minpop,maxpop;的(2)源程序:/* 讀入背包信息,并且計(jì)算懲罰函數(shù)系數(shù) */ void read_infor()FILE *fp; j;/獲取背包問(wèn)題信息文件if (fp=fopen(knapsack.txt,r)=NULL)/文件失敗AfxMessageBox(The file is not found,MB_OK,N
5、ULL);return;/讀入物體收益信息 for (j=0;jlchrom;j+)fscanf(fp,%d,&profitj);/讀入物體重量信息 for (j=0;jlchrom;j+)fscanf(fp,%d,&weightj);/讀入背包容量fscanf(fp,%d,&contain); fclose(fp);/根據(jù)計(jì)算的重量,判斷此是否該留在群體中double cal_weight(unsignedj;*chr)double pop_weight;/背包重量pop_weight=0;for (j=0;jlchrom;j+)pop_weight=pop_weight+(*chr)*we
6、ightj; chr+;return pop_weight;/* 種群中適計(jì)算*/double cal_fit(unsigned*chr)j;double pop_profit;/適pop_profit=0;/pop_weight=0;for (j=0;jlchrom;j+)pop_profit=pop_profit+(*chr)*profitj; pop_weight=pop_weight+(*chr)*weightj; chr+;/return pop_profit;/* 群體適*/的最大最小值以及其他信息void sistics(struct population *pop)i;doub
7、le tmp_fit;sumfitness=pop0.fitness; minfitness=pop0.fitness; minpop=0; maxfitness=pop0.fitness;maxpop=0;for (i=1;imaxfitness)&()(tmp_fit*10)%10=0)maxfitness=popi.fitness; maxpop=i;/選擇種群中最小適 if (tmp_fitminfitness)minfitness=popi.fitness; minpop=i;的/計(jì)算平均適avgfitnesmfitness/(float)popsize;/prpr prf(nthe
8、 max pop = %d;,maxpop);f(nthe min pop = %d;,minpop); f(nthe sumfitness = %fn,sumfitness);/種群信息void report(struct population *pop,j; pop_weight=0;gen)prf(teration is %d.n,gen); /輸出種群的代數(shù)/輸出種群中最大適的信息prf(The populations chrom is:n); for (j=0;jlchrom;j+)if (j%5=0)prf( );prf(%1d,popmaxpop.chromj);/輸出群體中最大
9、適prf(nThe populations max fitness is %d.,()popmaxpop.fitness); prf(nThe knapsack weight is %d.nn,()popmaxpop.weight);/*生成初始種群 */void initpop()i,j,ispop; double tmpWeight;/變量用于判斷是否為滿足條件的ispop=false;/生成 popsize 個(gè)種群for(i=0;ipopsize;i+)while (!ispop)for(j=0;jlchrom;j+)oldpopi.chromj=rand()%2;/隨機(jī)生成 oldpo
10、pi.parent1=0;/雙親oldpopi.parent2=0;的oldpopi.cross=0;/交叉點(diǎn)/選擇重量小于背包容量的,即滿足條件tmpWeight=cal_weight(oldpopi.chrom); if (tmpWeight=contain)oldpopi.fitness=cal_fit(oldpopi.chrom); oldpopi.weight=tmpWeight; oldpopi.parent1=0;oldpopi.parent2=0; oldpopi.cross=0; ispop=true;/此可以加入到種群中ispop=false;/*遺傳操作*/概率選擇試驗(yàn)
11、execise(double probability)double pp;/如果生成隨機(jī)數(shù)大于相應(yīng)的概率則返回真,否則試驗(yàn)不成功 pp=(double)(rand()%20001/20000.0);if (pp=probability) return 1; return 0;/ 選擇進(jìn)行交叉操作的selection(pop)double wheel_parent;,rand_Numbartsum;/賭輪法選擇rand_Number=(rand()%2001)/2000.0;wheel_=rand_Number*sumfitness;/賭輪大小partsum=0; parent=0; dopar
12、tsum=partsum+oldpopparent.fitness;parent=parent+1; while (partsumwheel_return parent-1;& parentpopsize);/*交叉操作 */crossover(unsigned*parent1,unsigned*parent2,i)j,cross_;if (execise(pc)/生成交叉位置 0,1,.(lchrom-2)cross_=rand()%(lchrom-1);else cross_=lchrom-1;for (j=0;j=cross_;j+)/保留;/包括在概率選擇不成功時(shí),父體完全保留newp
13、opi.chromj=parent1j;for(j=cross_+1;j=(lchrom-1);j+)/從交叉點(diǎn)開始交叉newpopi.chromj=parent2j;/交叉位置newpopi.cross=cross_return 1;/*變異操作 */muion(unsignedalleles)if (execise(pm)if (alleles)alleles=0; else alleles=1;/返回變異值,或者返回原值 return alleles;/* 群體更新 */ void generation()unsignedi,j,mate1,mate2;double tmpWeight;
14、ispop;/i=0;是否是符合條件的while (ipopsize)ispop=false; while (!ispop)/選擇mate1=selection(i); mate2=selection(i+1);/交叉crossover(oldpopmate1.chrom,oldpopmate2.chrom,i);/變異for (j=0;jlchrom;j+)newpopi.chromj=muion(newpopi.chromj);/選擇重量小于背包容量的,即滿足條件tmpWeight=cal_weight(newpopi.chrom); if (tmpWeight=contain)newpo
15、pi.fitness=cal_fit(newpopi.chrom);newpopi.weight=tmpWeight; newpopi.parent1=mate1; newpopi.parent2=mate2;ispop=true;/此 i=i+1;可以加入到種群中void main(argc, char* argv)gen,oldmaxpop,k;double oldmax;read_infor();/讀入背包信息 gen=0;srand( (unsigned)time( NULL ) );/置隨機(jī) initpop();memcpy(&newpop,&oldpop,popsize*sizeo
16、f(struct population); sistics(newpop);/統(tǒng)計(jì)新生種群的信息 report(newpop,gen);while(genmaxgen)gen=gen+1;if (gen%100=0)srand( (unsigned)time( NULL ) );/置隨機(jī)oldmax=maxfitness;oldmaxpop=maxpop; generation();sistics(newpop); /統(tǒng)計(jì)種群信息/如果種群中的最大適小于老一代種群/的最大適,則保存老一代種群的最大適/否則的最大適if (maxfitnessoldmax)for(k=0;koldmax)repo
17、rt(newpop,gen);/保存種群的信息到老一代種群信息空間memcpy(&oldpop,&newpop,popsize*sizeof(struct population);prf(It is over.);getch();實(shí)例數(shù)據(jù):假設(shè)物體的重量 Weight、物體的收益 Profit 和背包的容量 Contain分別為:Weight= 80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,50,30,45,30,60,50,20 ,65,20,25,30,10,20,25,15,10,10 ,10,4, 4, 2, 1Profit= 220,208,198,192,180,180,165,162,160,158,155,130,125,122,120 ,118,115,110,105,101,100,100,98,96,95,90, 88,82,80,77 ,75, 73, 72,70,69,66, 65,63,60,58,56, 50, 30,Contain=1000,20,15,10, 8,5,3,1如何選擇哪些物品裝入該背包可使得在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)鋁鎳鈷永磁市場(chǎng)前景趨勢(shì)及發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025重慶市安全員-A證考試題庫(kù)附答案
- 2025-2030年中國(guó)金屬鈷市場(chǎng)發(fā)展趨勢(shì)規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)袋式除塵器行業(yè)運(yùn)營(yíng)趨勢(shì)規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)芝麻素市場(chǎng)運(yùn)行狀況與前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)翻譯行業(yè)競(jìng)爭(zhēng)狀況及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)砂巖行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)及發(fā)展風(fēng)險(xiǎn)分析報(bào)告
- 2025-2030年中國(guó)電熱水龍頭市場(chǎng)運(yùn)行現(xiàn)狀及發(fā)展前景預(yù)測(cè)報(bào)告
- 廣西民族大學(xué)《建筑設(shè)備自動(dòng)化A》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東外語(yǔ)外貿(mào)大學(xué)《法律與人生》2023-2024學(xué)年第二學(xué)期期末試卷
- 《幼兒園保教質(zhì)量評(píng)估指南》解讀
- ICU單間耗材出入庫(kù)使用登記表
- 外研版(一年級(jí)起點(diǎn))四年級(jí)下冊(cè)英語(yǔ)全冊(cè)教學(xué)課件
- 助貸機(jī)構(gòu)業(yè)務(wù)流程規(guī)范
- 2024四川省涼山州林業(yè)局招聘60人歷年(高頻重點(diǎn)復(fù)習(xí)提升訓(xùn)練)共500題附帶答案詳解
- DL∕T 5106-2017 跨越電力線路架線施工規(guī)程
- 西師大版數(shù)學(xué)四年級(jí)下冊(cè)全冊(cè)教學(xué)課件(2024年3月修訂)
- 綠化養(yǎng)護(hù)服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 九年級(jí)物理第一課
- 代孕合同范本
- 醫(yī)療事故處理?xiàng)l例解讀專家講座
評(píng)論
0/150
提交評(píng)論