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: