Pyomo / PyomoGallery

A collection of Pyomo examples
Other
284 stars 158 forks source link

Network interdiction problems are broken #15

Open stigrs opened 4 years ago

stigrs commented 4 years ago

I get the following error when I try to run, e.g., the min_cost_flow_interdict example:

`MultiIndex([( 'B', 'End'), ( 'C', 'B'), ( 'C', 'D'), ( 'D', 'End'), ('Start', 'B'), ('Start', 'C')], names=['StartNode', 'EndNode']) ERROR: Constructing component 'edge_set' from data=None failed: ValueError: The truth value of a MultiIndex is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

ValueError Traceback (most recent call last)

in 227 228 if __name__ == '__main__': --> 229 m = MinCostFlowInterdiction('sample_nodes_data.csv', 'sample_arcs_data.csv') 230 m.solve() 231 m.printSolution() in __init__(self, nodefile, arcfile, attacks) 44 self.nCmax = len(self.node_set) * self.arc_data['Cost'].max() 45 ---> 46 self.createPrimal() 47 self.createInterdictionDual() 48 in createPrimal(self) 59 # Add the sets 60 model.node_set = pe.Set( initialize=self.node_set ) ---> 61 model.edge_set = pe.Set( initialize=self.arc_set, dimen=2) 62 63 # Create the variables C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\block.py in __setattr__(self, name, val) 541 # Pyomo components are added with the add_component method. 542 # --> 543 self.add_component(name, val) 544 else: 545 # C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\block.py in add_component(self, name, val) 1079 _blockName, str(data)) 1080 try: -> 1081 val.construct(data) 1082 except: 1083 err = sys.exc_info()[1] C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\util.py in construct(self, data) 123 self._name = base.__name__ 124 self.__class__ = base --> 125 return base.construct(self, data) 126 construct.__doc__ = base.construct.__doc__ 127 cls.construct = construct C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\set.py in construct(self, data) 1987 # Bypass the index validation and create the member directly 1988 for index in self.index_set(): -> 1989 self._getitem_when_not_present(index) 1990 finally: 1991 # Restore the original initializer (if overridden by data argument) C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\set.py in _getitem_when_not_present(self, index) 2030 self._init_values._dimen = _d 2031 try: -> 2032 _values = self._init_values(_block, index) 2033 except TuplizeError as e: 2034 raise ValueError( str(e) % ( C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pyomo\core\base\set.py in __call__(self, parent, index) 412 elif _val is Set.Skip: 413 return _val --> 414 elif not _val: 415 return _val 416 C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas\core\indexes\base.py in __nonzero__(self) 2148 def __nonzero__(self): 2149 raise ValueError( -> 2150 f"The truth value of a {type(self).__name__} is ambiguous. " 2151 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." 2152 ) ValueError: The truth value of a MultiIndex is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().`