1

我正在使用Gurobi 7来解决我的MIP问题。我有几个不同的变量。但是,我特别感兴趣的是其中的两个,即“x”和“y”。对于参考,我给我的代码,显示了如何添加变量x和y为求解:Gurobi优化结果写入Csv文件

# 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”的变量。

回答

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) 

我希望这有助于。 我将在稍后测试此片段。更新:按预期工作。

+0

我有点得到你在做什么,但它确实不适用于我的情况。那么,我正在检查可行性;这个问题是可行的,并得出答案。我应该更改var.VarName [0]上的任何内容吗? – user8028576

+0

我刚刚检查过我的代码,看来我正在使用'str(var.VarName [0])'。你可以放弃吗?确保你用小写''x'' – Ioannis

+0

与这个:'wr.writerows(zip(var_names))'相比较,它可以很好地工作。非常感谢你! – user8028576