非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解

文章目录

      • 1、解释拉格朗日乘子法
      • 2、解释KKT条件
      • 3、拉格朗日乘子法的手工数学推导例题
      • 4、python编程求解上个例题,设a、b、c为1
      • 5、参考文献

1、解释拉格朗日乘子法

非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解_第1张图片

2、解释KKT条件

非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解_第2张图片

3、拉格朗日乘子法的手工数学推导例题

①例题如下

非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解_第3张图片

②具体做法如下所示
非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解_第4张图片

③结果分析:

通过手算可以得到最大值为8abc/3√3,设a、b、c为1时,max为1.5396

4、python编程求解上个例题,设a、b、c为1

①具体代码如下:

from scipy.optimize import minimize
import numpy as np
e = 1e-10
fun = lambda x : 8 * (x[0] * x[1] * x[2])
cons = ({'type': 'eq', 'fun': lambda x: x[0]**2+ x[1]**2+ x[2]**2 - 1}, 
        {'type': 'ineq', 'fun': lambda x: x[0] - e},
        {'type': 'ineq', 'fun': lambda x: x[1] - e},
        {'type': 'ineq', 'fun': lambda x: x[2] - e}
       )
x0 = np.array((1, 1, 1))
res = minimize(fun, x0, method='SLSQP', constraints=cons)
print('最大值:',res.fun)
print('最优解:',res.x)
最大值: 1.5396007243645415
最优解: [0.57735022 0.57735022 0.57735038]

②实验结果分析:

由编程结果可以得到,算出来的最大值和手工推算的最大值一样

5、参考文献

①https://zhuanlan.zhihu.com/p/26514613

②https://blog.csdn.net/qq_44830040/article/details/105609684

你可能感兴趣的:(非线性规划的拉格朗日乘子法的手工推导、python编程和python包求解)