国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C語言的復(fù)合形法的優(yōu)化設(shè)計(jì)

2016-07-05 17:51:42邰園園
科技風(fēng) 2016年18期
關(guān)鍵詞:C語言優(yōu)化設(shè)計(jì)

摘 要:優(yōu)化設(shè)計(jì)是在計(jì)算機(jī)廣泛應(yīng)用的基礎(chǔ)上發(fā)展起來的一項(xiàng)設(shè)計(jì)技術(shù),目的是在給定的技術(shù)條件下獲得最優(yōu)設(shè)計(jì)方案、保證產(chǎn)品具有優(yōu)良的性能?;贑語言可以很好實(shí)現(xiàn)優(yōu)化設(shè)計(jì)的算法過程,使解決實(shí)際的優(yōu)化問題變的簡易。

關(guān)鍵詞:C語言,復(fù)合形法,優(yōu)化設(shè)計(jì)

中圖分類號(hào):TH122 文獻(xiàn)標(biāo)識(shí)碼:A

優(yōu)化設(shè)計(jì)是在計(jì)算機(jī)廣泛應(yīng)用的基礎(chǔ)上發(fā)展起來的一項(xiàng)設(shè)計(jì)技術(shù),目的是在給定的技術(shù)條件下獲得最優(yōu)設(shè)計(jì)方案、保證產(chǎn)品具有優(yōu)良的性能[ 4 ]。它首先將設(shè)計(jì)問題按照規(guī)定的格式建立數(shù)學(xué)模型,并選擇合適的優(yōu)化算法,選擇或編制計(jì)算機(jī)程序,然后通過計(jì)算機(jī)自動(dòng)獲得最優(yōu)設(shè)計(jì)方案。

機(jī)械優(yōu)化設(shè)計(jì)問題和一般工程實(shí)際優(yōu)化問題絕大多數(shù)屬于約束非線性規(guī)劃問題,目前對約束最優(yōu)化問題的解法很多,如復(fù)合形法、可行方向法、消元法、懲罰函數(shù)法等[ 2 ]。本文根據(jù)約束最優(yōu)化方法中的復(fù)合形法提出一種利用C語言程序求解最優(yōu)解的方法。

一、復(fù)合形法基本原理[ 2 ]

復(fù)合形法的基本思路是在n維空間的可行域中選取K個(gè)設(shè)計(jì)點(diǎn)(通常取n+1<=K<=2n)作為初始復(fù)合形(多面體)的頂點(diǎn)。然后比較復(fù)合形各頂點(diǎn)目標(biāo)函數(shù)值的大小,其中目標(biāo)函數(shù)值最大的點(diǎn)為壞點(diǎn),以壞點(diǎn)之外其余各點(diǎn)的中心為映射中心,尋找壞點(diǎn)的映射點(diǎn)。以映射點(diǎn)替換壞點(diǎn)與原復(fù)合形除壞點(diǎn)之外其余各點(diǎn)構(gòu)成K個(gè)頂點(diǎn)的新的復(fù)合形。如此反復(fù)迭代計(jì)算,在可行域中不斷以目標(biāo)函數(shù)值低的代替目標(biāo)函數(shù)值最大的壞點(diǎn)從而構(gòu)成新的復(fù)合形,使復(fù)合形不斷向最優(yōu)點(diǎn)移動(dòng)和收縮,直到收縮到復(fù)合形的各頂點(diǎn)與其形心非常接近、滿足迭代精度ε要求時(shí)為止。最后輸出復(fù)合形各頂點(diǎn)中的目標(biāo)函數(shù)值最小的頂點(diǎn)作為近似最優(yōu)點(diǎn)。

現(xiàn)以二維不等式約束優(yōu)化問題來作進(jìn)一步說明。其數(shù)學(xué)模型為:min f(X),X∈D R(2) ,D:g1(X)>=0,g2(X)>=0,a1<=x1<=b1 ,a2<=x2<=b1

在可行域內(nèi)先選定X(1),X(2),X(3),X(4) 四個(gè)點(diǎn)(這里取K=2n=2*2=4)作為初始復(fù)合形的頂點(diǎn),計(jì)算這四個(gè)點(diǎn)的目標(biāo)函數(shù)值,并作比較,得出壞點(diǎn)X(H)和好點(diǎn)X(L):

X(H):f(X(H))=max{f(X(j)) (j=1,2,……,K)} (1-1)

X(L):f(X(L)))=min{f(X(j)))(j=1,2,……,K)} (1-2)

如果X(4)為好點(diǎn),點(diǎn)X(1)為壞點(diǎn),即X(4) →X(L),X(1) →X(H)。以X(2),X(3),X(4)三點(diǎn)的中心,尋找壞點(diǎn)X(H)的映射點(diǎn)X(R):

X(R)= X(C)+α(X(C) -X(H)) (1-3)

