1

私はMROを解決するためにGurobi 7を使用しています。私はいくつかの異なる変数を持っています。しかし、私は具体的に "x"と "y"の2つに興味があります。参考のために、私はソルバーにxとyの変数を追加する方法を示し私のコードを与えている:グロビの最適化結果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変数を表示します。他の変数は必要ありません。私の質問は、どのようにこれらの結果を次のように1つの列の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

関連する問題