2

我有许多具有多个索引的变量,例如: flow[i,j,k]
使用 Gurobi 变量名称:flow_1_1_1, ..., flow_1_2_3等。

如果 Gurobi 模型对象是全局变量,则可以将解决方案值访问为flow[i,j,k].x

我的问题是有没有办法存储“流”对象并稍后加载它以重新优化?不幸的是,不支持pickle。

如果没有,我最好的选择是什么?

4

2 回答 2

0

如果模型根本没有改变,您可以导出并稍后导入MST 文件

恐怕,通过创建自己的数据结构并将x-values 与您的索引一起保存在那里,您通常会更好。在以后重新优化的情况下,您只需重新创建模型并设置.start为您保存的值。

请注意,使用这种方法,您将始终丢失预求解、根松弛、根节点和分支定界信息。如果某些模型文件格式可能有助于更好的重新优化启动,我没有经验。

于 2015-04-08T07:46:58.627 回答
0

优化后可以恢复变量的值。然后使用这些进行重新优化,如下所示(sol_U 是字典,我们在其中恢复 varialbe vU 的数据)。

m.optimize()
    status = m.status
    if status == GRB.Status.OPTIMAL:
        sol_V=m.getAttr('x', vV)
        sol_U=m.getAttr('x', vU)
        print('Optimization status was %d' % status)
        print('The optimal objective is %g' % m.objVal)

        for e in OpEq:
            for bl in Blocs:
                for t in Te:
                    if sol_U[bl,t, e] > 0.1:
                        print('u_(%s,%i,%s)-> %f' % (bl,t,e, sol_U[bl,t, e]))
                          
        sol_V = m.getAttr('x', vV)
        for op in Op_:    
            for bl in BlocsR:
                for t in Te:
                    if sol_V[bl,t,op] > 0.1:
                        print('v_(%s,%i,%i)-> %f' % (bl,t,op, sol_V[bl,t, op]))

于 2016-11-15T22:20:45.450 回答