优化算法中 如何处理约束
1.1 什么是约束
优化问题中非常重要的问题是如何在 约束条件(不等式约束和等式约束) 下求最优解。处理约束条件的方法主要有三种:直接法、拉格朗日乘数法和惩罚法。
很明显,其中的 φi(x)为等式约束,ψj (x)为不等式约束。
一个带约束实际优化问题 弹簧设计问题:拉开弹簧和压缩弹簧的设计是一个著名的基准优化问题。其主要目的是根据偏转、应力、喘振频率和几何形状的限制来最小化重量。它涉及三个设计变量:线圈直径x1,线圈直径x2和线圈的数量/长度x3。这个问题可以概括为
受以下约束条件的约束
g1(x) g2(x) g3(x) g4(x) g5(x)为不等式约束。
2.1 直接法
直接法 direct approach:即是提出一个可能的解,然后去试验这个解是否满足所有点约束条件,如果满足则是一个潜在最优解,不是则丢弃。
很明显,这样的方法效率是极低且缓慢的。
2.2 拉格朗日乘法
拉格朗日乘法 Lagrange multipliers:合并这些约束条件,从而将问题表述为一个无约束的问题。具有严格的数学基础并且更加高效。
也就是高数上学到的拉格朗日乘法求条件极值。但是只能用于等式约束,无法用于非等式约束。
2.3 惩罚法
惩罚法 penalty method:对于具有等式和不等式约束的非线性优化问题,合并约束的一种常用方法是惩罚法。对于优化问题其思想是定义一个惩罚函数,使有约束问题转化为一个无约束问题。 我们定义
当一个约束被满足时,它对Π的影响为零。然而,当它被违反时,它会被严重惩罚,因为它会显著增加Π。也就是如果φi(x)!=0,则Hi[φi(x)]=1,如果φi(x)==0,则Hi=0。类似地,如果ψj(x)≤0为真,Hj[ψj(x)]=0,如果ψj(x)>0为真则Hj[ψj(x)]>0。µ和ν应该接近10^15左右。显然,如果数值问题太大,它可能会导致数值问题。
简单的说:有约束的情况其实就是把约束带上,直接求整体的函数值Π,因为约束前面的系数极大10^15所以如果要整体最小的话,那么必然要让约束趋近于0才可以,那么当整体最小的时候,约束也必然被满足,这就是惩罚法。