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

64
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?

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

Паулин

спросил(а) 2017-02-08T16:48:00+03:00 4 года, 7 месяцев назад
1
Решение
101

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

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

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

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

ответил(а) 2017-02-08T18:56:00+03:00 4 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема