




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
最小重量機(jī)器設(shè)計(jì)問題一、實(shí)驗(yàn)?zāi)康?、了解回溯法和分支限界法的基本思想.2、運(yùn)用回溯法和分支限界法解決最小重量機(jī)器設(shè)計(jì)問題。二、實(shí)驗(yàn)要求最小重量機(jī)器設(shè)計(jì)問題:設(shè)某一機(jī)器由n個(gè)部件組成,每一種部件可以從m個(gè)不同的供應(yīng)商處購得。設(shè)Wjj.是從供應(yīng)商j處購得的部件i的重量,*是相應(yīng)的價(jià)格。試設(shè)計(jì)一個(gè)算法,給出總價(jià)格不超過c的最小重量機(jī)器設(shè)計(jì)。分別用回溯法和分支限界法實(shí)現(xiàn)問題的算法。三、算法思想和實(shí)現(xiàn)1、回溯法此問題是一棵排列樹,設(shè)開始時(shí)bestx=[—1,-1,......,—1]則相應(yīng)的排列樹由x[0:n—1]的所有排列構(gòu)成。找最小重量機(jī)器設(shè)計(jì)的回溯算法Backtrack是類machine的公有成員。私有數(shù)據(jù)成員整型數(shù)組Savex保存搜索過的路徑,到達(dá)葉節(jié)點(diǎn)后將數(shù)據(jù)賦值給數(shù)組bestx.成員bestw記錄當(dāng)前最小重量,cc表示當(dāng)前花費(fèi),cw表示當(dāng)前的重量。(3)在遞歸函數(shù)Backtrack中,在保證總花費(fèi)不超過c的情況下:當(dāng)i=n時(shí),當(dāng)前擴(kuò)展結(jié)點(diǎn)是排列樹的葉節(jié)點(diǎn)。此時(shí)搜索到一個(gè)解,判斷此時(shí)的最小重量是否小于當(dāng)前最小重量,若小于則更新bestw,并得到搜索路徑bestx。當(dāng)i<n時(shí),當(dāng)前擴(kuò)展結(jié)點(diǎn)位于排列樹的第i—1層。當(dāng)x[0:i]的花費(fèi)小于給定最小花費(fèi)時(shí),算法進(jìn)入排列樹的第i層,否則將減去相應(yīng)的子樹。算法用變量3記錄當(dāng)前路徑x[0:i]的費(fèi)用。#include〈iostream〉usingnamespacestd;#defineN3#defineM3毒現(xiàn)眥螂柵宜真P」OM翩探)明廷癥洲//偵+-?£喇Mg癥洲//MU+-?£ug-fr皿^//PSOYU一(15柿>0.-()CD>a5sw」dpo>(EUD>pa5」ppa5spo>((Yu一)①uz將宣£po>,一qnd)CDUZUCUEsscup二fTT"二TT畢n*DT〔IAI二NUAU一二&CN&二『Trn二rn、告二iIAI二NJM+-?£菁出嘉WN*)土)(一AUD>pa5」ppa5s::CDuzua5UJpo>TSXAS①q(++=Nvr03U一)」OM—、I京壩樞//THGMAS①quuhmu-Ylsou)(04£)性一1|站|/\|七£二CDUZUCUEpo>二g5mY<-「?旺垠癌5W翰<-一?/*」必噬擋Jx①溢s//=nJx①溢s+JU一霎囑//=NJas①q+Ju一喇傾「、著洲//MASCDqAU一--pug〉A(chǔ)nou二MJXASCDqngxCDAcus-==〉VJX+Js①q〉〉A(chǔ)nou(++>rN〉土。業(yè)W)」OM—.■..KH透照?ffi回華vv-pugVMAS①qvrMAS①€13鬼理照?!=〉飛30=pug〉=sV〉A(chǔ)nouMunMASCDq)喇岬「褊g癥洲sffla、喇岬「褊癥Eiv喇岬「褊g「_w邸指癥洲//(LRMAS①q一言苗q〉Mug毒現(xiàn)眥螂柵宜真P」OM翩探)二三二二fl三§二G三X-K①q二I+M搭」v=JX-K①q二三二彳+MU二「二二UH§)SA『MJM)npsou〉二號(hào)+3))M—一)(++MVF0=w)」£c-JnACD」(洲矚word蒲)爹MMffl顆黑4voidmachine二prinisave()(if(besiwnYl)fCour+〈A-S>S$->35M-、」二、、人grid-Cour+A〈w************************=〈〈end-.cour+〈〈、、蜘注??(besfw)湖〕-A〈besiw7endkfoanr+knpkAN;k++)noc7A=?=A〈k+一7=->?s再E-?、A〈saveE+1〈2沖回壁沖同-〈grid__cour+AAendkinr+main()fmachMach-inr+C;COUI-+〈〈成zssnxrTKssQLdn〉〉c//s>?、」/?£?Mach。InKMachine(c);Mach?Backtrack(o);Mach.prinisaveo-rxum0;)2,卷洌蕾(完整word版)最小重量算法設(shè)計(jì)解空間為一棵排列樹,采用優(yōu)先隊(duì)列式分支限界法找出所給的最小重量機(jī)器設(shè)計(jì),開始時(shí),將排列樹的根節(jié)點(diǎn)置為當(dāng)前擴(kuò)展結(jié)點(diǎn)。在初始擴(kuò)展結(jié)點(diǎn)處還設(shè)有選定部件是哪個(gè)供應(yīng)商提供的,故cv=0,cw=0,position=0,peer=0,1<i<nox[1:n]記錄供應(yīng)商的選擇while完成對(duì)排列樹內(nèi)部結(jié)點(diǎn)的有序擴(kuò)展。循環(huán)體內(nèi)依次從活結(jié)點(diǎn)優(yōu)先隊(duì)列中取出具有最小重量的結(jié)點(diǎn),依次為當(dāng)前擴(kuò)展結(jié)點(diǎn).并且花費(fèi)不超過c并加以擴(kuò)展,隊(duì)列為空時(shí)則結(jié)束循環(huán).當(dāng)peer=n時(shí)此時(shí)擴(kuò)展結(jié)點(diǎn)是葉節(jié)點(diǎn),得到當(dāng)前的最小重量和最優(yōu)解數(shù)組x。若peer〈n時(shí),算法依次產(chǎn)生當(dāng)前擴(kuò)展結(jié)點(diǎn)的所有兒子節(jié)點(diǎn).對(duì)于當(dāng)前擴(kuò)展結(jié)點(diǎn)的一個(gè)兒子結(jié)點(diǎn),計(jì)算出當(dāng)前的重量,當(dāng)小于當(dāng)前的最小重量時(shí),將兒子結(jié)點(diǎn)插入到活結(jié)點(diǎn)優(yōu)先隊(duì)列中,而當(dāng)不下于當(dāng)前最小重量時(shí)以當(dāng)前這個(gè)結(jié)點(diǎn)為根的子樹中不可能有比當(dāng)前最小重量部件選擇更好的解,故可將此結(jié)點(diǎn)舍去.若在一結(jié)點(diǎn)所計(jì)算的花費(fèi)大于所給的最小花費(fèi),則剪去以此節(jié)點(diǎn)為根的子樹.#include"fstream°h”#include"iostream.h"structnodetype(intpeer;structnodetype*parent;intposition;doublecw;doublecv;doubler;};structnodetype*queues[100000000];/////////////////////////////////小根堆///////////////////////////////voidinsert(structnodetype*x,intoldlast)//x是要插入的數(shù){//oldlast是目前堆的元素?cái)?shù)目intlast=oldlast+1;queues[last]=x;(完整word版)最小重量算法設(shè)計(jì)inti=last;while((i>1)&&(queues[i]-〉r〈queues[i/2]一>r))(structnodetype*temp;temp=queues[i];queues[i]=queues[i/2];queues[i/2]=temp;=i/2;}}//last是當(dāng)前堆的元素個(gè)數(shù),執(zhí)行該函數(shù)后structnodetype*deletemin(intlast,structnodetype*a[]){〃返回堆的第一個(gè)元素(即最小元素)structnodetype*temp;temp=a[1];a[1]=a[last];last一-;inti=1;intj=0;while(i〈=last/2){if((a[2*i]—〉r<a[2*i+1]—〉r)||(2*i==last))j=2*i;elsej=2*i+1;if(a[i]-〉r〉a[j]-〉r){structnodetype*temp;temp=a[i];a[i]=a[j];a[j]=temp;i=j;}elsereturn(temp);}return(temp);}voidmain()/////////////////////////////////小根堆///////////////////////////////(ifstreamfin("input.txt");ofstreamfout("output°txt");intn,m,c;fin>〉n;fin〉>m;fin>>c;double**w二newdouble*[n+1];double**cc二newdouble*[n+1];for(inti=1;i〈=n;i++){w[i]=newdouble[m+1];cc[i]=newdouble[m+1];}for(i=1;i〈=n;i++)for(intj=1;j<=m;j++)fin>〉cc[i][j];for(i=1;i〈=n;i++)for(intj=1;j〈=m;j++)double*cmin二newdouble[n+1];double*wmin=newdouble[n+1];for(i=1;i〈=n;i++)(cmin[i]=cc[i][1];wmin[i]=w[i][1];for(intj=2;j〈=m;j++)(if(cmin[i]>cc[i][j])cmin[i]=cc[i][j];if(wmin[i]>w[i][j])wmin[i]=w[i][j];}}double*rc=newdouble[n+1];//剩余部件最小價(jià)格和double*rw=newdouble[n+1];//剩余部件最小重量和rc[n]=0;rw[n]=0;for(i=n-1;i>=1;i——)(rc[i]=rc[i+1]+cmin[i+1];rw[i]=rw[i+1]+wmin[i+1];}structnodetype*node=newstructnodetype;node一>peer=0;node->cv=0;node—〉cw=0;node->position=0;node—>r=rw[1]+wmin[1];insert(node,0);intcpeer=0;intq_len=1;boolisend=false;while(!isend&&q_len〉0)(node=deletemin(q_len,queues);q_len—-;if(node一>peer==n)(isend=true;fout〈<node->cw〈<endl;int*x=newint[n+1];for(intk=n;k〉=1;k——)(x[k]=node->position;node=node—〉parent;}for(k=1;k<=n;k++)fout〈<x[k]<<””;fout<<endl;return;}for(intj=1;j〈=m;j++)(if(node—>cv+cc[node—〉peer+1][j]+rc[node—〉peer+1]<=c)(cpeer二node-〉peer+1;structnodetype*node_add=newstructnodetype;node_add—〉peer=cpeer;node_add-〉cv=node—〉cv+cc[cpeer][j];node_add—〉cw=node-〉cw+w[cpeer][j];node_add—〉r=node_add—>cw+rw[cpeer];node_add-〉position=j;node_add一〉parent=node;insert(no
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力檢修合同范本
- 手機(jī) 經(jīng)銷合同范本
- 勞務(wù)塔吊司機(jī)合同范本
- 加工非標(biāo)制作合同范本
- 農(nóng)村產(chǎn)業(yè)外包合同范本
- 入職家政合同范本
- 公路承包轉(zhuǎn)讓合同范本
- 公司加班裝修合同范本
- 產(chǎn)品推廣協(xié)議合同范本
- 冷庫維修合同范本正規(guī)合同
- ABO血型鑒定及交叉配血
- 消防水箱安裝施工方案
- 【重慶長安汽車公司績效管理現(xiàn)狀、問題及優(yōu)化對(duì)策(7600字論文)】
- 家鄉(xiāng)-延安課件
- 孔軸的極限偏差表
- 熱軋鋼板和鋼帶尺寸允許偏差
- BBC-商務(wù)英語會(huì)話
- 中等職業(yè)學(xué)校畢業(yè)生就業(yè)推薦表
- 鋼結(jié)構(gòu)設(shè)計(jì)原理全套PPT完整教學(xué)課件
- 2023年浙江首考讀后續(xù)寫真題講評(píng)課件 高三英語二輪復(fù)習(xí)寫作專項(xiàng)+
- 各期前列腺癌治療的指南推薦
評(píng)論
0/150
提交評(píng)論