默认切换到 pyomo 4 表达式
Switch to pyomo 4 expressions by default
为什么 Pyomo 默认使用 expr_coopr3.py
中的表达式类型?我找到了改变它的方法,但我怀疑它是否是正确的方法。
在文件中expr_common.py
try:
from sys import getrefcount
_getrefcount_available = False # changed!
except ImportError:
logger = logging.getLogger('pyomo.core')
logger.warning(
"This python interpreter does not support sys.getrefcount()\n"
"Pyomo cannot automatically guarantee that expressions do not become\n"
"entangled (multiple expressions that share common subexpressions).\n")
getrefcount = None
_getrefcount_available = False
class Mode(object):
coopr3_trees = (1,)
pyomo4_trees = (2,)
if _getrefcount_available:
mode = _default_mode = Mode.coopr3_trees
else:
mode = _default_mode = Mode.pyomo4_trees
可以将变量 _getrefcount_available
分配给 False
并且在一切都与 pyomo 表达式一起工作之后 4. 有没有其他方法可以做到这一点?
我正在使用 Pyomo 5.2
您可以通过以下方式切换表达式树系统:
import pyomo.core.base.expr as EXPR
EXPR.set_expression_tree_format(EXPR.common.Mode.pyomo4_trees)
Pyomo4 表达式经过了 (long-运行) 的开发 activity 以简化表达式树系统,提高性能,最重要的是为 pypy 提供支持。它没有成为默认值,主要是因为虽然我认为它工作正常,但它生成的表达式树与 coopr3 系统生成的表达式树略有不同。这会影响大量 Pyomo 测试,我没有时间解决所有 (2000+) 测试差异以确保新结果正确。
此外,我应该指出 [截至 2017 年 12 月] 有一个 Pyomo 分支,其中包含修订版的 pyomo4 表达系统(目前称为 pyomo5)。这个系统有一个改进的方法来确保在没有 getrefcount()
(pypy 需要)的情况下表达式的正确性。不幸的是,pyomo5 表达式的开发与 coopr3/pyomo4 系统完全不同,以至于它们不能完全共存。当该分支合并时(可能是 2018 年 1 月),预计 coopr3 和 pyomo4 表达系统将从 master 中删除。
为什么 Pyomo 默认使用 expr_coopr3.py
中的表达式类型?我找到了改变它的方法,但我怀疑它是否是正确的方法。
在文件中expr_common.py
try:
from sys import getrefcount
_getrefcount_available = False # changed!
except ImportError:
logger = logging.getLogger('pyomo.core')
logger.warning(
"This python interpreter does not support sys.getrefcount()\n"
"Pyomo cannot automatically guarantee that expressions do not become\n"
"entangled (multiple expressions that share common subexpressions).\n")
getrefcount = None
_getrefcount_available = False
class Mode(object):
coopr3_trees = (1,)
pyomo4_trees = (2,)
if _getrefcount_available:
mode = _default_mode = Mode.coopr3_trees
else:
mode = _default_mode = Mode.pyomo4_trees
可以将变量 _getrefcount_available
分配给 False
并且在一切都与 pyomo 表达式一起工作之后 4. 有没有其他方法可以做到这一点?
我正在使用 Pyomo 5.2
您可以通过以下方式切换表达式树系统:
import pyomo.core.base.expr as EXPR
EXPR.set_expression_tree_format(EXPR.common.Mode.pyomo4_trees)
Pyomo4 表达式经过了 (long-运行) 的开发 activity 以简化表达式树系统,提高性能,最重要的是为 pypy 提供支持。它没有成为默认值,主要是因为虽然我认为它工作正常,但它生成的表达式树与 coopr3 系统生成的表达式树略有不同。这会影响大量 Pyomo 测试,我没有时间解决所有 (2000+) 测试差异以确保新结果正确。
此外,我应该指出 [截至 2017 年 12 月] 有一个 Pyomo 分支,其中包含修订版的 pyomo4 表达系统(目前称为 pyomo5)。这个系统有一个改进的方法来确保在没有 getrefcount()
(pypy 需要)的情况下表达式的正确性。不幸的是,pyomo5 表达式的开发与 coopr3/pyomo4 系统完全不同,以至于它们不能完全共存。当该分支合并时(可能是 2018 年 1 月),预计 coopr3 和 pyomo4 表达系统将从 master 中删除。