拉格朗日 次梯度法

对于非线性约束问题:

min\quad f(x)\\ s.t. \quad g(x)\leq 0

若非线性约束 g(x) 难于求导,则不能用K-T求解该问题,可考虑用拉格朗日次梯度法。

它的拉格朗日松弛模型为:

\{\min\limits_x~~f(x)+\mu g(x)\}

该拉格朗日模型的对偶模型为:

\{\max\limits_{\mu}~~f(x)+\mu g(x)\}
对于拉格朗日乘子 \mu,应用次梯度法的迭代公式为:

\mu ^{k+1}=\max\{0,\mu^{k}+s^{k}g(x^{k})\}

其中

\ s^{k}=\lambda^{k}\frac{\widehat{f}-f(x^{k})}{\sum g^{2}(x^{k})}

\widehat{f} 为 f(x) 的一个可行解,并且 \lambda^k\leq 2 

(\lambda 可以初始值为 2,然后每一步为原值的 1/2)

可以证明序列 f(x^{k}) 收敛于 \widehat{f}或收敛于 f(x^k)\geq\widehat{f}的一个点。

用次梯度法实际求解时,发现对于有些混合整数规划问题,其效果并不好(尤其是松弛一些可能会有不少松弛解的不等式约束条件),对偶间隙过大,貌似次梯度法中的参数设置比较靠经验(有时候还要进一步结合分支定界来达到更好的结果)

参考资料:

  • Appendix D1.3, Fundamentals of supply chain theory.  Snyder, Lawrence V., and Zuo-Jun Max Shen. John Wiley & Sons, second edition, 2019.
  • Grinold, Richard C. "Lagrangian subgradients." Management Science 17.3 (1970): 185-188.
次梯度法是一种迭代优化算法,它不需要计算精确的梯度,而是利用某个方向的近似梯度来进行更新。对于拉格朗日乘数法求解约束优化问题,我们通常先构造拉格朗日函数,然后寻找其局部最小值。 在Python中,我们可以使用`scipy.optimize.minimize`函数结合次梯度算法(如`method='CG'`表示共轭梯度法,适合于大规模线性系统),假设有一个拉格朗日函数`lagrangian(x, multipliers)`, 其中`x`是变量,`multipliers`是拉格朗日乘子,下面是一个简单的示例: ```python from scipy.optimize import minimize # 定义拉格朗日函数 def lagrangian(x, multipliers, constraint_function, constraint_value): unconstrained_cost = your_unconstrained_cost_function(x) return unconstrained_cost + sum(multipliers[i] * (constraint_function(x)[i] - constraint_value[i]) for i in range(len(constraint_value))) # 假设你的目标函数、约束条件和约束值 unconstrained_cost_function = ... # 用户自定义的目标函数 constraint_function = ... # 用户自定义的约束条件函数 constraint_values = ... # 约束值列表 # 初始化参数和拉格朗日乘子 initial_guess = ... # 初始猜测点 multipliers = np.zeros_like(constraint_values) # 调用优化函数,设置方法为共轭梯度法 options = {'disp': False} # 设置是否显示进度信息 result = minimize(lagrangian, initial_guess, method='CG', jac=lambda x: gradient_of_lagrangian(x, constraint_function), args=(constraint_function, constraint_values), options=options) # 获取结果 optimal_x = result.x optimal_multipliers = result.x[len(initial_guess):]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值