3

我想对该数据库Python中的约束满足问题进行一些实验:所有示例都以文件格式给出。有没有工具可以将这些方程转换为简单的 python 函数,看起来像AMPLGAMS

二次方(X):

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

和类似的?

我已经开始阅读本手册,但不确定这是否是正确的方向。(我的编程能力不是很强。)我会很感激可能的提示。

4

2 回答 2

4

我最近为 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

为了简单起见,示例硬编码参数 name x,但可以从 AST 派生它。

于 2015-06-06T22:23:35.977 回答
1

GAMS 和 Pyomo 之间的以下连接可能有用:

Pyomo是一个基于 Python 的开源软件包,支持多种优化功能,用于制定、求解和分析优化模型。

GAMS 提供的转换函数允许您从 GAMS 模型生成 Pyomo Concrete 标量模型。

因此,您应该能够将 GAMS 模型转换为 Pyomo 模型,然后通过 Pyomo 提供的功能访问其功能。

于 2018-01-18T09:45:09.713 回答