式中,α為映射系數(shù),一般α>=1,通常去α=1.3。然后計(jì)算映射點(diǎn)X(R)處目標(biāo)函數(shù)f(X(R))與目標(biāo)函數(shù)值f(X(R))相比是否下降,并同時(shí)檢查X(R)是否在可行域內(nèi)。如果下降性、可行性這兩方面都得到滿足,則以X(R)點(diǎn)替換X(H)點(diǎn),由X(R)與X(2),X(3),X(4)共四個(gè)點(diǎn)構(gòu)成一個(gè)新復(fù)合形。這個(gè)復(fù)合形肯定優(yōu)于原復(fù)合形;如果上述兩個(gè)條件不能同時(shí)滿足,則可將映射系數(shù)縮半,即0.5α→α,仍按式(1-3)迭代,重新取得新的影映射點(diǎn)X(R),使其同時(shí)滿足下降性、可行性條件。有時(shí)甚至要經(jīng)過多次縮減映射系數(shù)才能使回縮的映射點(diǎn)X(R)最后滿足這兩個(gè)條件。這時(shí)以回縮成功的映射點(diǎn)X(R)和X(2),X(3),X(4)構(gòu)成新復(fù)合形。構(gòu)成新復(fù)合形就完成了一輪迭代。以后再按上述方法進(jìn)行迭代搜索,不斷地使復(fù)合形向著目標(biāo)函數(shù)減小的方向移動(dòng)和收縮,直到逼近最優(yōu)解。

二、C語言的概述和作用

C語言是國際上廣泛流行的計(jì)算機(jī)高級語言。它既有高級語言的特點(diǎn),又有匯編語言的特點(diǎn)。它適合作為系統(tǒng)描述語言,既可以用來編寫系統(tǒng)軟件,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序[ 3 ]。

下面應(yīng)用C語言程序利用復(fù)合形法求解二元函數(shù)minF(X)=x12+x22-x1x2-10x1-4x2+60的最優(yōu)解,已知D:g1(X)=x1>=0,g2(X)=x2>=0, g3(X)=6-x1>=0,g4(X)=8-x2>=0,?。簒1∈[0,6],x2∈[0,8],k=4,迭代精度ε=0.001。

三、C語言程序及功能說明如下

#include/*調(diào)用頭文件*/

#include

{printf("This munber is not fit,please input again\n");

i--;

}

}

F[1]=M(x[1][1],x[1][2]);

F[2]=M(x[2][1],x[2][2]);

F[3]=M(x[3][1],x[3][2]);

F[4]=M(x[4][1],x[4][2]);

FH=max(F[4],max(F[3],max(F[1],F(xiàn)[2])));/*尋找壞點(diǎn)*/

FL=min(F[4],min(F[3],min(F[1],F(xiàn)[2])));/*尋找好點(diǎn)*/

loop:for(l=1;l<=4;l++)

if(F[l]==FH)/*判斷第幾個(gè)點(diǎn)是壞點(diǎn)*/

{m=l;

switch(m)

{ case 1:{ XX[1]=x[1][1];XX[2]=x[1][2];

x[1][1]=x[2][1];

x[2][1]=x[3][1];

x[3][1]=x[4][1];

x[1][2]=x[2][2];

x[2][2]=x[3][2];

x[3][2]=x[4][2];break;}

case 2:{ XX[1]=x[2][1];XX[2]=x[2][2];

x[1][1]=x[1][1];

x[2][1]=x[3][1];

x[3][1]=x[4][1];

x[1][2]=x[1][2];

x[2][2]=x[3][2];

x[3][2]=x[4][2];break;}

case 3:{ XX[1]=x[3][1];XX[2]=x[3][2];

x[1][1]=x[1][1];

x[2][1]=x[2][1];

x[3][1]=x[4][1];

x[1][2]=x[1][2];

x[2][2]=x[2][2];

x[3][2]=x[4][2];break;}

case 4:{ XX[1]=x[4][1];XX[2]=x[4][2];

x[1][1]=x[1][1];

x[2][1]=x[2][1];

x[3][1]=x[3][1];

x[1][2]=x[1][2];

x[2][2]=x[2][2];

x[3][2]=x[3][2];break;}

}

}

xC1=ZH1(x[1][1],x[2][1],x[3][1]);/*計(jì)算映射中心*/

xC2=ZH1(x[1][2],x[2][2],x[3][2]);

a=1.3;/*映射中心系數(shù)*/

xR1=xC1+a*(xC1-XX[1]);/*計(jì)算映射點(diǎn)*/

xR2=xC2+a*(xC2-XX[2]);

loop2:if(xR1>6||xR1<0||xR2>8||xR2<0)/*判斷映射點(diǎn)是否在可行域內(nèi)*/

{ loop3:

a=a/2.0;

xR1=xC1+a*(xC1-XX[1]);

xR2=xC2+a*(xC2-XX[2]);

goto loop2;

}

