From 8f3f880afdc542472a961c22081845d3429564ce Mon Sep 17 00:00:00 2001 From: Alinson S Xavier Date: Wed, 15 Apr 2020 19:42:21 -0500 Subject: [PATCH] STAB: Switch to clique formulation --- src/python/miplearn/problems/stab.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/python/miplearn/problems/stab.py b/src/python/miplearn/problems/stab.py index 9919138..2854792 100644 --- a/src/python/miplearn/problems/stab.py +++ b/src/python/miplearn/problems/stab.py @@ -101,14 +101,13 @@ class MaxWeightStableSetInstance(Instance): def to_model(self): nodes = list(self.graph.nodes) - edges = list(self.graph.edges) self.model = model = pe.ConcreteModel() model.x = pe.Var(nodes, domain=pe.Binary) model.OBJ = pe.Objective(rule=lambda m : sum(m.x[v] * self.weights[v] for v in nodes), sense=pe.maximize) - model.edge_eqs = pe.ConstraintList() - for edge in edges: - model.edge_eqs.add(model.x[edge[0]] + model.x[edge[1]] <= 1) + model.clique_eqs = pe.ConstraintList() + for clique in nx.find_cliques(self.graph): + model.clique_eqs.add(sum(model.x[i] for i in clique) <= 1) return model