优化设计-惩罚函数法程序(c语言)
优化设计-惩罚函数法程序(c语言)
#include
#include
#define m 10
float f(float x[],float p);
void mjtf(int n,float x0[],float h,float s[],float a[],float b[],float p);
void mhjfgf(int n,float a[],float b[],float flag,float x[],float p);
void mbwef(int n,float x0[],float h,float flag,float a[],float b[],float x[],float p);
float max(float l)
{
float resu;
if(l<=0)
resu=0;
else
resu=l*l;
return resu;
}
float f(float x[],float p)
{
float result,t1;
float t2,t3,t4;
t1=(8-x[0]-x[1]);
result=x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60+p*max(t1);
return result;
}
float g(float x[])
{
float re;
re=x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60;
return re;
}
void mjtf(int n,float x0[],float h,float s[],float a[],float b[],float p)
{
int i;
float x1[m],x2[m],x3[m],f1,f2,f3;
for(i=0;i
{
x1[i]=x0[i];
x2[i]=x0[i]+h*s[i];
}
f1=f(x1,p);
f2=f(x2,p);
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]+h*s[i];
f3=f(x3,p);
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]+h*s[i];
f3=f(x3,p);
} /*已完成*/
for(i=0;i
{
if(x1[i]
{
a[i]=x1[i];
b[i]=x3[i];
}
else
{
a[i]=x3[i];
b[i]=x1[i];
}
}
}
void mhjfgf(int n,float a[],float b[],float flag,float x[],float p)
{
int i;
float x1[m],x2[m],f1,f2,sum;
for(i=0;i
x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
f1=f(x1,p);
for(i=0;i
x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
f2=f(x2,p);
do
{
i