机械优化设计惩罚函数内点法.doc
- 文档编号:8455611
- 上传时间:2023-05-13
- 格式:DOC
- 页数:6
- 大小:33KB
机械优化设计惩罚函数内点法.doc
《机械优化设计惩罚函数内点法.doc》由会员分享,可在线阅读,更多相关《机械优化设计惩罚函数内点法.doc(6页珍藏版)》请在冰点文库上搜索。
#include
#include
#definem12
doublef(doublex[],doubler);
voidjintuifa(doubleab[m][m],intn,doublex0[],doubleh,intij,doublea[],doubleb[],doubler0);
voidhongjinfa(intn,doublea[],doubleb[],doubleflag,doublex[],doubler0);
voidbaoweifa(intn,doublex0[],doubleh,doubleflag,doublea[],doubleb[],doublex[],doubler0);
doublefahansu(doublett)
{
doublety;
if(tt<0)ty=-tt;elsety=0;
returnty;
}
doubleyuanhansu(doublex[])
{
doubles;
//s=x[0]*x[0]+x[1]*x[1];
s=x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[3]*x[3];
returns;
}
doublef(doublex[],doubler)
{
doubles,t,t2;
//t=1-x[0];
t=1-x[0];t2=2-x[1];
//s=yuanhansu(x)-r*log(fahansu(t));
s=yuanhansu(x)-r*log(fahansu(t))-r*log(fahansu(t2));
returns;
}
voidjintuifa(doubleab[m][m],intn,doublex0[],doubleh,intij,doublea[],doubleb[],doubler0)
{
inti,j,z;
doublex1[m],x2[m],x3[m],f1,f2,f3;
doubles[m];
for(i=0;i { s[i]=ab[i][ij]; } for(i=0;i { x1[i]=x0[i]; x2[i]=x0[i]+(double)h*s[i]; } f1=f(x1,r0); f2=f(x2,r0); if(f2>=f1) { h=(-1)*h; for(i=0;i x3[i]=x1[i]; f3=f1; for(i=0;i x1[i]=x2[i]; f1=f2; for(i=0;i x2[i]=x3[i]; f2=f3; } for(i=0;i x3[i]=x2[i]+(double)h*s[i]; f3=f(x3,r0); while(f3 { h=2*h; for(i=0;i x1[i]=x2[i]; f1=f2; for(i=0;i x2[i]=x3[i]; f2=f3; for(i=0;i x3[i]=x2[i]+(double)h*s[i]; f3=f(x3,r0); } for(i=0;i { if(x1[i] { a[i]=x1[i]; b[i]=x3[i]; } else { a[i]=x3[i]; b[i]=x1[i]; } } } voidhongjinfa(intn,doublea[],doubleb[],doubleflag,doublex[],doubler0) { inti; doublex1[m],x2[m],f1,f2; while (1) { for(i=0;i x1[i]=b[i]; f1=f(x1,r0); for(i=0;i x2[i]=a[i]; f2=f(x2,r0); if(fabs((f2-f1)/f2)<=flag) { for(i=0;i x[i]=(double)(b[i]+a[i])/2.0; break; } else { for(i=0;i x1[i]=b[i]-(double)0.618*(b[i]-a[i]); for(i=0;i x2[i]=a[i]+(double)0.618*(b[i]-a[i]); if(f(x1,r0)>f(x2,r0)) for(i=0;i a[i]=x1[i]; else for(i=0;i b[i]=x2[i]; } } } voidbaoweifa(intn,doublex0[],doubleh,doubleflag,doublea[],doubleb[],doublex[],doubler0) { inti,j,k,r,sum,p,e; doublex1[m],x2[m],abc[m],kr[m],f0,f1,f2,fn[m],c[m],q,wo; k=0; doubleab[m][m]; for(i=0;i { for(j=0;j { if(i==j) ab[i][j]=1; else ab[i][j]=0; } } while (1) { wo=f(x0,r0); for(p=0;p { q=f(x0,r0); jintuifa(ab,n,x0,h,p,a,b,r0); hongjinfa(n,a,b,flag,x1,r0); for(e=0;e { x0[e]=x1[e]; } fn[p]=(double)(q-f(x1,r0)); } k=k+1; for(i=0;i x2[i]=(double)2*x1[i]-x0[i]; for(i=0;i c[i]=(double)x1[i]-x0[i]; r=0; for(i=0;i { if(fn[0]<=fn[i]) { fn[0]=fn[i]; r=i; } } f0=f(x0,r0); f1=f(x1,r0); f2=f(x2,r0); if(f2>=f0||((double)f0-(double)2*f1+(double)f2)*((double)f0-(double)f1-(double)fn[0])*((double)f0-(double)f1-(double)fn[0])>=0.5*fn[0]*(double)(f0-f2)*(double)(f0-f2)) { if(f1 for(i=0;i x0[i]=x1[i]; else for(i=0;i x0[i]=x2[i]; } else { intij; ij=n-1; for(i=0;i kr[i]=x1[i]; for(i=0;i { for(j=0;j { if(j>=r) ab[i][j]=ab[i][j+1]; } ab[i][n-1]=c[i]; } jintuifa(ab,n,kr,h,ij,a,b,r0); hongjinfa(n,a,b,flag,x1,r0); for(i=0;i x0[i]=x1[i]; } if((fabs(f(x0,r0)-wo))/f(x0,r0)<=flag) break; } for(i=0;i x[i]=x0[i]; } intmain() { intv,i,n; doubleh,flag,x0[m],a[m],b[m],x[m]; doublefom,fxo,c,r0; c=0.5; r0=100.0; fom=100; printf("请输入维数: \n"); scanf("%d",&n); printf("请输入初始点: "); for(i=0;i { printf("\nx0[%d]=",i); scanf("%lf",&x0[i]); } printf("\n请输入精度: \n"); scanf("%lf",&flag); do { h=1.0; baoweifa(n,x0,h,flag,a,b,x,r0); fxo=f(x,r0); if(fabs(fom-fxo)>flag) {fom=fxo; r0=c*r0; for(v=0;v x0[v]=x[v]; } else {printf("输出最优点及其目标函数值: \n"); for(i=0;i printf("x[%d]=%lf\n",i,x[i]); printf("\n极小值为: \n%lf\n",yuanhansu(x)); return0; } }while (1); } 浙江理工大学2011326690223赵志伟机控学院
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 惩罚 函数 内点法