Понятия не имею, как определить набор ребер в pyomo
.
У меня есть сеть очень низкой плотности (разреженная) (точнее граф), где число ребер намного меньше, чем у полностью связного графа.
Я хочу определить набор ребер, чтобы я мог построить ограничения, связанные с ребрами.Однако я не могу сосредоточиться на том, что pyomo ожидает от меня, и все, что я делаю, приводит к невероятно бесполезным сообщениям об ошибках.
import pyomo
import pyomo.environ as pe
edges = [(0,1),(0,2),(1,2),(2,3),(2,4),(3,4)]
model = pe.ConcreteModel()
model.E = pe.Set(initialize=lambda _,i : edges[i]) # Edge set
Приведенный выше код выдает ошибку
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Joey\Python37\lib\site-packages\pyomo\core\base\block.py", line 568, in __setattr__
self.add_component(name, val)
File "C:\Users\Joey\Python37\lib\site-packages\pyomo\core\base\block.py", line 1008, in add_component
val.construct(data)
File "C:\Users\Joey\Python37\lib\site-packages\pyomo\core\base\sets.py", line 1221, in construct
self.add(val)
File "C:\Users\Joey\Python37\lib\site-packages\pyomo\core\base\sets.py", line 821, in add
self._verify(tmp)
File "C:\Users\Joey\Python37\lib\site-packages\pyomo\core\base\sets.py", line 772, in _verify
raise ValueError("The value="+str(element)+" is a tuple for set="+self.name+", which has dimen="+str(self.dimen))
ValueError: The value=(0, 2) is a tuple for set=E, which has dimen=1
Данное ребро полностью идентифицируется кортежем.Краевой соединительный узел 0
и узел 1
должны быть (0,1)
.Этот кортеж должен быть его идентификатором.Список таких идентификаторов имеет размерность 1. Поэтому я не уверен, что pyomo
ожидает от меня.