最优化算法是一个很大的家族,线性规划只是很简单的一种,本文旨在引导大家理解什么叫最优化,简单说就是 在 所有 x 里面找到 y 最大的方法
线性规划
优化模型试图在满足给定约束的决策变量的所有值的集合中,找到优化(最大化或最小化)目标函数的决策变量的值。
它的三个主要组成部分是:
- 目标函数:要优化的函数(最大化或最小化)。
- 决策变量:影响系统性能的可控变量。
- 约束:决策变量的一组约束(即线性不等式或等式)。非负性约束限制了决策变量取正值。 【约束都是线性的,故叫线性规划】
优化模型的解称为最优可行解。
示例
import numpy as np import matplotlib.pyplot as mpl from scipy import optimize ### 问题 # minmize: # -7x1+7x2-2x3-x4-6x5 # s.t.: # 3x1-x2+x3-2x4=-3 # 2x1+x2+x4+x5=4 # -x1+3x2-3x4+x6=12 # xi>=0 ### 线性规划代码 c = np.array([-7, 7, -2, -1, -6, 0]) a = np.array([[3, -1, 1, -2, 0, 0], [2, 1, 0, 1, 1, 0], [-1, 3, 0, -3, 0, 1]]) b = np.array([-3, 4, 12]) res = optimize.linprog(c, A_eq=a, b_eq=b, bounds=((0, None), (0, None), (0, None), (0, None), (0, None), (0, None))) print(res) # con: array([-6.18438634e-12, -1.54809499e-12, 1.85451654e-11]) # fun: -16.50000000001507 # message: 'Optimization terminated successfully.' # nit: 6 # slack: array([], dtype=float64) # status: 0 # success: True # x: array([4.31310891e-13, 3.96214625e-13, 2.56502186e-13, 1.50000000e+00, # 2.50000000e+00, 1.65000000e+01])
fun 是最终的 y,x 为对应的解
注意:约束必须是有限的可行解,不能是无穷解
更多用法
更完整的示例请看参考资料
如 xi>0 的约束如何表示
通过 [-1,0,0]*x1=-x1来表示 x1的非负约束
参考资料:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html 官网
https://www.cnblogs.com/caiyishuai/p/11175373.html 【数学建模】线性规划各种问题的Python调包方法
https://baijiahao.baidu.com/s?id=1666564495926266704&wfr=spider&for=pc 使用Python进行线性规划示例