2
像GAMS或AMPL這樣的主要商業代數建模語言(AML)有哪些特徵,像Pyomo或JuMP這樣的開源AML,還沒有(除了明顯的用戶基礎和建立模型的可用性)?來自商業代數建模語言的哪些特性仍然缺少開源代碼?
像GAMS或AMPL這樣的主要商業代數建模語言(AML)有哪些特徵,像Pyomo或JuMP這樣的開源AML,還沒有(除了明顯的用戶基礎和建立模型的可用性)?來自商業代數建模語言的哪些特性仍然缺少開源代碼?
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,它沒有這樣的限制。
JuMP沒有聲明模型的概念,並不是因爲Julia的任何限制(它提供了比Python更多的語法靈活性),但是由於我們的設計決定讓JuMP的問題的內部表示儘可能接近解決者的內部表示可能。這允許我們對循環中的模型進行有效的內存中修改,例如AMPL不支持的模型。無論哪種方式都有一定的權衡。 – mlubin