blueye
2009-02-27, 15:55
这些天一直在关注多目标优化的研究,我编了一个程序,调用matlab的优化工具箱的fminimax函数,结果只要程序一运行matlab就自动关闭了,这是为什么?
下面把程序代码贴出来,请帮忙分析一下。
执行主文件如下:
x=zeros(1,2);
x0=x;
C1=[0.8,-0.74,0.5,-0.2;-1,0.1,0.3,-0.5];
C2=[-0.5,0.2,-0.35,0.4;0.1,0.45,-0.7,-0.61];
X=[-1,-1;-1,1;1,-1;1,1];
Bound_up=[1,1];
Bound_down=[-1,-1];
save C1 C1;
save C2 C2;
save X X;
solver=fminimax(@fun_obj,x0,[],[],[],[],Bound_down,Bound_up,@fun_nonlcon)
下面是目标函数和约束函数的代码:
目标函数:
function y=fun_obj(x)
load X;
load C1;
n=length(C1(:,1));
m=length(x);
m1=length(X);
m2=length(C1(1,:));
if(m~=m1 || m~=m2 || m1~=m2)
exit;
end
cc=1;
y=zeros(2,1);
for jj=1:m
for ii=1:n
y(jj)=y(jj)+C1(1,ii)*sqrt(abs(x-X(ii,:))^2+cc^2);
end
end
约束函数:
function y=fun_nonlcon(x)
load X;
load C2;
n=length(C2(:,1));
m=length(x);
m1=length(X);
m2=length(C2(1,:));
if(m~=m1 || m~m2 || m1~m2)
exit;
end
cc=1;
y=zeros(2,1);
for jj=1:m
for ii=1:n
y(jj)=y(jj)+C2(1,ii)*sqrt(abs(x-X(ii,:))^2+cc^2);
end
end
注,我的机器的cpu是intel的,不是AMD的!
MATLAB自动关闭问题 (http://topic.csdn.net/u/20070927/10/ca2ee7dd-d1f5-473e-8f86-fd4f3f959999.html)
我已经试过这里的方法,不行!
请大虾们给点建议吧,我都快疯了!
下面把程序代码贴出来,请帮忙分析一下。
执行主文件如下:
x=zeros(1,2);
x0=x;
C1=[0.8,-0.74,0.5,-0.2;-1,0.1,0.3,-0.5];
C2=[-0.5,0.2,-0.35,0.4;0.1,0.45,-0.7,-0.61];
X=[-1,-1;-1,1;1,-1;1,1];
Bound_up=[1,1];
Bound_down=[-1,-1];
save C1 C1;
save C2 C2;
save X X;
solver=fminimax(@fun_obj,x0,[],[],[],[],Bound_down,Bound_up,@fun_nonlcon)
下面是目标函数和约束函数的代码:
目标函数:
function y=fun_obj(x)
load X;
load C1;
n=length(C1(:,1));
m=length(x);
m1=length(X);
m2=length(C1(1,:));
if(m~=m1 || m~=m2 || m1~=m2)
exit;
end
cc=1;
y=zeros(2,1);
for jj=1:m
for ii=1:n
y(jj)=y(jj)+C1(1,ii)*sqrt(abs(x-X(ii,:))^2+cc^2);
end
end
约束函数:
function y=fun_nonlcon(x)
load X;
load C2;
n=length(C2(:,1));
m=length(x);
m1=length(X);
m2=length(C2(1,:));
if(m~=m1 || m~m2 || m1~m2)
exit;
end
cc=1;
y=zeros(2,1);
for jj=1:m
for ii=1:n
y(jj)=y(jj)+C2(1,ii)*sqrt(abs(x-X(ii,:))^2+cc^2);
end
end
注,我的机器的cpu是intel的,不是AMD的!
MATLAB自动关闭问题 (http://topic.csdn.net/u/20070927/10/ca2ee7dd-d1f5-473e-8f86-fd4f3f959999.html)
我已经试过这里的方法,不行!
请大虾们给点建议吧,我都快疯了!