Ошибка при генерации выражения pyomo с суммой с использованием python 3.6

Я использую pyomo Pyomo 5.1.1 (CPython 3.6.0 в Linux 3.16.0-4-amd64) под Python 3.6 и получаю сообщение об ошибке, когда хочу построить выражение в модели с помощью суммирования. Вот минимальный пример:

from pyomo.environ import *
from pyomo.opt import SolverFactory
model=ConcreteModel()
model.H=RangeSet(0,23)
model.x=Var(model.H)
E=summation(model.x)

Я получаю следующую ошибку:

"

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/b67777/anaconda3/lib/python3.6/site-packages/pyomo/core/base/util.py", line 86, in summation
    ans += item
  File "/home/b67777/anaconda3/lib/python3.6/site-packages/pyomo/core/base/numvalue.py", line 537, in __iadd__
    return generate_expression(_iadd,self,other)
  File "/home/b67777/anaconda3/lib/python3.6/site-packages/pyomo/core/base/expr_coopr3.py", line 977, in generate_expression
    _self = _generate_expression__clone_if_needed(_self, 1)
  File "/home/b67777/anaconda3/lib/python3.6/site-packages/pyomo/core/base/expr_coopr3.py", line 918, in _generate_expression__clone_if_needed
    % ( getrefcount(obj) - UNREFERENCED_EXPR_COUNT, ))
RuntimeError: Expression entered generate_expression() with too few references (0<0); this is indicative of a SERIOUS ERROR in the expression reuse detection scheme.

"

Я получаю ту же ошибку, если заменил «суммирование» циклом по h в model.H.

Ошибка была замечена и здесь: https://github.com/Pyomo/pyomo/issues/ 103

Есть ли простой способ исправить это, кроме как вернуться к более старой версии Python?

Большое спасибо за Вашу помощь,

Паулин


person Paulin Jacquot    schedule 08.02.2017    source источник


Ответы (1)


Pyomo поддерживает только Python 2.6, 2.7, 3.3, 3.4 и 3.5.

Python 3.6 изменил внутренний стек вызовов, что сделало недействительными внутренние «магические числа», которые Pyomo использует для обнаружения, когда на выражение указывают дополнительные переменные (т. деревья выражений пиомо). Разработчики работают над исправлением (в ветке pyomo4-expressions). Пока это исправление не будет объединено с основным и выпущено, единственная альтернатива — установить одну из поддерживаемых версий Python.


Обновление [3 – 17 апреля]: исправление было объединено с master 7 марта 2017 года. Pyomo должен поддерживать Python 3.6 в следующем выпуске исправления.


Обновление [14 мая 17]: выпущен Pyomo 5.2, обеспечивающий полную поддержку Python 3.6.

person jsiirola    schedule 08.02.2017