2017-07-13 1 views
0

私は複数の最適化スクリプトを持ち、それぞれ独自の結果を生成するローリングホライズン最適化を実行しようとしています。あらゆる間隔で画面に結果を出力するのではなく、それぞれの結果をmodel.write( "results.sol")を使用して書き、結果処理スクリプト(別のpythonスクリプト)に読み戻したいと思います。新しいpythonスクリプトのgurobi最適化( "results.sol")の結果を読む

私は、Pythonを使用してread( "results.sol")を使用しようとしましたが、ファイル形式は認識されません。 Gurobiが出力する.solファイル形式を読み書きできる方法はありますか? .solファイルを後で読んでプロットなどを生成できない場合は奇妙に思えます。

多分私は何かがぼんやりと分かりません。

答えて

1

私たちはあなたが何をしているのか推測しなければならないので、コードを見ずに答えるのは難しいです。

しかし、あなたは

model.write("out.sol") 

を使用する場合も...

Gurobiはそれを書くために(そして何書かにそのファイルサフィックスから推測される)独自のフォーマットです使用されます。あなたがPythonの基本的なIO-ツールを使用していて、もちろんPythonがする点でそのファイルを解釈しません

x = read("out.sol") 

を使用した場合

model.read("out.sol") 

この

を簡単に読み取ることができますフォーマット。そのような読み物はテキストモードです(バイナリが必要かもしれませんが、わかりません)。

一般的なルール:クラスモデルのクラスメソッドを使用してソリューションを作成した場合は、クラスモデルのクラスメソッドも使用して読み込みます。

通常、上記の使用は、モデルの一部の状態(たとえばMIP開始)を元に戻すために使用されます。プロットしたい場合は、さらに作業をしなければなりません。この場合、PythonのIOツールを使用することは良い考えです。フォーマットdescribed hereを尊重する必要があります。これはcsvまたは手動で読むことができます(以前の私の発言とは反対です:バイナリではなくテキストモードです)。

ので、リンクからの例では、ファイルgur.solであると仮定すると:

import csv 
with open('gur.sol', newline='\n') as csvfile: 
    reader = csv.reader((line.replace(' ', ' ') for line in csvfile), delimiter=' ') 
    next(reader) # skip header 
    sol = {} 
    for var, value in reader: 
     sol[var] = float(value) 
    print(sol) 

出力:

{'z': 0.2, 'x': 1.0, 'y': 0.5} 

備考:

  • コードはPythonのcsvモジュールは、いくつかの制限があるため醜いれます
    • 区切り文字は、この形式の二のスペースであり、我々は(唯一の文字は、この機能に許可されているように)を読むためのコードをハックする必要が
  • コードはPythonのために調整される可能性があります私が使用しているものを3( ;非常に良い説明 - おそらく次の()メソッドは、
  • pandasは、この目的(非常に良いcsv_readerを持つ巨大なツール)
+0

ありがとうのためにはるかに良いでしょう)PY2では異なるであろう – tm553

関連する問題