if(M(xR1,xR2){x[4][1]=xR1;

x[4][2]=xR2;}

else goto loop3;

F[1]=M(x[1][1],x[1][2]);

F[2]=M(x[2][1],x[2][2]);

F[3]=M(x[3][1],x[3][2]);

F[4]=M(x[4][1],x[4][2]);

FH=max(F[4],max(F[3],max(F[1],F(xiàn)[2])));

FL=min(F[4],min(F[3],min(F[1],F(xiàn)[2])));

Ff=((1.0/K)*((F[1]-FL)*(F[1]-FL)+(F[2]-FL)*(F[2]-FL)+(F[3]-FL)*(F[3]-FL)+(F[4]-FL)*(F[4]-FL)));

FF=sqrt(Ff);

if(FF>e) goto loop;/*判斷迭代精度是否達(dá)到終止條件*/

else

{ for(i=1;i<=4;i++)

if(FL==F[i])

n=i;

printf("The last four point is\n");/*輸出最后一次迭代的4個(gè)頂點(diǎn) 及目標(biāo)函數(shù)值*/

printf("x1=%f,%f\nx2=%f,%f\nx3=%f,%f\nx4=%f,%f\n",x[1][1],x[1][2],x[2][1],x[2][2],x[3][1],x[3][2],x[4][1],x[4][2]);

printf("F1=%f\nF2=%f\nF3=%f\nF4=%f\nFH=%f\nFL=%f\nFF=%f\n",F(xiàn)[1],F(xiàn)[2],F(xiàn)[3],F(xiàn)[4],F(xiàn)H,F(xiàn)L,F(xiàn)F);

printf("The perfect answer is\n");

printf("X=%f,%f\n",x[n][1],x[n][2]);/*輸出最優(yōu)解*/

printf("Fx=%f\n",F(xiàn)L);

}

}

float M(float a,float b)/*定義目標(biāo)函數(shù)*/

{

float F;

F=a*a+b*b-a*b-10*a-4*b+60;

return(F);

}

float max(float x,float y)/*定義取最大函數(shù)*/

{

return(x>y? x:y);

}

float min(float j,float k)/*定義取最小函數(shù)*/

{

return(j>k? k:j);

}

float ZH1(float x11,float x21,float x31)/*定義取中心點(diǎn)函數(shù)*/

{

float Xr1=(x11+x21+x31)/3;

return(Xr1);

}

float ZH2(float x12,float x22,float x32)

{

float Xr2=(x12+x22+x32)/3;

return(Xr2);

}

輸入四個(gè)點(diǎn)(0,0)、(1,3)、(4,0)、(6,4),輸出最優(yōu)解如圖所示。

四、結(jié)論

通過以上實(shí)例可以看出,基于C語言可以很好實(shí)現(xiàn)優(yōu)化設(shè)計(jì)的算法過程,其效率高,可靠性好,現(xiàn)在有很多成熟的計(jì)算機(jī)程序可以選用,使解決實(shí)際的優(yōu)化問題變的簡易。

參考文獻(xiàn):

[1] 楊義勇.現(xiàn)代機(jī)械設(shè)計(jì)理論與方法[M].北京:清華大學(xué)出版社,2014.

[2] 陳秀寧.機(jī)械優(yōu)化設(shè)計(jì)[M].浙江:浙江大學(xué)出版社,2008.

[3] 譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.

作者簡介:邰園園(1987-),男,江蘇句容人,本科,助理工程師,主要從事機(jī)械設(shè)計(jì)工作。

猜你喜歡
C語言優(yōu)化設(shè)計(jì)
基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
基于C語言的計(jì)算機(jī)軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
C語言程序設(shè)計(jì)課程教學(xué)與學(xué)科專業(yè)相結(jié)合的探索
高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
汽車行李箱蓋鉸鏈機(jī)構(gòu)的分析及優(yōu)化
東林煤礦保護(hù)層開采卸壓瓦斯抽采優(yōu)化設(shè)計(jì)
橋式起重機(jī)主梁結(jié)構(gòu)分析和優(yōu)化設(shè)計(jì)
對無線傳感器網(wǎng)絡(luò)MAC層協(xié)議優(yōu)化的研究與設(shè)計(jì)
科技視界(2016年22期)2016-10-18 15:25:08
基于simulation的醫(yī)用升降椅參數(shù)化設(shè)計(jì)
科技視界(2016年21期)2016-10-17 17:27:09
簡述建筑結(jié)構(gòu)設(shè)計(jì)中的優(yōu)化策略
铜鼓县| 海伦市| 明光市| 津南区| 巴东县| 澜沧| 凭祥市| 西城区| 佛教| 屏南县| 紫阳县| 金昌市| 辛集市| 屯留县| 汽车| 攀枝花市| 华宁县| 扶绥县| 仁化县| 兴宁市| 乌兰浩特市| 安吉县| 丹棱县| 东丽区| 赤壁市| 永宁县| 漳州市| 灵丘县| 拜城县| 宜黄县| 剑阁县| 乐亭县| 图们市| 威海市| 邛崃市| 炉霍县| 息烽县| 安龙县| 岳阳市| 乌兰浩特市| 昌平区|