fork
Configure Feed
Select the types of activity you want to include in your feed.
this repo has no description
fork
Configure Feed
Select the types of activity you want to include in your feed.
1import minizinc
2
3
4def pareto_front(instance, objectives):
5 front = []
6 result = None
7 with instance.branch() as instance:
8 failed = False
9 while not failed:
10 result = instance.solve()
11 # print(result)
12 # print("----------------------------------------")
13 if result == None or result.status == minizinc.Status.UNSATISFIABLE:
14 failed = True
15 else:
16 to_remove = []
17 for i in range(len(front)):
18 if all([result[o] <= front[i][o] for o in objectives]):
19 to_remove.append(i)
20 # print(to_remove[::-1])
21 for r in to_remove[::-1]:
22 front.pop(r)
23 instance.add_string(
24 "constraint "
25 + " \/ ".join([f"{o} < {result[o]}" for o in objectives])
26 + ";\n"
27 )
28 front.append(result)
29 return front
30
31
32if __name__ == "__main__":
33 inst = minizinc.Instance(
34 minizinc.Solver.lookup("gurobi"), minizinc.Model("dlmo.mzn")
35 )
36 inst.add_file("full.dzn")
37 inst.add_file("sri.dzn")
38
39 front = pareto_front(inst, ["total_samples", "total_not_detected"])
40 front = sorted(front, key=lambda sol: sol["num_samples"])
41
42 for sol in front:
43 print(
44 ",".join(
45 [
46 str(sol["first_sample"]),
47 str(sol["num_samples"]),
48 str(sol["total_samples"]),
49 str(sol["num_patients"] - sol["total_not_detected"]),
50 str(sol["num_before"]),
51 str(sol["num_after"]),
52 ]
53 )
54 )
55 print("----------------------------------------------------")
56 for sol in front:
57 print(sol)