sway9821205 发表于 2007-9-30 13:58

fmincon函数运行结果出现虚数如何解决

本人在用fmincon函数进行求解有约束非线性优化问题时,运算结果出现虚数,导致迭代无法进行下去,想问问大家这是什么原因造成的,谢谢
下面是运行结果:

f =
9.969295967788237e+003



max
Directional
First-order

Iter F-count
f(x)
constraint
Step-size
derivative
optimality Procedure

f =
9.969295967788237e+003
…………
f =


5.727231211607951e+003 +8.476203429955743e+002i
…………

f =
5.727231211607951e+003 +8.476203429955743e+002i


1
152
5727.23
1.695e+004
0.125
-4.5e+004
3.54e+003
infeasible

[ 本帖最后由 eight 于 2007-9-30 15:00 编辑 ]

xjzuo 发表于 2007-10-1 17:20

问题及处理贴出来看看.

sway9821205 发表于 2007-10-1 17:49

恕我较笨,没弄懂楼上的意思。只能再简单复述一遍
下面是目标函数f

f=e(1)*(a(1)*(x(55)^b1(1))+a(2)*(x(56)^b1(2))+a(3)*(x(57)^b1(3))+a(4)*((x(58)*s(19))^b1(4))+a(5)*((x(59)*s(19))^b1(5))+a(6)*(x(62)^b1(6)))+t*e(2)*(c1(1)*(x(55)^d(1))+c1(2)*(x(56)^d(2))+c1(3)*(x(57)^d(3))+c1(4)*((x(58)*s(19))^d(4))+c1(5)*((x(59)*s(19))^d(5))+c1(6)*(x(62)^d(6)))
其实基本的格式就是a*X^b

运行程序以后,只进行了一次计算,从上面可以看出Hession矩阵更新信息是infeasible,得出的目标值是虚数,没有错误警告,这是什么原因造成的呢?

===============================
原问题用word上传一下,以便于判断.
如果不涉及机密的话,你的运行代码也可以贴一下.
By xjzuo
===============================

[ 本帖最后由 xjzuo 于 2007-10-1 17:59 编辑 ]

sway9821205 发表于 2007-10-3 12:41

谢谢xjzuo,具体内容我已经上传到附件里,内有代码和问题

xjzuo 发表于 2007-10-3 15:49

将公式贴一下(目标函数及约束函数),虽然我已经大概地了解了你的问题.
如果你输入的目标函数及约束函数没有问题,我想 --- 'largescale','off'--- 这一设置应该去掉.
你试试看.

-----至于初值的问题,诚如你所言,有时候的确需要凭经验猜一个较好的初值,或者多次试探才可以收敛到理想解.

[ 本帖最后由 xjzuo 于 2007-10-3 16:03 编辑 ]

sway9821205 发表于 2007-10-3 18:51

去掉设置后,仍然为虚数,但出现下列警告
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
看来必须用中型算法
目标函数及约束函数在所传附件里面有,在design.m后面

xjzuo 发表于 2007-10-3 21:40

我的意思是原始的"公式"(目的是想检查一下你写得是否正确),而不是你已经写好的Matlab语言形式.

---Matlab既然给出了提示,那说明中型算法是合适的.

对于你的这个问题,我只能说下面一些话:
%%%=======================================%%%
1. 你的程序存在的问题:X0注意大小写一致,包括调用fmincon时的X0;
b可以写为:b(1)=60;b(2)=15;b(3)=8;b(4)=1.5;

2.这个问题用1stOpt2.0应该很容易解决,不过我手头只有1.5,
而且将这么多变量和参量的括号去掉(格式要求)也是一件相当麻烦(耗时)的事情。
看来对于这个问题,我只能给你推荐一个可能解决问题的软件,关键还是靠你自己想办法找到它了。

3.对于用Matlab求解,如果写入目标函数和约束函数时没有出错的话,应该是模型合不合理,或者初值是否恰当的问题了。

sway9821205 发表于 2007-10-4 15:15

很是感谢xjzuo的耐心解答,对于我这样一个新手来说,能有人这么耐心的指导真的很感动
1 您说大小写问题我注意到了,程序里面存在一些这方面的错误,经改正以后,重新演算后,多算了几次迭代,但仍然为虚数,但中间信息里面Procedure的值变为Hessian not updated
2 您说的软件我不清楚,是用matlab编的么?我想如果最后不行的话,我只能用这个软件了
3 你的意思是看原始文件,这个我才明白,不好意思啊,我现在把原始文件传到附件里,如果有时间的话可以去看看。
谢谢

sway9821205 发表于 2007-10-4 15:59

刚了解了一些1stOpt软件,功能好像很强大,而且不需要对初值有要求,我也下了一个1.5版本的,我想问一下,这与2.0有什么区别,为什么一定要用1stOpt2.0版本?

pchl 发表于 2007-12-5 15:48

请问你的问题解决了吗?我也很关心,我在优化的过程中也遇到了同样的问题
页: [1]
查看完整版本: fmincon函数运行结果出现虚数如何解决