加载中...
线性规划
发表于:2021-11-08 | 分类: 机器学习课程(魏)
1
2
3
from scipy import optimize as op
import numpy as np

image-20211208163638086

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method=‘simplex’, callback=None, options=None)

很容易发现,c指的应该是要求最大值的函数的系数数组,A_ub是应该是不等式未知量的系数矩阵,仔细观察的人应该发现,为什么第一行里面写的是[-2,5,-1]而不是[2,5,-1]呢,应该要与图里对应才对啊,原来这不等式指的是<=的不等式,那如果是>=呢,乘个负号就行了。A_eq就是其中等式的未知量系数矩阵了。B_ub就是不等式的右边了,B_eq就是等式右边了。bounds的话,指的就是每个未知量的范围了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#目标函数,求最大值
c=np.array([2,3,-5])

#unbalence不等式,默认<=,>=乘-1
#不等式左系数矩阵
A_ub=np.array([[-2,5,-1],[1,3,1]])
#不等式右系数矩阵
B_ub=np.array([-10,12])
#equation等式,A_eq为左系数矩阵,B_eq为右系数矩阵
A_eq=np.array([[1,1,1]])#注意双括号
B_eq=np.array([7])
#x1,x2,x3大于等于0
x1=(0,None)
x2=(0,None)
x3=(0,None)
#函数默认求最小值,-c,结果为负号
res=op.linprog(-c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3))
print(res)

     con: array([1.80713489e-09])
     fun: -14.571428565645059
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([-2.24614993e-10,  3.85714286e+00])
  status: 0
 success: True
       x: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])
1
2
x = [6.42857143e+00, 5.71428571e-01, 2.35900788e-10]
print(2*x[0] + 3*x[1] -5*x[2])
14.571428571820496
上一篇:
朴素贝叶斯
下一篇:
随机森林
本文目录
本文目录