#!/usr/bin/env python import sys from pulp import * from itertools import chain setcontents = [line.split() for line in open(sys.argv[1]).readlines()] sets = range(len(setcontents)) elements = set(chain(*setcontents)) chosen = LpVariable.dicts('If chosen', sets, 0, 1, LpInteger) model = LpProblem('Set cover', LpMinimize) model += lpSum(chosen), "Chosen sets" for j in elements: model += lpSum(chosen[i] for i in sets if j in setcontents[i]) >= 1, \ "Element %s" % j model.writeLP('setcover.lp') pulp.CPLEX_CMD().solve(model) print "\nNeed to use at least %d sets: " % model.objective.value() for i in sets: if chosen[i].value() == 1: print setcontents[i]