


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、機械優(yōu)化設(shè)計復(fù)合形方法及源程序(一)題目:用復(fù)合形法求約束優(yōu)化問題2 2 2 2min f xx154 x26;g164x1x20 ;g3x1100 的最優(yōu)解?;舅悸罚涸诳尚杏蛑袠?gòu)造一個具有 K個頂點的初始復(fù)合形。對該復(fù)合形各頂點的目標 函數(shù)值進行比較,找到目標函數(shù)值最大的頂點(即最壞點),然后按一定的法則求出目標 函數(shù)值有所下降的可行的新點,并用此點代替最壞點,構(gòu)成新的復(fù)合形,復(fù)合形的形狀 每改變一次,就向最優(yōu)點移動一步,直至逼近最優(yōu)點。(二)復(fù)合形法的計算步驟1)選擇復(fù)合形的頂點數(shù)k,一般取n 1 k 2n,在可行域內(nèi)構(gòu)成具有k個頂點的初始 復(fù)合形。2) 計算復(fù)合形個頂點的目標函數(shù)值,比
2、較其大小,找出最好點xl、最壞點xh及此壞點Xg.3)計算除去最壞點Xh以外的(k-1)個頂點的中心Xc。判別Xc是否可行,若Xc為可行點, 則轉(zhuǎn)步驟 4 );若Xc為非可行點,貝U重新確定設(shè)計變量的下限和上限值,即令4)a xL ,b,然后轉(zhuǎn)步驟1),重新構(gòu)造初始復(fù)合形。按式xRXh計算反射點XR,必要時改變反射系數(shù) a的值,直至反射成功,即滿足式gj Xr0, j,m ; f Xrf Xh。然后X R以取代X h,構(gòu)成新的復(fù)合形。5)若收斂條件f Xjf Xl得到滿足,計算終止。約束最優(yōu)解為:X Xl, f Xf Xl 。(三)復(fù)合形法程序框圖見下圖:(四)源程序如下:/*輸入值選擇#in
3、 elude <>#in elude<>#in elude<>#in elude<>#defi ne EE0double輸入n , k,n=2,k=3.本程序可以處理4n為2或3, k為3或4的情況*/形成初始復(fù)合形的k計算各頂點的目標函le-5*apply(int,int);double f(double*);double *g(doube *);bool judce(double *);int mai n()將各疋點的目標函數(shù)值復(fù)合形法收斂控制精度*/申請矩陣空間*/*否./*約束函數(shù)*/計算出去Xh后的各頂可彳點中心曰標函數(shù)*/1卩亍點的判
4、斷*/int nk;否int i,j,k1;int l;double temporary;double restrai n;double reflect;pri nt:(一次壞點xg代替最壞sran d( un sig ned)time(NULL)scanf("%d",&n);printf(" 請輸入復(fù)合形的頂點數(shù) k:");scanf("%d",&k);*/double *x=apply(k,n);/*存放復(fù)合形頂點double*y=(double*)calloc(k,sizeof(double);/*存放目標函數(shù)值
5、 */double*p=(double*)calloc(3,sizeof(double);/*存放約束函數(shù)值 */double*a=(double*)calloc(n,sizeof(double);/*存放設(shè)計變量的下限*/double*b=(double*)calloc(n,sizeof(double);/*存放設(shè)計變量的上限*/double*x_c=(double *)calloc(n,sizeof(double); /*存放可行點中心 */double*x_r=(double *)calloc(n,sizeof(double); /*存放最壞點的反射點 */八、printf("
6、本程序中的所有輸入, 兩個數(shù)之間用空格隔開,然后按 enter 鍵時不要長時間的按,否則,可能會出錯 n");printf("請輸入選定的第一個可行點x1(包含d個數(shù)):",n);for(i=0;i<n;i+)scanf("%lf",*x+i);printf("請輸入初選變量的下限a(包含d個數(shù)):",n);for(i=0;i<n;i+)scanf("%lf",a+i);pri ntf("請輸入初選變量的上限b(包含d個數(shù)):",n);for(i=0;i<n;i+)s
7、canf("%lf",b+i);printf(" 輸出輸入結(jié)果為 :nn=%d,k=%d,x1=(",n,k);/*輸出已知數(shù)據(jù) */for(i=0;i<n-1;i+)printf("%.5lf ",*(*x+i);printf("%.5lf)na=(",*(*x+n-1); for(i=0;i<n-1;i+)printf("%f ",*(a+i);printf("%.5lf),b=(",*(a+n-1); for(i=0;i<n-1;i+)printf(&
8、quot;%f ",*(b+i);printf("%.5lf)n",*(b+n-1);L1: for(i=1;i<k;i+)/*隨機得到其余 (k-1) 個可行點 */for(j=0;j<n;j+)*(*(x+i)+j)=*(a+j)+(double)(rand()%10000)/10000*(*(b+j)-*(a+j);l=1;for(i=1;i<k;i+)/*找出可行點的個數(shù) l ,并把可行點放在前 l 個位置上 */if(judge(*(x+i)for(j=1;j<k;j+)if(!judge(*(x+j)for(k1=0;k1<
9、;n;k1+)temporary=*(*(x+i)+k1);*(*(x+i)+k1)=*(*(x+j)+k1); *(*(x+j)+k1)=temporary;break;l+;for(i=0;i<l-1;i+) /* 把前 l 個可行點按目標函數(shù)值從大到小排序 */ for(j=i+1;j<l;j+)if(f(*(x+i)<f(*(x+j)for(k1=0;k1<n;k1+)temporary=*(*(x+i)+k1);*(*(x+i)+k1)=*(*(x+j)+k1);*(*(x+j)+k1)=temporary;for(i=0;i<n;i+) /* 求可行點
10、中心 */*(x_c+i)=0;for(i=0;i<l;i+)for(j=0;j<n;j+)*(x_c+j)+=*(*(x+i)+j);for(i=0;i<n;i+)*(x_c+i)/=l;if(!judge(x_c) /* 判斷可行點中心是否可行 */ for(i=0;i<n;i+)*(a+i)=*(*(x+l-1)+i);*(b+i)=*(x_c+i);goto L1;elsefor(i=l;i<k;i+) /* 將不可行點可行化 */ dofor(j=0;j<n;j+) *(*(x+i)+j)=*(x_c+j)+*(*(*(x+i)+j)-*(x_c+
11、j);while(!judge(*(x+i);L2:for(i=0;i<k-1;i+) /* 將可行點按目標函數(shù)值從大到小排序 */ for(j=i+1;j<k;j+)if(f(*(x+i)<f(*(x+j) for(k1=0;k1<n;k1+) temporary=*(*(x+i)+k1); *(*(x+i)+k1)=*(*(x+j)+k1);*(*(x+j)+k1)=temporary;restrain=0; /* 求收斂條件 */for(i=0;i<k;i+) restrain+=(f(*(x+i)-f(*(x+k-1)*(f(*(x+i)-f(*(x+k-
12、1);restrain=sqrt(k-1)*restrain);if(restrain<E0) /* 判斷收斂條件 */printf("n 求得約束最優(yōu)點為 :( "); for(i=0;i<n;i+)printf("%.5f ",*(*(x+k-1)+i);printf(")n 目標函數(shù)的最優(yōu)解為 :%.5fn",f(*(x+k-1);return 0;elseL3:*/for(i=0;i<n;i+) /* 計算除去最壞點 *x 外的 (k-1) 個頂點的中心*(x_c+i)=0;for(i=1;i<k;i+
13、) for(j=0;j<n;j+)*(x_c+j)+=*(*(x+i)+j);for(i=0;i<n;i+)*(x_c+i)/=k-1;reflect=;L4:for(i=0;i<n;i+) /* 求反射點 */ *(x_r+i)=*(x_c+i)+reflect*(*(x_c+i)-*(*x+i);if(!judge(x_r)reflect*=;goto L4;else if(f(x_r)<f(*x) for(i=0;i<n;i+)*(*x+i)=*(x_r+i);goto L2;else if(reflect<=1e-10)for(i=0;i<n;
14、i+)*(*x+i)=*(*(x+1)+i);goto L3;elsereflect*=;goto L4;double *apply(int row,int col) /* 申請矩陣空間 */ int i;double *x=(double*)calloc(row*col,sizeof(double);double *y=(double *)calloc(row,sizeof(double *); if(!x | !y)printf(" 內(nèi)存分配失敗 !");exit(1);for(i=0;i<row;i+)*(y+i)=x+i*col;return y;double f(double *x) /* 目標函數(shù) */return (*x-5)*(*x-5)+4*(*(x+1)-6)*(*(x+1)-6);double *g(double *x) /* 約束函數(shù) */double *p=(double *)calloc(3,sizeof(double);if(!p)printf(" 內(nèi)存分配失敗 !");exit(1);*p=64-(*x)*(*x)-(*(x+1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國尼可剎米注射液市場運行態(tài)勢及行業(yè)發(fā)展前景預(yù)測報告
- 2024-2030年中國民辦中小學校行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報告
- 泵機設(shè)備制造項目可行性研究報告申請報告
- 煙臺生物醫(yī)藥制品項目評估報告
- 2025年機械底漆噴涂機項目投資可行性研究分析報告
- 十二五節(jié)能自查報告評分
- 福建省2024中考道德與法治課前背本第26課時中國人中國夢
- 新焊割氣行業(yè)深度研究報告
- 科技前沿網(wǎng)絡(luò)直播技術(shù)在商業(yè)領(lǐng)域的廣泛應(yīng)用與前景
- 小學解方程能力提升訓(xùn)練冊500題
- 海洋鉆井(平臺)
- (完整版)電梯的鋼結(jié)構(gòu)施工方案
- 中國近現(xiàn)代史綱要ppt全共64頁課件
- 腰椎間盤突出癥(腰痹病)中醫(yī)臨床路徑
- 教學團隊建設(shè)總結(jié)報告
- 研發(fā)經(jīng)費填報指標說明及核算方法
- 裝飾施工進度計劃網(wǎng)絡(luò)圖及橫道圖
- 一年級思維訓(xùn)練(課堂PPT)
- 實木電腦桌書桌安裝圖
- GB_T 27025-2019 檢測和校準實驗室能力的通用要求(高清版)
- 俱樂部經(jīng)營俱樂部經(jīng)營
評論
0/150
提交評論