Gurobi优化结果写入Csv文件

Gurobi Optimization Result Writing into Csv file

我正在使用 Gurobi 7 来解决我的 MIP。我有几个不同的变量。但是,我对其中两个特别感兴趣,即 "x" 和 "y"。作为参考,我提供的代码显示了我如何将 x 和 y 变量添加到求解器中:

# Creating Variables
x = {}
y = {}

# Adding Variables
for i in range(I):
    x[i+1,P[i]-d[0]] = m.addVar(vtype=GRB.BINARY, name="x%s" % str([i+1,P[i]-d[0]]))
    x[i+1,P[i]] = m.addVar(vtype=GRB.BINARY, name="x%s" % str([i+1,P[i]]))
for i in range(I):
    for k in range(len(rangevalue)):
        y[i+1, rangevalue[k] - E[i]] = m.addVar(vtype=GRB.BINARY,
                               name="y%s" % str([i+1, rangevalue[k] - E[i]]))

虽然上面的代码可能没有任何意义,但我只是想展示一下,以防你用它来解决我的问题。

我解决问题后得到如下结果:

m.printAttr('X')

    Variable            X 
-------------------------
     x[1, 3]            1 
sigmaminus[1]          874 
     x[2, 2]            1 
sigmaminus[2]         1010 
     x[3, 2]            1 
sigmaminus[3]         1945 
     x[4, 4]            1 
sigmaplus[4]           75 
     x[5, 4]            1 
sigmaminus[5]         1153 
     x[6, 5]            1 
sigmaminus[6]          280 
     x[7, 3]            1 
sigmaplus[7]         1138 
     x[8, 2]            1 
sigmaplus[8]          538 
     x[9, 1]            1 
sigmaplus[9]         2432 
    x[10, 5]            1 
sigmaminus[10]          480 
    omega[1]           12 
    OMEGA[1]           12 
    omega[2]            9 
    OMEGA[2]           12 
    omega[3]            8 
    OMEGA[3]            9 
    omega[4]            8 
    OMEGA[4]            8 
    OMEGA[5]            8 
     y[1, 2]            1 
     y[2, 9]            1 
     y[3, 5]            1 
     y[4, 6]            1 
     y[5, 4]            1 
     y[6, 6]            1 
     y[7, 3]            1 
    y[8, 11]            1 
     y[9, 8]            1 
    y[10, 1]            1 
  phiplus[6]            1 
 phiminus[7]            1 
phiminus[10]            1 

我特别想显示 x 和 y 变量及其索引。其他变量不是必需的。我的问题是如何将这些结果写入一列的 csv 文件,如下所示?

x[1,3]
x[2,2]
x[3,2]
.
.
.
x[10,5]
y[1,2]
y[2,9]
y[3,5]
.
.
.
y[10,1]

我不需要它们对应的值只能是“1”,因为它们是二进制变量。我只需要编写值为“1”的变量。

我会按照这些思路做一些事情:

import csv

if m.SolCount == 0:
    print("Model has no solution")
    exit(1)

var_names = []    

for var in m.getVars():
    # Or use list comprehensions instead 
    if 'x' == str(var.VarName[0]) and var.X > 0.1:
        var_names.append(var.VarName)

# Write to csv
with open('out.csv', 'wb') as myfile:
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
     wr.writerows(var_names)

希望对您有所帮助。 我稍后会测试这个片段。更新:按预期工作。