整理现代设计黄金分割法复合型法程序标注文档格式.docx
《整理现代设计黄金分割法复合型法程序标注文档格式.docx》由会员分享,可在线阅读,更多相关《整理现代设计黄金分割法复合型法程序标注文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
a[0]=a[1];
f[0]=f[1];
}//大于预定精度时,修改步长,反向搜索
else{if(ia==1)return;
h=h/2;
ia=1;
}
}//满足精度时,缩短步长
//如果步长缩短后,还不满足,将返回。
造成a[2]的值不确定
{a[2]=a[1]+h;
f[2]=function(a[2]);
if(f[2]>
f[1])break;
h=2*h;
//加大步长
a[0]=a[1];
a[1]=a[2];
f[1]=f[2];
}//确定另一端点
if(a[0]>
a[2])
{a1=a[0];
f1=f[0];
a[0]=a[2];
f[0]=f[2];
a[2]=a1;
f[2]=f1;
}//将单峰区间右端点值存入a[2]中,左端点存入a[0]中
return;
/*********进退法确定单峰区间********/
floatgold(float*ff)
{
floata1[3],f1[3],a[4],f[4];
floataa;
inti;
finding(a1,f1);
a[0]=a1[0];
f[0]=f1[0];
a[3]=a1[2];
f[3]=f1[2];
a[1]=a[0]+0.382*(a[3]-a[0]);
//取点x1
a[2]=a[0]+0.618*(a[3]-a[0]);
//取点x2
//求F(x1)
//求F(x2)
if(f[1]>
=f[2])
}//F(x1)>
F(x2),将x2赋值给x1.另求x2
else
{
a[3]=a[2];
f[3]=f[2];
a[2]=a[1];
f[2]=f[1];
if((a[3]-a[0])<
e)
aa=(a[1]+a[2])/2;
*ff=function(aa);
break;
}//判断两点间的精度。
符合,返回单峰区间中间值
return(aa);
/*********黄金分割算法求最小值**********/
voidmain()
{
floatxx,ff;
xx=gold(&
ff);
printf("
优化结果是:
\n"
);
\n\tx*=%f\n\tf*=%f"
xx,ff);
getch();
//等待输入
公式二
y=pow(x,4)-5*pow(x,3)+4*pow(x,2)-6*x+60;
公式三
y=pow(x-2,2)*(x+1);
复合型法
公式一:
stdlib.h"
#defineE10.001
#defineep0.00001
#definen4
#definek4
doubleaf;
inti,j;
doubleX0[n],XX[n],X[k][n],FF[k];
doublea[n],b[n];
doublerm=2657863.0;
//********定义全局变量及宏定义***************//
doubleF(doubleC[n])
doubleF;
F=pow(C[0]-2,2)+pow(C[1]-1,2);
returnF;
//************目标函数求值****************//
intcons(doubleD[n])
if((D[0]>
=-5)&
&
(D[1]>
(D[0]<
=6)&
(D[1]<
=8)&
((D[1]-D[0]*D[0])>
=0)&
((2-D[0]-D[1])>
=0))
return1;
//满足返回1、为真
else
return0;
//不满足返回0、为假
//**********约束条件判断**************//
voidbou()
a[0]=-5;
b[0]=6;
a[1]=-5;
b[1]=8;
//************自变量取值范围*************//
doubler()
doubler1,r2,r3,rr;
r1=pow(2,35);
r2=pow(2,36);
r3=pow(2,37);
rm=5*rm;
if(rm>
=r3){rm=rm-r3;
=r2){rm=rm-r2;
=r1){rm=rm-r1;
rr=rm/r1;
returnrr;
//**********产生伪随机数rr*************//
voidproduce(doubleA[n],doubleB[n])
intjj;
doubleS;
sl:
i<
n;
S=r();
XX[i]=A[i]+S*(B[i]-A[i]);
}//产生一个新映射点
if(cons(XX)==0)
{gotosl;
}//新映射点不满足,跳到s1
X[0][i]=XX[i];
}//满足,储存可行点
for(j=1;
j<
k;
j++)
S=r();
X[j][i]=A[i]+S*(B[i]-A[i]);
}//产生K-1个映射点
X0[i]=0;
for(jj=1;
jj<
j+1;
jj++)
{
X0[i]+=X[jj][i];
}
X0[i]=(1/j)*(X0[i]);
}//分别求1.2…K-1点的中点坐标
if(cons(X0)==0)
gotosl;
}//中心点不可行,跳到s1.重新产生映射点
//粗略检查可行域是否为凹区间
{XX[i]=X[j][i];
while(cons(XX)==0)
for(i=0;
X[j][i]=X0[i]+0.5*(X[j][i]-X0[i]);
XX[i]=X[j][i];
}//映射点不可行,向中心点靠拢
//************生成K个可行点******************//
main()
doubleEE,Xc[n],Xh[n],Xg[n],X1[n],Xr[n],Xs[n],w;
intl,lp,lp1;
bou();
s111:
produce(a,b);
//产生K个可行点
/*******************************/
s222:
for(j=0;
FF[j]=F(XX);
for(l=0;
l<
k-1;
l++)
for(lp=0;
lp<
lp++)
lp1=lp+1;
if(FF[lp]<
FF[lp1])
w=FF[lp];
FF[lp]=FF[lp1];
FF[lp1]=w;
for(i=0;
{
XX[i]=X[lp][i];
X[lp][i]=X[lp1][i];
X[lp1][i]=XX[i];
}
/*********冒泡排序·
K个点函数值降序排列***********/
for(i=0;
Xh[i]=X[0][i];
Xg[i]=X[1][i];
X1[i]=X[k-1][i];
}//定义最坏点、次坏点、最优点
Xs[i]=0;
for(j=0;
Xs[i]+=X[j][i];
Xs[i]=1/(k+0.0)*Xs[i];
}//求K个点的中心点坐标
EE=0;
EE+=pow((FF[j]-F(Xs)),2);
EE=pow((1/(k+0.0)*EE),0.5);
//k+0.0,数据类型转化为浮点型
if(EE<
=E1)
gotos333;
}//满足精度,跳到s333
/************终止条件判断***************/
Xc[i]=0;
for(j=1;
Xc[i]+=X[j][i];
Xc[i]=1/(k-1.0)*Xc[i];
/***********求K-1个点中心点坐标***************/
if(cons(Xc)==1)
af=1.3;
ss:
Xr[i]=Xc[i]+af*(Xc[i]-Xh[i]);
}//取新映射点
if(cons(Xr)==1)
if(F(Xr)>
=F(Xh))
if(af<
=ep)
Xh[i]=Xg[i];
//用次坏点代替最坏点
af=1.3;
gotoss;
else
{af=1/2.0*af;
}//映射系数足够大,继续缩小
X[0][i]=Xr[i];
gotos222;
{af=1/2.0*af;
}//缩小映射系数,跳到ss
if(X1[i]<
Xc[i])
{a[i]=X1[i];
b[i]=Xc[i];
{a[i]=Xc[i];
b[i]=X1[i];
gotos111;
}//新映射点不可行,跳到s111
/***********求下一个可行点**************/
s333:
printf("
F(Xmin)=%f\n"
F(X1));
\nTheX%dis%f."
i,X1[i]);
}
公式二:
#definek6
F=100*pow(C[1]-C[0],2)+pow(1-C[0],2)+90*pow(C[3]-pow(C[2],2),2)+pow(1-C[2],2)+10*(pow(C[0]-1,2)+pow(C[3]-1,2))+19.8*(C[1]-1)*(C[3]-1);
=-10)&
(D[2]>
(D[3]>
=10)&
(D[2]<
(D[3]<
=10))
a[0]=-10;
b[0]=10;
a[1]=-10;
b[1]=10;
a[2]=-10;
b[2]=10;
a[3]=-10;
b[3]=10;
公式三:
(6)生态保护措施能否有效预防和控制生态破坏。
#definen2
(2)辨识和分析评价对象可能存在的各种危险、有害因素,分析危险、有害因素发生作用的途径及其变化规律。
(五)安全预评价方法doubleaf;
(1)非煤矿矿山的建设项目(注:
对煤矿建设项目有单独特别规定);
1.法律doublea[n],b[n];
(二)安全预评价范围doubleF(doubleC[n])
F=pow(C[0],2)+pow(C[1],2)-C[0]*C[1]-10*C[0]-4*C[1]+60;
为了有别于传统的忽视环境价值的理论和方法,环境经济学家把环境的价值称为总经济价值(TEV),包括环境的使用价值和非使用价值两个部分。
8.编制安全预评价报告if((D[0]>
(6-D[0]>
(8-D[1]>
=0))
3)规划实施的经济效益、社会效益与环境效益之间以及当前利益与长远利益之间的关系。
(4)化工、冶金、有色、建材、机械、轻工、纺织、烟草、商贸、军工、公路、水运、轨道交通、电力等行业的国家和省级重点建设项目;
a[1]=0;