340440776
2009-09-11, 21:35
我现在做一个非线性规划问题,用fmincon命令做了一下,发现给出的初始向量x0不同时,有时得出的结果会不一样,不知道为什么?
问题: 目标函数是y=3600*0.05*336400000/(3030600-6441.7*x1+1863200000000/x2)+0.03747*x2*x2*x2*0.55/(3600*1000*943.1*943.1*943.1*0.9)
约束有80>=x1-336400000/(1.163*x2)>=60
且140>=x1>=90,8000000>=x2>=1000000.
因为用fmincon命令做出的结果不太真,我就又编了一个循环结构的程序,按步长搜索了一下。源代码如下:
step_a=1;%x(1)的间距是1
step_b=100;%x(2)的间距是100
x1=90:step_a:140;
x2=1000000:step_b:8000000;
for i=1:1:length(x2)
for j=1:1:length(x1)
if(80>=x1(j)-336400000/(1.163*x2(i)) && x1(j)-336400000/(1.163*x2(i))>=60)
y(i,j) =3600*0.05*336400000/(3030600-6441.7*x1(j)+1863200000000/x2(i))+0.03747*x2(i)*x2(i)*x2(i)*0.55/(3600*1000*943.1*943.1*943.1*0.9);
else
y(i,j)=1000999999;%或不满足约束条件,则令y等于一个很大的值,这样在求取y的最小值时,肯定不会取到这些值
end
end
end
min_of_y=min(min(y));%找到了y的最小值
for i=1:1:length(x2)
for j=1:1:length(x1)
if y(i,j)==min_of_y
min_x1=90+(j-1)*step_a;
min_x2=1000000+(i-1)*step_b;
end
end
end
min_x1
min_x2
min_of_y
运行结果是min_x1 =140
min_x2 =2159000
min_of_y =2.0316e+004
这里结果明显不符合80>=x1-336400000/(1.163*x2)>=60这个约束条件。找了好久没有找到原因,请高手指点一下。不胜感激。
问题: 目标函数是y=3600*0.05*336400000/(3030600-6441.7*x1+1863200000000/x2)+0.03747*x2*x2*x2*0.55/(3600*1000*943.1*943.1*943.1*0.9)
约束有80>=x1-336400000/(1.163*x2)>=60
且140>=x1>=90,8000000>=x2>=1000000.
因为用fmincon命令做出的结果不太真,我就又编了一个循环结构的程序,按步长搜索了一下。源代码如下:
step_a=1;%x(1)的间距是1
step_b=100;%x(2)的间距是100
x1=90:step_a:140;
x2=1000000:step_b:8000000;
for i=1:1:length(x2)
for j=1:1:length(x1)
if(80>=x1(j)-336400000/(1.163*x2(i)) && x1(j)-336400000/(1.163*x2(i))>=60)
y(i,j) =3600*0.05*336400000/(3030600-6441.7*x1(j)+1863200000000/x2(i))+0.03747*x2(i)*x2(i)*x2(i)*0.55/(3600*1000*943.1*943.1*943.1*0.9);
else
y(i,j)=1000999999;%或不满足约束条件,则令y等于一个很大的值,这样在求取y的最小值时,肯定不会取到这些值
end
end
end
min_of_y=min(min(y));%找到了y的最小值
for i=1:1:length(x2)
for j=1:1:length(x1)
if y(i,j)==min_of_y
min_x1=90+(j-1)*step_a;
min_x2=1000000+(i-1)*step_b;
end
end
end
min_x1
min_x2
min_of_y
运行结果是min_x1 =140
min_x2 =2159000
min_of_y =2.0316e+004
这里结果明显不符合80>=x1-336400000/(1.163*x2)>=60这个约束条件。找了好久没有找到原因,请高手指点一下。不胜感激。