2016-04-15 423 views
0

我有一個文件quadratic_obj.lp,內容如下:如何導出cplex的解決方案?

Minimize 
obj: a + b + [ a^2 + 4 a * b + 7 b^2 ]/2 
Subject To 
c1: a + b >= 10 
End 

在交互式會話CPLEX,我使用read讀取文件中,我使用進行優化optimize。然後我就可以利用顯示

display solution variables - 

這給了我

Variable Name   Solution Value 
a       10.000000 
b        0.000000 

有沒有辦法來此管道輸出的解決方案?因此,在一個理想的世界裏會是這樣的:

display solution variables - -> myoutput.csv 

我用write但文件類型選項有不是我尋找。例如。 sol作爲xml返回,我必須再次解析。

是否有辦法將變量及其值輸出到例如一個製表符或逗號分隔的文件?

回答

4

沒有從互動做自動的方式。如果你做的東西像下面,它可以讓你接近:

./cplex -c "read quadratic_obj.lp" "opt" "set logfile tmp.log" "display solution variables -" "quit" 

這將輸出放到一個文件名爲tmp.log,但仍存在有一些額外的東西,你需要進行後用腳本處理(或類似的東西)。有關此技術的更多信息,請參閱this鏈接(適用於版本12.6.3)。

另一種選擇是使用API's。然後,您可以完全控制輸出。例如,使用Python API,您可以執行如下操作:

import cplex 

cpx = cplex.Cplex() 
cpx.read('quadratic_obj.lp') 
cpx.solve() 
# Check solution status here via cpx.solution.get_status() 
for name, value in zip(cpx.variables.get_names(), 
         cpx.solution.get_values()): 
    print name, value 
+1

運行良好(Python API版本;沒有嘗試另一個) - 謝謝!我現在對它進行了升級,稍後可能會接受它,具體取決於其他答案的質量。 – Cleb

1

你可以做內CPLEX與OPL:

dvar float+ a; 
dvar float+ b; 

minimize a + b + (a*a + 4 *a * b + 7 *b*b)/2; 
subject to 
{ 
c1: a + b >= 10; 
} 

execute 
{ 
var f=new IloOplOutputFile("res.csv"); 
f.writeln(a); 
f.writeln(b); 
f.close(); 
} 

,這將創建一個CSV文件res.csv 問候

+0

不幸的是,這對我不起作用。它要麼抱怨乘法(CPLEX Error 1607:Line 4:Expected'+'或' - ',找到'*'。'),如果我回到原始定義,它會抱怨大括號('CPLEX Error 1608:第10行:預期'+',' - '或感覺,找到'{'.'),沒有它們我得到'CPLEX錯誤1608:第10行:期望'+',' - '或感覺,找到'v '。任何想法? – Cleb

+0

你應該使用我在一個文件model.mod中寫的內容,然後在命令行中執行oplrun model.mod –

+0

然後我得到:'Command'oplrun'不存在。鍵入命令列表'help'。 – Cleb

相關問題