赞
踩
相关函数: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***
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。