![]() |
求教:非线性规划问题(含源代码)
我现在做一个非线性规划问题,用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这个约束条件。找了好久没有找到原因,请高手指点一下。不胜感激。 |
所有时间均为北京时间。现在的时间是 13:43。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.