[英]Converting `AMPL` or `GAMS` files to `Python`
我最近為Python中的AMPL子集編寫了一個解析器,可以在這里找到 。 它不完整但可以處理許多AMPL表達式並且可以輕松擴展。
這是將目標函數從AMPL轉換為Python的示例:
import ampl, sys
class AMPLToPythonConverter:
def __init__(self, stream):
self.stream = stream
def visit_reference(self, expr):
self.stream.write(expr.name)
def visit_binary(self, expr):
expr.lhs.accept(self)
self.stream.write(' {} '.format(expr.op))
expr.rhs.accept(self)
def visit_decl(self, decl):
if decl.kind == 'minimize':
self.stream.write("def {}(x):\n".format(decl.name))
self.stream.write(" return ");
decl.body.accept(self)
self.stream.write('\n')
compound_stmt = ampl.parse(
"""
var x;
minimize f: x * x;
""", "input")
for node in compound_stmt.nodes:
node.accept(AMPLToPythonConverter(sys.stdout))
運行此代碼打印:
def f(x):
return x * x
為了簡單起見,示例硬編碼參數名稱為x
,但可以從AST派生它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.