目录
1.算法求解问题
2.算法求解思路
3.算法求解代码
4.算法求解结果
1.算法求解问题
求min z=2x1+3x2+x3
s.t:x1+4x2+2x3>=83x1+2x2>=6x1,x2,x3>=0
2.算法求解思路
关键函数解释如下:
#利用linprogl函数来解决
'''
def linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,bounds=None, method='interior-point', callback=None,options=None, x0=None)
求解方式有如下:
LINPROG_METHODS = ['simplex', 'revised simplex', 'interior-point', 'highs', 'highs-ds', 'highs-ipm']
'''具体解决步骤如下:
#1.分别表示出C,A,B矩阵和bounds即可
#2.A是s.t条件的系数矩阵,而且需要改写成小于等于的形式
#3.B是s.t条件的数值矩阵,而且需要改写成小于等于的形式
#4.bounds表示的是x1,x3,x2的取值范围
#5.调用linprog函数计算结果即可
3.算法求解代码
#Linear Programming Problem 1:
#利用linprogl函数来解决
'''
def linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,bounds=None, method='interior-point', callback=None,options=None, x0=None)
求解方式有如下:
LINPROG_METHODS = ['simplex', 'revised simplex', 'interior-point', 'highs', 'highs-ds', 'highs-ipm']
'''"""
求min z=2x1+3x2+x3
s.t:x1+4x2+2x3>=83x1+2x2>=6x1,x2,x3>=0
"""
#导入函数和库
import numpy as np
from scipy.optimize import linprog#分别表示出C,A,B矩阵和bounds即可
C=np.array([2,3,1])#C是2x1+3x2+x3的系数矩阵
#A是s.t条件的系数矩阵,而且需要改写成小于等于的形式
#B是s.t条件的数值矩阵,而且需要改写成小于等于的形式
A=np.array([[-1,-4,-2],[-3,-2,0]])
B=np.array([-8,-6])
#bounds表示的是x1,x3,x2的取值范围
#调用函数计算结果即可
ans=linprog(C,A_ub=A,b_ub=B,method='highs',bounds=((0,None),(0,None),(0,None)))
print(ans)
4.算法求解结果
算法的求解结果如下所示:message: Optimization terminated successfully. (HiGHS Status 7: Optimal)success: True(求解结果)status: 0fun: 7.0(最优值)x: [ 8.000e-01 1.800e+00 0.000e+00](对应的值向量)nit: 3(迭代次数)lower: residual: [ 8.000e-01 1.800e+00 0.000e+00]marginals: [ 0.000e+00 0.000e+00 0.000e+00]upper: residual: [ inf inf inf]marginals: [ 0.000e+00 0.000e+00 0.000e+00]eqlin: residual: []marginals: []ineqlin: residual: [ 0.000e+00 0.000e+00]marginals: [-5.000e-01 -5.000e-01]mip_node_count: 0mip_dual_bound: 0.0mip_gap: 0.0