- 积分
- 0
- 注册时间
- 2009-4-27
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 ljelly 于 2009-4-28 14:39 编辑
利用Matlab编程采用模拟退火算法求解一个双层规划时遇到了点问题,不知道程序应当怎么改,请高手指教呀,先谢谢了!
程序如下:
>> clear
%模拟退火算法解双层规划
x0=0;T=100;
x=x0;
y=0;
f=F(x,y);
X=x0;X0=x0;Xm=X;Fm=f;k=0;
while k<=100
u=unifrnd(0,1);
Z=(1/(u^2)-1)*T;
Y0=0.5*(X+X0)+Z;
if Y0>=0&Y0<=15
Y=Y0;
else
Y=fminbnd(fu(x,Y0),0,15);
end
y=fmincon(G(x,z),0,0,sqrt(x),c(x,z));
y1=fmincon(G(Y,z),0,0,sqrt(Y),c(Y,z));
f=F(Y,y1);
r=unifrnd(0,1);
p=min(1,exp((F(X,y)-f)/T));
if r<=p
X=Y;X0=Y0;
f1=f;
end
if f1<Fm
Xm=X;Fm=f1;
end
T=T/(k+1)^2;
k=k+1;
end
Xm,y,Fm
%辅助规划目标函数
function fun = fu(x,y)
fun=0.5*(x-y)^2;
%上层规划目标函数
function fun1 = F(x,y)
fun1=x^2+(y-1)^2;
%下层规划目标函数
function fun2 = G(x,y)
fun2=(x+2*y-30)^2;
%一个约束条件函数
function fun3=c(x,y)
fun3=x+y^2-20;
出现下面的错误提示:
??? Error using ==> fcnchk at 105
FUN must be a function, a valid string expression,
or an inline function object.
Error in ==> fminbnd at 178
funfcn = fcnchk(funfcn,length(varargin)); |
|