Интерфейс IPyomoTask уже определен

Я использую Pyomo, и я хотел бы провести серию оптимизаций, в которых некоторые результаты предыдущей оптимизации используются для следующей.

AgOpt.py

import pyomo
import pyomo.opt
from pyomo.environ import *
import numpy as np

AvailLand = 330
AvailWat = 945

AlfWat = 4
AlmWat = 1.5
CornWat = 2.5

AlfMaxY = 7
AlmMaxY = 6.5
CornMaxY = 7

AlfPrice = 132
AlmPrice = 610
CornPrice = 300

AlfCostAcre = 681
AlmCostAcre = 3478
CornCostAcre = 610

N=[1,2,3]

model = ConcreteModel()
model.x = Var(N, within=NonNegativeReals)
model.Obj = Objective(expr=model.x[1]*(AlfMaxY*AlfPrice-AlfCostAcre)+\
                      model.x[2]*(AlmMaxY*AlmPrice-AlmCostAcre)+\
                      model.x[3]*(CornMaxY*CornPrice-CornCostAcre), sense=maximize)
model.con1=Constraint(expr=model.x[1]<=100.1)
model.con2=Constraint(expr=model.x[2]<=30.03)
model.con3=Constraint(expr=model.x[3]<=200.2)
model.con4=Constraint(expr=model.x[1]+model.x[2]+model.x[3]<=330)

model.dual=Suffix(direction=Suffix.IMPORT_EXPORT)


opt = SolverFactory("glpk")
results = opt.solve(model)
model.solutions.load_from(results)

results.write()
model.Obj.display()
model.x.display()
model.dual.display()

Проблема в том, что когда я решаю код (используя Spyder) один раз, во второй раз возникает эта ошибка:

"Интерфейс IPyomoTask уже определен"

И я должен выйти из Spyder и войти снова.

Любое предложение?

Версии Python и анаконды:

Python 3.5.2 | Anaconda 4.2.0 (64-разрядная версия) | (по умолчанию, 5 июля 2016 г., 11:41:13) [MSC v.1900 64 бит (AMD64)]

Traceback (most recent call last):

  File "<ipython-input-2-f27cc52b2eaf>", line 1, in <module>
    runfile('//fresno/users/escriva/Documents/Python Scripts/AgOpt.py', wdir='//fresno/users/escriva/Documents/Python Scripts')

  File "C:\Users\escriva\AppData\Local\Continuum\Anaconda2\envs\py35\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "C:\Users\escriva\AppData\Local\Continuum\Anaconda2\envs\py35\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "//fresno/users/escriva/Documents/Python Scripts/AgOpt.py", line 9, in <module>
    import pyomo.opt

  File "c:\users\escriva\appdata\local\continuum\anaconda2\envs\py35\lib\site-packages\pyomo-4.2.10784-py3.5.egg\pyomo\opt\__init__.py", line 10, in <module>
    from pyomo.util.plugin import PluginGlobals

  File "c:\users\escriva\appdata\local\continuum\anaconda2\envs\py35\lib\site-packages\pyomo-4.2.10784-py3.5.egg\pyomo\util\__init__.py", line 10, in <module>
    from pyomo.util._task import pyomo_api, PyomoAPIData, PyomoAPIFactory

  File "c:\users\escriva\appdata\local\continuum\anaconda2\envs\py35\lib\site-packages\pyomo-4.2.10784-py3.5.egg\pyomo\util\_task.py", line 102, in <module>
    class IPyomoTask(plugin.Interface):

  File "C:\Users\escriva\AppData\Local\Continuum\Anaconda2\envs\py35\lib\site-packages\PyUtilib-5.2.3601-py3.5.egg\pyutilib\component\core\core.py", line 600, in __new__
    raise PluginError("Interface %s has already been defined" % name)

PluginError: Interface IPyomoTask has already been defined

person Alvar Escriva-Bou    schedule 28.10.2016    source источник
comment
Можете ли вы опубликовать полную трассировку стека для ошибки, которую вы получаете? Кроме того, можете ли вы опубликовать драйвер, который вы используете в spyder? Ошибка исходит от системы плагинов, но я не могу воспроизвести ее с помощью простых моделей/драйверов.   -  person jsiirola    schedule 28.10.2016
comment
Я отредактировал вопрос, спасибо за ваш ответ. Позвольте мне знать, если вам нужно что-нибудь еще.   -  person Alvar Escriva-Bou    schedule 30.10.2016
comment
До сих пор мне не удалось воспроизвести это поведение на простом примере (я использую Python 3.5.2 со spyder, но не в anaconda, и пробовал Pyomo 4.2.10784, 4.4.1 и trunk). Можете ли вы поделиться своим AgOpt.py скриптом? Это может дать некоторые подсказки.   -  person jsiirola    schedule 30.10.2016
comment
Я включил код в вопрос. Спасибо за вашу помощь!!!   -  person Alvar Escriva-Bou    schedule 30.10.2016
comment
Я не могу воспроизвести поведение, которое вы видите, ни в CPython 3.5.2, ни в Anaconda 4.2.0. Тем не менее, есть пара вещей, которые бросаются в глаза: 1) У вас установлена ​​старая версия Pyomo (4.2). Сначала попробуйте удалить pyomo и pyutilib, затем установите текущую версию с conda install -c conda-forge pyomo 2) Вам не нужны строки import pyomo и import pyomo.opt в AgOpt.py. 3) у вас странная установка, когда у вас установлен python 3.5 в каталог anaconda2. Вы когда-нибудь меняли версии Anaconda?   -  person jsiirola    schedule 31.10.2016
comment
РЕШЕНО... Я использовал среду для запуска Python 3.5 (потому что я изначально использовал Python 2.7). Поэтому я удалил все и снова установил anaconda, используя только python 3.5, и теперь он работает. Спасибо за вашу помощь jsiirola!!!!   -  person Alvar Escriva-Bou    schedule 01.11.2016


Ответы (2)


РЕШЕНО... Я использовал среду для запуска Python 3.5 (потому что я изначально использовал Python 2.7). Поэтому я удалил все и снова установил anaconda, используя только python 3.5, и теперь он работает.

person Alvar Escriva-Bou    schedule 01.11.2016

Возможно, в качестве дополнительного понимания этой проблемы кажется, что ваша установка Spyder пытается получить доступ к другому источнику PyUtillib.

Это произошло со мной после установки пользовательской версии Pyomo (с conda install -c conda-forge pyomo and pyutillib), а затем перехода на версию для разработчиков (клонирование репозиториев git).

Чтобы решить эту проблему, достаточно было удалить пакеты, управляемые Anaconda, через conda-forge (conda remove -c conda-forge pyomo and pyutillib), а затем следуя инструкциям по установке здесь: https://github.com/Pyomo/pyomo/issues/90#issuecomment-335051682.

person David Bernal    schedule 04.09.2018