24小时热门版块排行榜    

查看: 1589  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

qinzhen724

新虫 (小有名气)

[求助] Matlab中用fmincon求解最小值问题,调试了好多次,一直找不到可行解,求大神指导已有2人参与

用fmincon求解最小值问题(1个目标函数、9个变量、6个线性等式约束),一直都是No feasible solution,不知道本身无解还是什么问题。

x0=[4000;4000;2000;500;100;10;10;10;10];
A=[]; b=[];
Aeq=[-88.840439250000020,    20.679950666666663,   -2.158236236666667e+02,    -3.601469919166667e+02,   -36.694763666666690,   21.462819666666660,   -13.261596999999995,   7.477251833333336,   -1.023975406666667e+02;  
    0.012,    0,      0,     0.012,  0.012,    0,      0,      0,    0.012;  
    0,      0.002,  0.002,     0,    0.004,    0,    0.003,  0.002,    0;      
    0.016,    0,    0.016,   0.032,    0,      0,      0,      0,    0.016;            
    0,        0,      0,       0,      0,    0.028,  0.014,    0,      0;  
    0,        0,      0,       0,      0,      0,      0,   0.032,   0.032]
beq=[4588048.12066667;
         171.600000000000;
         21.5666666666667;
         241.933333333333;
         2.10000000000000;
         0.600000000000000]
VLB=[0.001;0.001;0.001;0.001;0.001;0.001;0.001;0.001;0.001];
VUB=[6601.833333;4978.305556;4978.305556;5172.684028;2489.152778;34.625;69.25;8.65625;8.65625];
options = optimoptions(@fmincon,'Algorithm','interior-point','MaxIter',5000);
[x,fval,exitflag,output]=fmincon(@Gibbsfun,x0,A,b,Aeq,beq,VLB,VUB,[],options)

%%目标函数为myobjfun
function G=myobjfun(x)
    deltaG1=-8.841665127258336e+04; deltaG2=-1.661952727160000e+05;
    deltaG3=5.504948170966668e+04; deltaG4=-1.666712325249982e+03;
    deltaG5=1.092642304030001e+05; deltaG6=-2.281491138470000e+05;
    deltaG7=1.169078584030000e+05; deltaG8=1.087887085851667e+05;
    deltaG9=4.941138012599998e+04;
G=x(1)*(deltaG1+8314*log(x(1)/sum(x)*1.2))+x(2)*(deltaG2+8314*log(x(2)/sum(x)*1.2))...
+x(3)*(deltaG3+8314*log(x(3)/sum(x)*1.2))+x(4)*(deltaG4+8314*log(x(4)/sum(x)*1.2))...
+x(5)*(deltaG5+8314*log(x(5)/sum(x)*1.2))+x(6)*(deltaG6+8314*log(x(6)/sum(x)*1.2))...
+x(7)*(deltaG7+8314*log(x(7)/sum(x)*1.2))+x(8)*(deltaG8+8314*log(x(8)/sum(x)*1.2))...
+x(9)*(deltaG9+8314*log(x(9)/sum(x)*1.2))

计算结果如下:
No feasible solution found.
fmincon stopped because the size of the current step is less than
the default value of the step size tolerance but constraints are not
satisfied to within the default value of the constraint tolerance.

<stopping criteria details>
x =
   1.0e+03 *

   4.666024308553983
   3.857233354391819
   2.387214185792911
   0.000001000000005
   0.000001000000001
   0.015465337002847
   0.000001000000003
   0.008656249999525
   0.006364985001793

fval =
    -1.006342210855910e+09

exitflag =
    -2

output =

         iterations: 70
          funcCount: 710
    constrviolation: 5.438285104570996e+06
           stepsize: 9.313859771460607e-10
          algorithm: 'interior-point'
      firstorderopt: 0.043644013275751
       cgiterations: 76
            message: 'No feasible solution found.
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wang_chuan

银虫 (正式写手)

【答案】应助回帖

你采用的是MATLAB内置的寻优方法,内点法,此类方法要求被求对象导数存在且容易求得,你的问题不一定符合这个要求。也就是说,你待求解的问题非线性强,不能用数学方法来做,或找不到可行解。建议用粒子群算法自己写一下程序,几十行定能求解出来。
4楼2016-01-27 22:30:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

qinzhen724

新虫 (小有名气)

引用回帖:
2楼: Originally posted by dingd at 2016-01-22 20:36:15
除了Matlab代码,把原问题用文本和图片描述下

谢谢你的回答。这就是一个简单气化炉的吉布斯模型的求解过程,等式约束是根据质量守恒和能量守恒得出,因为建模过程涉及不少物理化学的参数,不太好描述、
3楼2016-01-27 09:10:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qinzhen724

新虫 (小有名气)

引用回帖:
4楼: Originally posted by wang_chuan at 2016-01-27 22:30:02
你采用的是MATLAB内置的寻优方法,内点法,此类方法要求被求对象导数存在且容易求得,你的问题不一定符合这个要求。也就是说,你待求解的问题非线性强,不能用数学方法来做,或找不到可行解。建议用粒子群算法自己写 ...

好的,我试试,谢谢
5楼2016-02-01 23:25:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见