找回密码
 注册
Simdroid-非首页
查看: 153|回复: 12

非线性优化

[复制链接]
发表于 2009-4-12 14:46:57 | 显示全部楼层 |阅读模式 来自 北京
D=111;D3=240;D4=97;D5=111;
%a、b、c为变量;

k1 = { D4+D3*cos(a+b+c) }   *  sin(a+c)  *  sin(a+b+c);
k2 = D * { sin(a)*sin(a+c) + sin(c) * sin(a+b+c) * cos(a+b+c) +sin(a) * sin(b) * cos(a+b+c) };
k3 = D5 * { sin(a+c) * sin(a+c) +sin(b) * sin(a+c) * cos(a+b+c)};
k4 = sin(a+c) * sin(a+b+c) * sin(a+b+c);

优化目标为: min R= (k1+k2+k3)/k4;
其中约束条件是:a>0,b>0,c>0,a+b+c=p,其中p为一常数,p<pi/2,如可取p=pi/3

那么如何求取这个高度非线性最小值问题的解呢?试了下解析法,好像很复杂。

麻烦各位高手指点一二,小女子感激不尽
发表于 2009-4-12 15:10:58 | 显示全部楼层 来自 宁夏银川
Simdroid开发平台
拿1stopt计算了一下:
目标函数值(最小): -1.54527844315048E30
a: 3.12836329813754
b: 9.6560978643132E-19
c: 0.0132389823315218

约束函数
   1: a+b+c-(1.0471975511966) = 2.094404729

====== 计算结束 ======
如果你的优化参数是有意义的,这个解答个人感觉不是理想解啊

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-12 15:12:09 | 显示全部楼层 来自 宁夏银川
而且你的约束条件总是不能很好的满足啊!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-12 15:32:11 | 显示全部楼层 来自 北京
多谢您的回复。您给出的这个解我不知道您的p取的多少。当p取无穷时,R的值理论上也为无穷。所以这里我给出了一个pi/3的值。因为这个问题与实际有关。所以当p=pi/3时,应该R的值不会过大。希望能和您交流一下。感激不尽。
回复 不支持

使用道具 举报

发表于 2009-4-12 15:59:37 | 显示全部楼层 来自 宁夏银川
我的这个p值取的是p=pi/3=1.0471975511966,还有你的这个R值代表什么啊!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-12 16:13:53 | 显示全部楼层 来自 北京
但是好像结果约束条件不满足啊a<p,我的R代表一种最小的转弯半径
回复 不支持

使用道具 举报

发表于 2009-4-12 16:20:03 | 显示全部楼层 来自 宁夏银川
目标函数值(最大): 0.00264032135300125
a: 4.48273214156277E-14
b: 1.04719755119667
c: 3.60838399031071E-14

约束函数
   1: a+b+c-(1.0471975511966) = 1.52322599E-13
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-12 16:22:19 | 显示全部楼层 来自 北京
这个只可能不对。我不知道为什么最终求的a、b、c的值都没法满足约束条件呢?
回复 不支持

使用道具 举报

发表于 2009-4-12 16:22:47 | 显示全部楼层 来自 宁夏银川
这是代码:
Constant D=111,D3=240,D4=97,D5=111;
Constant p=pi/3;
Parameters a[0,],b[0,],c[0,];
ConstStr k1=(D4+D3*cos(a+b+c))*sin(a+c)*sin(a+b+c);
ConstStr k2=D*(sin(a)*sin(a+c)+sin(c)*sin(a+b+c)*cos(a+b+c)+sin(a)*sin(b)*cos(a+b+c));
ConstStr k3=D5*(sin(a+c)*sin(a+c)+sin(b)*sin(a+c)*cos(a+b+c));
ConstStr k4=sin(a+c)*sin(a+b+c)*sin(a+b+c);
MaxFunction k4/(k1+k2+k3);
             a+b+c=p;
这里将 (k1+k2+k3)/k4最小,变换了一下为k4/(k1+k2+k3)求最大值,可得到较为稳定的解答!
目标函数值(最大): 0.00264032135300132
a: 1.48179079605229E-17
b: 1.04719755119671
c: 4.08586473332812E-14
约束函数
   1: a+b+c-(1.0471975511966) = 1.52322599E-13
回复 不支持

使用道具 举报

发表于 2009-4-12 16:23:18 | 显示全部楼层 来自 宁夏银川
你看看是否满足你的要求
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-12 16:27:12 | 显示全部楼层 来自 北京
您的这个结果好像挺吻合的。我想问下,和刚才相比,问题出在哪呢?另外,您的算法设置是怎样的。我按您的程序怎么结果不一样?
回复 不支持

使用道具 举报

发表于 2009-4-12 16:31:45 | 显示全部楼层 来自 宁夏银川
你多试试看看,目标函数变换后,求解的还是比较稳定的
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-12 16:33:30 | 显示全部楼层 来自 北京
我想问下您的算法设置是怎样的?我发现迭代数变多了效果反倒不好了?您能说下您的算法设置选项吗?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 11:25 , Processed in 0.044353 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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