声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4590|回复: 16

matlab优化的缺陷!

[复制链接]
发表于 2007-4-4 15:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

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

评分

1

查看全部评分

发表于 2007-4-5 12:55 | 显示全部楼层
这是因为你编写的程序是基于梯度,对单峰问题很有用。在处理多参数、多峰问题时,它的收敛情况取决于你的初始点,建议采用遗传或者模拟退伙算法。

评分

1

查看全部评分

发表于 2007-4-8 07:00 | 显示全部楼层
把你的优化模型拿出来看看才好说。
发表于 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
的结果。
谢谢!
发表于 2007-4-9 00:06 | 显示全部楼层
你这个问题是高度非线性的,可以用序列二次规划法。首先取个初试点(初试设计),然后在初试点邻域内将原模型的目标化简为二次函数,约束化简为线性函数,用二次规划求解得到最优点x1,然后在x1附近重复上述操作得到x2,直到解收敛。最原始的化简方法是Taylor展开。展开时要计算展开点处的导数,即灵敏度分析。当然你也可以用别的方法。不过这种方法是最普遍的方法。matlab里的SQP就是这样干的。不过matlab程序没有考虑约束函数线性化之后的误差问题,因此对于你这样的高度非线性的约束,步长一定要小。减小步长的方法有很多,最常用的是松弛法,不过这样你就得自己编点程序了。

评分

1

查看全部评分

发表于 2007-4-9 09:49 | 显示全部楼层

回复 #6 Seventy721 的帖子

谢谢!
大体上明白了您的意思。
发表于 2007-4-9 11:08 | 显示全部楼层
To:star198311

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

评分

1

查看全部评分

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

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

评分

1

查看全部评分

发表于 2007-8-24 19:46 | 显示全部楼层

回复 #9 bainhome 的帖子

bainhome真是高手,matlab用好了确实非常厉害,解题思路很重要啊
发表于 2007-8-24 21:25 | 显示全部楼层

回复 #10 mjhzhjg 的帖子

嗯,有时候软件不能直接实现我们的要求,变通一下思路或许就能实现了。 bainhome 的处理方式不错~~~~
发表于 2007-8-25 20:28 | 显示全部楼层
本题可以简单化:将等式约束“sqrt(x1^2+x2^2)=3”变换成“x2=sqrt(9-x1^2)",再代入目标函数,就变为一维无约束优化问题了,很多软件/算法实现起来就容易多了。

评分

1

查看全部评分

发表于 2007-9-1 19:29 | 显示全部楼层
55555555~都是高人了。。。基本都看不懂。。。看来要多多努力了。。。
发表于 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 [c,ceq]=mycon(x)
c=[];
ceq=norm(x,2)-3;
matlab命令

>> x0=[1,1];
>> [x,fval]=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
发表于 2007-11-2 14:35 | 显示全部楼层
是因为你初始点取得比较好。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-7-9 08:34 , Processed in 0.077899 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表