Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
dlmo-model pareto.py
1.9 kB · 57 lines
Python
at develop
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import minizinc
def pareto_front(instance, objectives): front = [] result = None with instance.branch() as instance: failed = False while not failed: result = instance.solve() # print(result) # print("----------------------------------------") if result == None or result.status == minizinc.Status.UNSATISFIABLE: failed = True else: to_remove = [] for i in range(len(front)): if all([result[o] <= front[i][o] for o in objectives]): to_remove.append(i) # print(to_remove[::-1]) for r in to_remove[::-1]: front.pop(r) instance.add_string( "constraint " + " \/ ".join([f"{o} < {result[o]}" for o in objectives]) + ";\n" ) front.append(result) return front
if __name__ == "__main__": inst = minizinc.Instance( minizinc.Solver.lookup("gurobi"), minizinc.Model("dlmo.mzn") ) inst.add_file("full.dzn") inst.add_file("sri.dzn")
front = pareto_front(inst, ["total_samples", "total_not_detected"]) front = sorted(front, key=lambda sol: sol["num_samples"])
for sol in front: print( ",".join( [ str(sol["first_sample"]), str(sol["num_samples"]), str(sol["total_samples"]), str(sol["num_patients"] - sol["total_not_detected"]), str(sol["num_before"]), str(sol["num_after"]), ] ) ) print("----------------------------------------------------") for sol in front: print(sol)