2017-02-04 29 views

回答

1

AMPL的一個典型特徵是用通用語言編寫的建模庫通常缺乏聲明模型和數據之間的明確分離。一些系統如Pyomo嘗試用不同程度的成功往往都寫在語言限制的效仿。

例如,AMPL客觀

minimize OBJ: sum{j in J} c[j] * y[j]; 

可以寫成Pyomo作爲

def obj_expression(model): 
    return summation(model.c, model.y) 

model.OBJ = Objective(rule=obj_expression) 

基於AMPL子集的GNU MathProg是一個開源的AML,它沒有這樣的限制。

+1

JuMP沒有聲明模型的概念,並不是因爲Julia的任何限制(它提供了比Python更多的語法靈活性),但是由於我們的設計決定讓JuMP的問題的內部表示儘可能接近解決者的內部表示可能。這允許我們對循環中的模型進行有效的內存中修改,例如AMPL不支持的模型。無論哪種方式都有一定的權衡。 – mlubin