在Matlab、Cplex等数学建模工具中,都支持基于系数矩阵和右侧项构建数学模型的方式;但是在python调用Gurobi时,尚未找到这样的方法。
% Matlab的求解代码
objCoff = [2; 3]
A = [2,2; 1,2; 4, 0; 0,4]
rhs = [12; 8; 16; 12]
x = linprog(-objCoff, A, rhs)
objVal = objCoff'*x
ps。 可能是本人才疏学浅,如有这样的这样的函数,欢迎打脸。
于是乎,就想自己写这样一个函数,以备后用。
from gurobipy import GRB, quicksum, Model
def solve_model(vtypes, objCoff, lhs, A, rhs, lbs, ubs, sense):
'''
功能:基于模型数据建立数学模型
参数:
vtypes: 决策变量的类型向量
objCoff:目标函数的系数向量
lhs: 约束的左侧项
A:约束系数矩阵
rhs: 约束的右侧项
lbs: 决策变量的下界
ubs:决策变量的上届
sense:目标函数的类型
'''
model = Model()
model.modelSense = sense
# 添加决策变量(下界,上界,目标函数系数,变量类型)
decision_variables = []
for dv in range(0, len(vtypes)):
dv_x = model.addVar(lb=lbs[dv], ub =u