diff --git a/topology.py b/topology.py index 54d47e8331330131ab57a5786d7c6bc4db52fe77..7b985e9f6a06e8c4c80f07019046bfa3bde13f33 100644 --- a/topology.py +++ b/topology.py @@ -64,10 +64,11 @@ class Connector: class Connection: - def __init__(self, in_flows, out_flows, loss_factor): + def __init__(self, in_flows, out_flows, loss_factor, capacity): self.in_flows = in_flows self.out_flows = out_flows self.loss_factor = loss_factor + self.capacity = capacity # def replace_flow(self, flow, replacement): # if flow in self.in_flows: @@ -173,7 +174,13 @@ class Topology: loss_factor = connection["loss_factor"] else: loss_factor = 0.0 - self._connections.append(Connection(in_flows, out_flows, loss_factor)) + if "capacity" in connection: + capacity = connection["capacity"] + else: + capacity = None + self._connections.append( + Connection(in_flows, out_flows, loss_factor, capacity) + ) # self._removed_flows = dict() @@ -418,6 +425,20 @@ class Topology: o_block.add(str(i) + "_sum", pyo.Constraint(o_block.T, rule=rule)) + if connection.capacity is not None: + capacity = connection.capacity + + def rule(m, t): + return ( + pyo.quicksum( + o_block.component_dict[in_flow][t] + for in_flow in connection.in_flows + ) + <= capacity + ) + + o_block.add(str(i) + "_capacity", pyo.Constraint(o_block.T, rule=rule)) + for logic_name, logic in self._additional_model_logic.items(): if logic["type"] == "ConnectorEnable": enable = logic["enable"]