03. 非线性规划
定义
如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
非线性规划目前还没有适于各种问题的一般算法。
非线性规划模型描述如:
其中
一般非线性规划只能得到局部最优解,不能保证是全局最优解。
无约束非线性规划求解
设
设
因此,只要找到
找到
有约束非线性规划求解
有等式约束非线性规划的 Lagrange 乘数法
对于只有等式约束的非线性规划问题:
设函数
若
有约束非线性规划的罚函数法
构造带参数的所谓增广目标函数,从而把有约束非线性规划问题转化为一系列无约束非线性规划问题。
增广目标函数通常由两部分组成:
- 原问题的目标函数;
- 约束条件构造出的惩罚项。
对于外点法,增广目标函数形式如下:
从而转化为无约束问题:
Python 代码
利用 scipy、cvxopt、cvxpy 包,可以实现非线性规划求解。
scipy 求解
对于问题:
使用 scipy 求解,代码如下:
1 | # %% |
输出如下:
1 | best obj = -0.7736842105263159 |
cvxpy 求解
对于问题:
代码如下:
1 | # %% |
输出如下:
1 | best z = -17.0 |