优化设计.docx
- 文档编号:6644523
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:14
- 大小:68.93KB
优化设计.docx
《优化设计.docx》由会员分享,可在线阅读,更多相关《优化设计.docx(14页珍藏版)》请在冰豆网上搜索。
优化设计
一、一维优化问题练习题
1、
最优解:
二、无约束优化问题
1、
,
初始点:
最优解:
三、多目标优化问题
1、用线性加权和法求解
加权系数:
最优解:
1、一维优化问题
黄金分割法在C语言中的实现
基本原理:
黄金分割法是通过不断缩短单峰区间的长度来搜索极小点的一种有效方法,它是搜索区间按比例的缩小,通过计算和比较函数值,以确定取舍区间,因按黄金分割原理:
λ=0.618.
源程序:
#include
#include
#include
#definee0.001
floatf(floatx)
{
floaty;
y=x*x-10*x+36;
return(y);
}
floatgold(floata,floatb)
{
floatc,d,n;
inti;
c=a+(b-a)*0.382;
d=a+(b-a)*0.618;
for(i=0;;i++)
{
if(f(c)<=f(d))
{
b=d;
d=c;
c=a+(b-a)*0.382;
}
else
{
a=c;
c=d;
d=a+(b-a)*0.618;
}
if(b-a<=e)
{
n=(a+b)/2;
break;
}
}
return(n);
}
voidmain()
{
floatf(floatx);
floatgold(floata,floatb);
floata,b,t,r;
intk[10];
inti,h;
h=1;k[0]=0;k[1]=1;i=0;
if(f(k[0])>f(k[1]))
{
i=0;
do
{
h=h*2;
i++;
k[i+1]=k[i]+h;
}
while(f(k[i])>f(k[i+1]));
}
else
{
k[1]=0;
i=0;h=-1;k[2]=k[1]+h;
do
{
计算结果:
2、无约束优化问题
梯度法和坐标轮换法在C语言中的实现
(1)梯度法
基本思想:
梯度方向是函数值变化率最大的方向,沿着负梯度方向求最优步长,使函数值下降最多的步长因子,即求单变量极值问题的最优解。
源程序:
#include
#include
#definee0.01
floatf1(floatx1,floatx2)
{
floaty;
y=4*pow(x1-5,2)+pow(x2-6,2);
return(y);
}
floatt1(floatx1,floatx2)
{
floatl1;
l1=(f1(x1+e,x2)-f1(x1,x2))/e;
return(l1);
}
floatt2(floatx1,floatx2)
{
floatl2;
l2=(f1(x1,x2+e)-f1(x1,x2))/e;
return(l2);
}
floatm(floatx1,floatx2)
{
floatmm;
mm=pow((t1(x1,x2)*t1(x1,x2)+t2(x1,x2)*t2(x1,x2)),0.5);
return(mm);
}
floatd(floatx1,floatx2,floatb)
{
floatdd;
dd=(f1(x1-t1(x1,x2)*(b+e),x2-t2(x1,x2)*(b+e))-f1(x1-t1(x1,x2)*b,x2-t2(x1,x2)*b))/e;
return(dd);
}
floatg(floatx1,floatx2,floatb)
{
floatgg;
gg=(d(x1,x2,b+e)-d(x1,x2,b))/e;
return(gg);
}
floatl(floatx1,floatx2,floatb)
{
inti;floatn;
do
{
n=b;
b=b-d(x1,x2,b)/g(x1,x2,b);
}
while(fabs(b-n)<0.001);
return(b);
}
voidmain()
{
inti;floatk;
floatx[3],b;
for(i=1;i<=2;i++)
{
printf("请输入初始点坐标:
x(%d)=",i);
scanf("%f",&x[i]);
}
b=1;
for(i=1;;i++)
{
k=x[1];
x[1]=x[1]-t1(x[1],x[2])*l(x[1],x[2],b);
x[2]=x[2]-t2(x[1],x[2])*l(x[1],x[2],b);
if(m(k,x[2])<0.01)
{
break;
}
}
printf("最优点坐标为(%f,%f)\n",x[1],x[2]);
printf("最优解为%f\n",f1(x[1],x[2]));
}
计算结果:
梯度法的优点是程序简单,每次迭代所需的计算量小,存储量也少。
缺点是收敛速度慢。
(2)坐标轮换法
基本思想:
每次以一个变量的坐标轴作为搜索方向,将n维优化问题转化为一维搜索问题,是一个降维的思想。
源程序:
#include
#include
#definee0.01
floatf2(floatx1,floatx2)
{
floaty;
y=4*pow((x1-5),2)+pow((x2-6),2);
return(y);
}
floatd1(floatx1,floatx2,floatb1)
{
floatdd1;
dd1=(f2(x1+b1+e,x2)-f2(x1+b1,x2))/e;
return(dd1);
}
floate1(floatx1,floatx2,floatb1)
{
floatee1;
ee1=(d1(x1,x2,b1+e)-d1(x1,x2,b1))/e;
return(ee1);
}
floatd2(floatx1,floatx2,floatb2)
{
floatdd2;
dd2=(f2(x1,x2+b2+e)-f2(x1,x2+b2))/e;
return(dd2);
}
floate2(floatx1,floatx2,floatb2)
{
floatee2;
ee2=(d2(x1,x2,b2+e)-d2(x1,x2,b2))/e;
return(ee2);
}
floatl1(floatx1,floatx2,floatb1)
{
floatm;
do
{
m=b1;
b1=b1-d1(x1,x2,b1)/e1(x1,x2,b1);
}
while(fabs(b1-m)<0.01);
return(b1);
}
floatl2(floatx1,floatx2,floatb2)
{
floatm;
do
{
m=b2;
b2=b2-d2(x1,x2,b2)/e2(x1,x2,b2);
}
while(fabs(b2-m)<0.01);
return(b2);
}
voidmain()
{
floatt;
floatx[3];
intn,i,j;
for(i=1;i<=2;i++)
{
printf("请输入初始点坐标:
x(%d)=",i);
scanf("%f",&x[i]);
}
for(j=1;;j++)
{
t=x[1];
x[1]=x[1]+l1(x[1],x[2],1);
x[2]=x[2]+l2(x[1],x[2],1);
if(fabs(x[1]-t)<0.01)
{
break;
}
}
printf("最优点为(%f,%f)\n",x[1],x[2]);
printf("最优解为%f\n",f2(x[1],x[2]));
}
计算结果:
坐标轮换法具有程序简单,易于掌控的优点,但它的计算效率低,因此它虽然步步在登高,但相当于沿两个垂直方向爬山,路途迂回曲折,收敛很慢,因此它适用于维数较低的目标函数求优。
三、多目标优化问题
罚函数法
基本思想:
通过构造罚函数把约束问题转化为一系列无约束最优化问题,用无约束最优化方法求解。
线性加权和法
基本思想:
首先根据各子目标的重要程度给予相应的权数,然后用各子目标函数分别乘以它们各自的权数,再相加即构成统一目标函数。
源程序:
#include
#include
#definee0.01
#definer0.01
floatf1(floatx1,floatx2,floatx3)
{
floaty;
y=pow(x1-1,2)+pow(x2-2,2)+pow(x3-3,2);
return(y);
}
floatf2(floatx1,floatx2,floatx3)
{
floaty;
y=pow(x1,2)+2*pow(x2,2)+3*pow(x3,2);
return(y);
}
floatf3(floatx1,floatx2,floatx3)
{
floatw[3],y;
y=0.36*f1(x1,x2,x3)+0.64*f2(x1,x2,x3);
return(y);
}
floatf(floatx1,floatx2,floatx3)
{
floaty;
y=f3(x1,x2,x3)+r*(1/x1+1/x2+1/x3)+1/r*pow(x1+x2+x3,2);
return(y);
}
floatt1(floatx1,floatx2,floatx3)
{
floatl1;
l1=(f(x1+e,x2,x3)-f(x1,x2,x3))/e;
return(l1);
}
floatt2(floatx1,floatx2,floatx3)
{
floatl2;
l2=(f(x1,x2+e,x3)-f(x1,x2,x3))/e;
return(l2);
}
floatt3(floatx1,floatx2,floatx3)
{
floatl3;
l3=(f(x1,x2,x3+e)-f(x1,x2,x3))/e;
return(l3);
}
floatm(floatx1,floatx2,floatx3)
{
floatmm;
mm=pow((t1(x1,x2,x3)*t1(x1,x2,x3)+t2(x1,x2,x3)*t2(x1,x2,x3)+t3(x1,x2,x3)*t3(x1,x2,x3)),0.5);
return(mm);
}
floatd(floatx1,floatx2,floatx3,floatb)
{
floatdd;
dd=(f(x1-t1(x1,x2,x3)*(b+e),x2-t2(x1,x2,x3)*(b+e),x3-t3(x1,x2,x3)*(b+e))-f(x1-t1(x1,x2,x3)*b,x2-t2(x1,x2,x3)*b,x3-t3(x1,x2,x3)*b))/e;
return(dd);
}
floatg(floatx1,floatx2,floatx3,floatb)
{
floatgg;
gg=(d(x1,x2,x3,b+e)-d(x1,x2,x3,b))/e;
return(gg);
}
floatl(floatx1,floatx2,floatx3,floatb)
{
inti;floatn;
do
{
n=b;
b=b-d(x1,x2,x3,b)/g(x1,x2,x3,b);
}
while(fabs(b-n)<0.01);
return(b);
}
voidmain()
{
inti;floatk,p;
floatx[4],b;
for(i=1;i<=3;i++)
{
printf("请输入初始点坐标:
x(%d)=",i);
scanf("%f",&x[i]);
}
b=1;
for(i=1;;i++)
{
k=x[1];
x[1]=x[1]-t1(x[1],x[2],x[3])*l(x[1],x[2],x[3],b);
p=x[2];
x[2]=x[2]-t2(x[1],x[2],x[3])*l(x[1],x[2],x[3],b);
x[3]=x[3]-t3(x[1],x[2],x[3])*l(x[1],x[2],x[3],b);
if(m(k,p,x[3])<0.01)
{
break;
}
}
printf("最优点坐标为(%f,%f,%f)\n",x[1],x[2],x[3]);
printf("最优解为%f\n",f(x[1],x[2],x[3]));
}
计算结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 设计