求约束最优化算法
哪位能给我一个求解约束最优化问题的算法,如梯度投影法,乘子法等的程序,我已经有罚函数法了,需要另外一种算法进行比较,谢谢了。也可发到我的邮箱dyjun888666@163.com 乘子法,网上收集到的一个c程序#include<stdio.h>
#include<math.h>
#defineL10
void FX(int m,int n,float x,float z,float s,float x0)
{int i,j;
for(i=0;i<m;i++) {for(j=0;j<n;j++)
{ x0=x+z*s;}}}
void grad(int m,float input,float x,float g0)
{int i,j;
for(i=0;i<m;i++)
{ for(j=0;j<m;j++) { if(j!=i)
g0=2*input*x+input*x+input;}}}
void qiudao(float input,float s,float x,float a,float b,float *z)
{a=input*s*s+input*s*s+input*s*s;
b=2*input*x*s+2*input*x*s+input*(x*s
+x*s)+input*s+input*s;
a=2*a;*z=-1*b/a;}
void gongetidu(float input,float x)
{int i,j,k=0,stop=0;float s={0};float g0={0},g1={0},a=0,b=0,z=0,w=0;
while(stop==0)
{ grad(2,input,x,g0);
if((g0*g0+g0*g0)<0.000001)
{stop=1;break;}
for(i=0;i<2;i++)
{for(j=0;j<1;j++) {s=-1*g0;}}
qiudao(input,s,x,a,b,&z);
FX(2,1,x,z,s,x);
grad(2,input,x,g1);
w=(g1*g1+g1*g1)/(g0*g0+g0*g0);
for(i=0;i<2;i++)
{for(j=0;j<1;j++){s=-1*g1+w*s;}}
qiudao(input,s,x,a,b,&z);
FX(2,1,x,z,s,x);
k++;
}
}
void main()
{float f={0},x={0};
float r=0.25,a=5,u=0,c=2,e=0.000001,h,h1,h2;
int i,j,k=0,stop=1;
while(stop==1)
{ f=0.5+c/2;f=0.166667+c/2;f=c;f=u-c;
f=u-c;f=(u*u+u*c)/(2*c);h1=x+x-1;
gongetidu(f,x);
if(fabs(x+x-1)<e)stop=0;
h2=x+x-1;
h=h1/h2;
if(h>r) c=a*c;
u=u+c*h2;
k++;}
k--;
printf("k=%d\n",k);
printf("x*=");
{for(i=0;i<2;i++)
{for(j=0;j<1;j++)
printf("%f",x);}
printf(" \n");}
}
求助!
楼主能不能把求解约束最优化问题的算法罚函数法程序发我邮箱啊,谢谢!急用!我的邮箱是:donglei06@163.com
能运行出结果的,小弟将不胜感激!! 原帖由 donglei06 于 2007-5-16 21:38 发表 http://www.chinavib.com/forum/images/common/back.gif
楼主能不能把求解约束最优化问题的算法罚函数法程序发我邮箱啊,谢谢!
急用!我的邮箱是:donglei06@163.com
能运行出结果的,小弟将不胜感激!!
搜索本版
页:
[1]