大家好,我是一名在读研究生,主要研究优化算法和应用,通过Gurobi求解器进行优化问题的求解。希望通过在51CTO博客分享我的学习心得和技术经验,能与更多志同道合的朋友们一起交流和成长。
在这篇博文中,我将分享几个常用的Gurobi代码片段,希望对大家在解决优化问题时有所帮助。
1.线性规划问题
import gurobipy as gp
from gurobipy import GRB
# 创建模型
model = gp.Model("linear_program")
# 添加变量
x = model.addVar(name="x")
y = model.addVar(name="y")
# 设置目标函数
model.setObjective(3 * x + 4 * y, GRB.MAXIMIZE)
# 添加约束
model.addConstr(x + 2 * y <= 14, "c0")
model.addConstr(3 * x - y >= 0, "c1")
model.addConstr(x - y <= 2, "c2")
# 求解模型
model.optimize()
# 输出结果
if model.status == GRB.OPTIMAL:
for v in model.getVars():
print(f'{v.varName} {v.x}')
print(f'Objective: {model.objVal}')
2.整数规划问题
import gurobipy as gp
from gurobipy import GRB
# 创建模型
model = gp.Model("integer_program")
# 添加变量
x = model.addVar(vtype=GRB.INTEGER, name="x")
y = model.addVar(vtype=GRB.INTEGER, name="y")
# 设置目标函数
model.setObjective(2 * x + 3 * y, GRB.MINIMIZE)
# 添加约束
model.addConstr(x + y >= 10, "c0")
model.addConstr(2 * x - 3 * y <= 15, "c1")
# 求解模型
model.optimize()
# 输出结果
if model.status == GRB.OPTIMAL:
for v in model.getVars():
print(f'{v.varName} {v.x}')
print(f'Objective: {model.objVal}')
3.多目标优化
import gurobipy as gp
from gurobipy import GRB
# 创建模型
model = gp.Model("multi_objective")
# 添加变量
x = model.addVar(name="x")
y = model.addVar(name="y")
z = model.addVar(name="z")
# 设置目标函数
model.setObjectiveN(x + y + 2 * z, index=0, priority=1)
model.setObjectiveN(-x + y + z, index=1, priority=0)
# 添加约束
model.addConstr(x + 2 * y + 3 * z <= 4, "c0")
model.addConstr(x + y >= 1, "c1")
# 求解模型
model.optimize()
# 输出结果
if model.status == GRB.OPTIMAL:
for v in model.getVars():
print(f'{v.varName} {v.x}')
print(f'Objective 1: {model.getObjective(0).getValue()}')
print(f'Objective 2: {model.getObjective(1).getValue()}')
最后,我想在这里立一个flag,激励自己不断进步。在接下来的一段时间通过51CTO学习编程技术,学习Python、优化算法以及Gurobi的高级应用。