Gurobi | 迭代中的参数变量/目标函数/约束修改


1.目标函数参数修改

有时候会出现在迭代过程中需要修改目标函数参数的情况,例如在利用次梯度求解拉格朗日松弛对偶问题,我们不可能重新生成整个模型。
通过尝试发现以下方法可行,即在迭代中直接修改并重新生成目标函数。

from gurobipy import *

m = Model('test')

x = m.addVar(vtype=GRB.BINARY, name="x")
y = m.addVar(vtype=GRB.BINARY, name="y")
z = m.addVar(vtype=GRB.BINARY, name="z")

m.setObjective(x + y + z, GRB.MAXIMIZE)

m.addConstr(x + y <= 1, "1")
m.addConstr(x + y + z <= 2, "1")


def set_obj(gamma, alpha, beta):
    obj = LinExpr(0)
    obj.addTerms(gamma, x)
    obj.addTerms(-alpha, y)
    obj.addTerms(beta, z)
    # m.setObjective(obj, GRB.MAXIMIZE)
    return obj

gamma = 1
alpha =2
beta = 3
obj = set_obj(gamma, alpha, beta)
m.setObjective(obj, GRB.MAXIMIZE)
m.write('test.lp')
m.optimize()

print('--------------------参数修改----------------------')
gamma = 5
alpha = 6
beta = 7
obj = set_obj(gamma, alpha, beta)
m.setObjective(obj, GRB.MAXIMIZE)
m.write('test1.lp')
m.optimize()

在这里插入图片描述


2.变量初始值赋值

需要修改变量值的情况一般出现在 Heuristic 给出初始可行解来加速求解器求解的时候。对于 Gurobi 可以采用 MIP starts 方法,链接中的官方文档给了一个简单的例子 (simple facility location problem)

# In Python:
# First open all plants
for p in plants:
    open[p].Start = 1.0

3.约束修改

# 1. 在设置约束的时候,为每个约束添加约束name
for i in range(3):
	model.addConstr(x[i] <= y+z, name='cons_%s' % (i))

# 2. 删除原模型中对应要修改的约束
for i in range(3):
    constr_name = 'cons_' + str(i) 
    model.remove(model.getConstrByName(constr_name))
    
# 3. 重新添加约束
for i in range(3):
	model.addConstr(x[i] <= y+z+1, name='cons_%s' % (i))
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值