求助matlab程序——罚函数或乘子法

求助matlab程序——罚函数或乘子法,第1张

设长宽高分别是x,y,z,问题就是在条件xyz=512下求f(x,y,z)=0.4xy+0.4(x+y)z的最小值。

拉格朗日函数是f(x,y,z)=0.4xy+0.4(x+y)z+λ(xyz-512)。

根据fx=0,fy=0,fz=0得到x=y=z。代入xyz-512=0中得x=y=z=8。

你只算了2个侧面,实际有4个侧面。

一、作用不同:

惩罚函数法在M越来越大的情况下,函数F趋近于病态,乘子法克服这个缺点根据拉格朗日分解加了一个uih(x)M变为了c/2。

主要思想是引入一个新的参数λ(即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程。

二、定义不同:

基本的拉格朗日乘子法(又称为拉格朗日乘数法),就是求函数f(x1,x2,)在g(x1,x2,)=0的约束条件下的极值的方法。

罚函数法是从非可行解出发逐渐移动到可行区域的方法。罚函数法在理论上是可行的,在实际计算中的缺点是罚因子M的取值难于把握,太小起不到惩罚作用太大则由于误差的影响会导致错误。

三、使用方法不同:

在进化计算中,研究者选择外部罚函数法的原因主要是该方法不需要提供初始可行解。需要提供初始可行解则是内部罚函数法的主要缺点。由于进化算法应用到实际问题中可能存在搜索可行解就是NP难问题,因此这个缺点是非常致命的。

基本的拉格朗日乘子法就bai是求函数f(x1,x2,...)在约束条件g(x1,x2,...)=0下的极值的方法。其主要思想是将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。

扩展资料:

如果这个实际问题的最大或最小值存在,一般说来驻点只有一个,于是最值可求。

条件极值问题也可以化为无条件极值求解,但有些条件关系比较复杂,代换和运算很繁,而相对来说“拉格朗日乘数法”不需代换,运算简单一点,这就是优势。

条件φ(x,y,z)一定是个等式,不妨设为φ(x,y,z)=m

则再建一个函数g(x,y,z)=φ(x,y,z)-m

g(x,y,z)=0以g(x,y,z)代替φ(x,y,z)

在许多极值问题中,函数的自变量往往要受到一些条件的限制,比如,要设计一个容积为 V的长方体形开口水箱,确定长、宽和高,使水箱的表面积最小.。设水箱的长、宽、高分别为 x,y,z, 则水箱容积V=xyz。

参考资料来源:百度百科-拉格朗日乘数法

对粒子群的约束问题涉及的比较少。这儿摘抄下百度百科的内容:

PSO算法推广到约束优化问题,分为两类:(http://baike.baidu.com/view/1531379.htm)

(1)罚函数法。罚函数的目的是将约束优化问题转化成无约束优化问题。

(2)将粒子群的搜索范围都限制在条件约束簇内,即在可行解范围内寻优。

第一种方法有相关论文,看了下,感觉比较适合等式约束情况,比较类似于在适应度函数中加入拉格朗日乘子的做法,如果论文下不到的话,请留言。

第二种做法倒是用过。大概讲下。

针对你的问题,初始化两维向量,但是由于存在不等式约束,所以考虑先初始化向量的第一维,然后动态算出第二维的范围,随机出第二维变量。然后就是计算适应度值,全局、局部最优。

更新过程一样,先更新第一维变量,然后动态计算第二维的范围,更新第二维,如果更新后超过了边界,则取边界值(或者也可以再次重新更新,直到满足条件,直觉上感觉第一种还好点,第二种可能会出现无法更新的情况),更新完毕后,计算适应度,更新全局、局部最优解。

补充两个链接吧

http://download.csdn.net/detail/yinjian_2004/1567342

论文:基于改进粒子群优化算法的约束多目标优化


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11116413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存