为什么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
可以使用以下选项切换表达式树系统:
Pyomo4表达式一直是一个(长期运行的)开发活动,用于简化表达式树系统、提高性能,最重要的是提供对pypy的支持。虽然我认为它工作正常,但它生成的表达式树与coopr3系统生成的表达式树稍有不同,所以没有将其设为默认值。这会影响大量的Pyomo测试,我还没来得及解决所有(2000+)测试差异,以确保新结果是正确的。你知道吗
另外,我要指出的是[截至2017年12月]有一个Pyomo分支,其pyomo4表达系统的修订版本(目前称为pyomo5)。这个系统有一个改进的方法来确保在缺少
getrefcount()
(pypy需要)的情况下表达式的正确性。不幸的是,pyomo5表达的发展与coopr3/pyomo4系统有很大的分歧,以至于它们不能完全共存。当该分支合并时(可能是2018年1月),coopr3和pyomo4表达系统都将从master中移除。你知道吗相关问题 更多 >
编程相关推荐