OR-Tools

Google OR-Tools is a powerful toolkit for solving complex optimization problems. It provides a suite of algorithms and heuristics for a wide range of optimization tasks, including linear programming, integer programming, constraint programming, and more. OR-Tools is designed to be highly efficient and scalable, making it an ideal choice for solving large-scale optimization problems.

from ortools.sat.python import cp_model

model = cp_model.CpModel()

persons = ['Tony', 'Bob', 'Ann', 'Carl', 'Amber', 'Peter']
person_vars = {p: model.NewBoolVar(p) for p in persons}

group1 = ['Bob', 'Ann', 'Carl', 'Amber', 'Peter']
model.Add(sum(person_vars[p] for p in group1) == 2)

group2 = ['Bob', 'Amber']
model.Add(sum(person_vars[p] for p in group2) == 1)

model.Add(person_vars['Amber'] == 1)

model.Add(sum(person_vars.values()) == 4)

solver = cp_model.CpSolver()
status = solver.Solve(model)

if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE:
    print("Solution found:")
    for person, var in person_vars.items():
        if solver.Value(var):
            print(person)
else:
    print("No solution found.")