相关函数:linprog()函数
函数功能:
用于寻找目标函数的最小值(如果求最大值需做相应变化)
注意事项:
-
1.目标函数f要写成列矩阵的形式
-
2.约束要写成 <= 的形式
-
3.函数是为求最小值设置的
参数解释:
参数1:所求目标函数未知数的系数 {一维数组}
参数2 :A_up,此参数为不等式包含未知数一侧 未知数的系数 { 二维数组}
参数3:B_up,此参数为不等式不包含未知数一侧 的数值 {一维数组}
参数4:A_eq,此参数为等式 包含未知数一侧 未知数的系数 {二维数组}
参数5:B_eq ,此参数为等式 不包含未知数一侧 的数值 {一维数组}
参数6:每个系数的限制
样例:
import numpy as np
from scipy import optimize as op
np.set_printoptions(suppress=True)
z = np.array([4, 3])
A_ub = np.array([[2, 1], [1, 1]])
B_ub = np.array([10, 8])
x1 = (0, 8)
x2 = (0, 7)
res = op.linprog(-z, A_ub, B_ub, bounds = (x1,x2))#由于求解最大值,所以此处为-z,答案就是相反数
print(res)
结果:
***Repl Closed***
con: array([], dtype=float64)
fun: -25.9999999991197 # 最终结果
message: 'Optimization terminated successfully.'
nit: 5
slack: array([0., 0.])
status: 0
success: True
x: array([2., 6.]) #x1和x2的值
***Repl Closed***
样例2:
要点:
不等式1为 大于等于,应该转换为小于等于: -2X1 + 5X2 - X3 <= -10
import numpy as np
from scipy import optimize as op
np.set_printoptions(suppress=True)
z = np.array([2, 3, -5])
A_up = np.array([[-2, 5, -1], [1, 3, 1]])
B_up = np.array([-10, 12])
A_eq = np.array([1, 1, 1])
B_eq = np.array([7])
x1 = (0, 7)
x2 = (0, 7)
x3 = (0, 7)
res = op.linprog(-z, A_up, B_up, A_eq, B_eq, bounds=(x1, x2, x3))
print(res)
运行结果:
***Repl Closed***
con: array([], dtype=float64)
fun: -14.571428509517212 #相反数即为所求最大值
message: 'Optimization terminated successfully.'
nit: 5
slack: array([0.00000022, 3.85714293, 0.00000001])
status: 0
success: True
x: array([6.42857145, 0.57142854, 0. ])
***Repl Closed***