Set Cover - greedy heuristic

Problem: choose a minimum-cost collection of subsets whose union covers every required element.

Show code
import {
  GreedySolutionGenerator,
  initSetCover,
  SetCoverInvariant,
  SetCoverModel,
  setWorkerBridgeEnabled,
} from 'or-tools-wasm/set-cover';

setWorkerBridgeEnabled(true);
await initSetCover();

const model = new SetCoverModel();
model.add_empty_subset(2.0);
model.add_element_to_last_subset(0);
model.add_empty_subset(2.0);
model.add_element_to_last_subset(1);
model.add_empty_subset(1.0);
model.add_element_to_last_subset(0);
model.add_element_to_last_subset(1);

const inv = new SetCoverInvariant(model);
const greedy = new GreedySolutionGenerator(inv);
const hasFound = await greedy.next_solution();

if (hasFound) {
  const solution = inv.export_solution_as_proto();
  console.log(solution.cost, solution.subset);
}
  • Elements are the things that must be covered.
  • Each colored region is a subset with a cost and a fixed list of covered elements.
  • The greedy heuristic chooses subsets until every element is covered, while trying to keep cost low.
  • After solving, chosen subsets and covered elements are highlighted.

Solution

Run the solver to view the solution.

Status: