benbeny 发表于 2007-4-4 15:12

matlab优化的缺陷!

我最近用matlab作了一个优化的题目,结果我发现给的初值不一样,结果完全不一样,而且相差甚远,因为我优化的是一个角度,相差0.05,角度上就差很多,所以好不容易编程实现了,可是结果却不理想,现在就想问问大家有没有什么好的办法,不用给定初值就可以直接解出最优解?谢谢!

star198311 发表于 2007-4-4 21:51

采用Matlab的优化工具箱作优化问题可以说是一种相对比较省事的办法。
初始的点选取对优化所得结果有很大的影响,因为搜索所得到的结果是局部最优点。
要想得到全局最优节可以尝试去了解一些遗传算法(MATLAB中也有这个工具箱)方面的知识。
想要用编程的方法作优化而不想给出初始收索点好像是不能的。

jli 发表于 2007-4-5 12:55

这是因为你编写的程序是基于梯度,对单峰问题很有用。在处理多参数、多峰问题时,它的收敛情况取决于你的初始点,建议采用遗传或者模拟退伙算法。

Seventy721 发表于 2007-4-8 07:00

把你的优化模型拿出来看看才好说。

star198311 发表于 2007-4-8 17:03

回复 #4 Seventy721 的帖子

我给您个模型,您给看看
min f(x)
s.t g(x)=0
其中
f(x)=4-(x(1)+0.25)^2+(x(1)+0.25)^3+(x(1)+0.25)^4-x(2);
g(x)=norm(x,2)-3;%norm(x,2)表示2范数,也就是到原点的距离,可以理解为约束曲线为一个圆。
怎么得到
f=0.2433
的结果。
谢谢!

Seventy721 发表于 2007-4-9 00:06

你这个问题是高度非线性的,可以用序列二次规划法。首先取个初试点(初试设计),然后在初试点邻域内将原模型的目标化简为二次函数,约束化简为线性函数,用二次规划求解得到最优点x1,然后在x1附近重复上述操作得到x2,直到解收敛。最原始的化简方法是Taylor展开。展开时要计算展开点处的导数,即灵敏度分析。当然你也可以用别的方法。不过这种方法是最普遍的方法。matlab里的SQP就是这样干的。不过matlab程序没有考虑约束函数线性化之后的误差问题,因此对于你这样的高度非线性的约束,步长一定要小。减小步长的方法有很多,最常用的是松弛法,不过这样你就得自己编点程序了。

star198311 发表于 2007-4-9 09:49

回复 #6 Seventy721 的帖子

谢谢!
大体上明白了您的意思。

Seventy721 发表于 2007-4-9 11:08

To:star198311

我补充一下,前面说的针对含有等式和不等式约束的问题。你的问题只有等式约束,可以利用拉格朗日乘子法将等式约束转化到目标函数中去,得到一个无约束的非线性优化问题。然后你可以用很多现成方法求解:牛顿法、共轭梯度法、SQP等。matlab中的优化程序都可以用。你上网搜一下“无约束 非线性 优化方法”看看。

bainhome 发表于 2007-8-24 02:41

软件是死的,人是活的,编程不求变通,死套help,那还不如别学。
仅仅就此问题而言,不是“MATLAB优化的缺陷”,而是人脑思考问题的缺陷罢了。如果真用MATLAB执行,并且只是想要正确结果,没有那么复杂:
MATLAB(Trust-reign-NEWTON SQP-fmincon)
利用循环给随机初值计算,最后找最小值,十次循环基本都可以搜索到楼主提供的值,至于主函数和约束函数,楼主自己去写,应该已经解决,不多说。%% 窗口执行代码
clc
format long
A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];
options=optimset('largescale','off');
for i=1:30
    x0(1)=rand*(-1)^(round(10*rand));
    x0(2)=(-1)^(round(10*rand))*sqrt(9-x0(1)^2);
    =fmincon(@EqnOptMain,x0,A,b,Aeq,beq,lb,ub,@EqnOptSub,options);
    x1(i,:)=x;
    fval1(i)=fval;
end
fmin=min(fval1)1stopt中的麦夸特法(Levenberg-Marquardt) + 通用全局优化法Title "123";
Constant n=2;
Parameters x(1:2);
minFunction 4-(x1+0.25)^2+(x1+0.25)^3+(x1+0.25)^4-x2;
sqrt(x1^2+x2^2)=3;两者的计算结果均相同,都是
fmin =0.244013989410960

[ 本帖最后由 bainhome 于 2007-8-24 02:42 编辑 ]

mjhzhjg 发表于 2007-8-24 19:46

回复 #9 bainhome 的帖子

bainhome真是高手,matlab用好了确实非常厉害,解题思路很重要啊

心灯 发表于 2007-8-24 21:25

回复 #10 mjhzhjg 的帖子

嗯,有时候软件不能直接实现我们的要求,变通一下思路或许就能实现了。 bainhome 的处理方式不错~~~~

dingd 发表于 2007-8-25 20:28

本题可以简单化:将等式约束“sqrt(x1^2+x2^2)=3”变换成“x2=sqrt(9-x1^2)",再代入目标函数,就变为一维无约束优化问题了,很多软件/算法实现起来就容易多了。

lcczx 发表于 2007-9-1 19:29

55555555~都是高人了。。。基本都看不懂。。。看来要多多努力了。。。

pwxscut 发表于 2007-11-1 21:48

用matlab优化工具箱fmincon函数求解

M文件fun.m
function f=fun(x)
f=4-(x(1)+0.25)^2+(x(1)+0.25)^3+(x(1)+0.25)^4-x(2);
M文件mycon.m
function =mycon(x)
c=[];
ceq=norm(x,2)-3;
matlab命令

>> x0=;
>> =fmincon('fun',x0,[],[],[],[],[],[],'mycon')
Warning: Large-scale (trust region) method does not currently solve this type of problem,
using medium-scale (line search) instead.
> In fmincon at 317
Optimization terminated: first-order optimality measure less
than options.TolFun and maximum constraint violation is less
than options.TolCon.

x =

   -1.3503    2.6789


fval =

    0.2440

star198311 发表于 2007-11-2 14:35

是因为你初始点取得比较好。
页: [1] 2
查看完整版本: matlab优化的缺陷!