簡體   English   中英

將`AMPL`或`GAMS`文件轉換為`Python`

[英]Converting `AMPL` or `GAMS` files to `Python`

我想在Python中用這個數據庫中的約束滿足問題進行一些實驗:所有的例子都以AMPLGAMS文件格式給出。 是否有工具將這些方程式轉換為簡單的python函數

def二次方(X):

 return (X[0]**2 - X[1]**2, 2*X[0]*X[1])

和類似的?

我已經開始閱讀本手冊但不確定這是否正確。 (我在編程方面不是很強。)我將很感激可能的提示。

我最近為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派生它。

GAMS和Pyomo之間的以下聯系可能有用:

Pyomo是一個基於Python的開源軟件包,支持各種優化功能,用於制定,求解和分析優化模型。

GAMS提供的轉換功能允許您從GAMS模型生成Pyomo Concrete標量模型。

因此,您應該能夠將GAMS模型轉換為Pyomo模型,然后通過Pyomo提供的功能訪問其功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM