2017-12-06 13 views
0

Pyomo가 기본 표현식 유형 인 expr_coopr3.py을 사용하는 이유는 무엇입니까? 나는 그것이 바뀔 수있는 방법을 발견했다. 그러나 만일 그것이 바른 길이라면 나는 의심을 품는다. 파일에서기본적으로 pyomo 4 표현식으로 전환

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_availableFalse에 할당 할 수 있으며, 모든 pyomo 식으로 작동 후 4.이 할 수있는 다른 방법이 있나요? 나는 당신이 식 트리 시스템을 전환 할 수 있습니다 Pyomo 5.2

답변

1

사용하고

:

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

Pyomo4 식 성능을 향상, 표현 트리 시스템을 단순화하는 (장기 실행) 개발 활동이었다, 가장 중요한 것은 pypy에 대한 지원을 제공하는 것입니다. 그것은 제대로 작동한다고 생각하기 때문에 대부분 기본 설정이되어 있지 않습니다. 왜냐하면 coopr3 시스템이 생성 한 것과는 약간 다른 표현 트리가 생성되기 때문입니다. 이것은 많은 수의 Pyomo 테스트에 영향을 주며 새로운 결과가 정확한지 확인하기 위해 (2000+) 테스트 차이를 해결할 시간이 없었습니다.

또한 [2017 년 12 월 현재] pyomo4 표현 시스템 (현재 pyomo5라고 부름)의 개정판이있는 Pyomo 분기가 있음을 지적해야합니다. 이 시스템은 getrefcount() (pypy에 필요)이없는 경우 표현 정확성을 보장하는 향상된 방법을 제공합니다. 불행하게도, pyomo5 표현 hass의 개발은 coopr3/pyomo4 시스템에서 완전히 흩어져서 깨끗하게 공존하지 못합니다. 해당 지사가 병합되면 (2018 년 1 월), coopr3 및 pyomo4 표현 시스템이 모두 마스터에서 제거 될 것으로 예상됩니다.