由defau切换到pyomo4表达式

2024-09-30 06:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么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一起工作。还有别的办法吗?你知道吗

我用的是pyomo5.2


Tags: pyfalse表达式modesyscommonloggertrees
1条回答
网友
1楼 · 发布于 2024-09-30 06:24:05

可以使用以下选项切换表达式树系统:

import pyomo.core.base.expr as EXPR
EXPR.set_expression_tree_format(EXPR.common.Mode.pyomo4_trees)

Pyomo4表达式一直是一个(长期运行的)开发活动,用于简化表达式树系统、提高性能,最重要的是提供对pypy的支持。虽然我认为它工作正常,但它生成的表达式树与coopr3系统生成的表达式树稍有不同,所以没有将其设为默认值。这会影响大量的Pyomo测试,我还没来得及解决所有(2000+)测试差异,以确保新结果是正确的。你知道吗

另外,我要指出的是[截至2017年12月]有一个Pyomo分支,其pyomo4表达系统的修订版本(目前称为pyomo5)。这个系统有一个改进的方法来确保在缺少getrefcount()(pypy需要)的情况下表达式的正确性。不幸的是,pyomo5表达的发展与coopr3/pyomo4系统有很大的分歧,以至于它们不能完全共存。当该分支合并时(可能是2018年1月),coopr3和pyomo4表达系统都将从master中移除。你知道吗

相关问题 更多 >

    热门问题