Source code for experiments.jUFLP_wCPPMIP

"""An experiment for joint UFLP + special instance type (cavemen).

A version with CPP MIP.
"""
from jUFLP_cavemen import gen_cavemen_jUFLP_inst, solve_cm_jUFLP_MIP
from jUFLP_cavemen import solve_cm_jUFLP_CPPMIP_fullDDs
from jUFLP_cavemen import save_inst, solve_cm_jUFLP_fullDDs
from time import time


[docs]def main(): print("experiment, n, M, L, tMIP, tMIP_CPP, tDD_toA, tDD_toB, tDD_VS, int_toA, int_toB, int_VS") M = 5 L = 0.50 i = 1 while True: for n in range(5, 10): i1, i2, jm = gen_cavemen_jUFLP_inst(n, M, L) # save_inst(i1, i2, jm, f"instances/jUFLP_cm/inst_wCPPMIP_{i}.json") print("---") t0 = time() objMIP = solve_cm_jUFLP_MIP(i1, i2, jm) tMIP = time() - t0 print(f"✅ MIP in {tMIP:.2f} sec") # solve with CPP MIP t0 = time() objMIP_CPP = solve_cm_jUFLP_CPPMIP_fullDDs(i1, i2, jm) tMIP_CPP = time() - t0 print(f"✅ CPP MIP in {tMIP_CPP:.2f} sec") t0 = time() objDD, int_toA = solve_cm_jUFLP_fullDDs(i1, i2, jm, "toA", True) tDD_toA = time() - t0 print(f"✅ Full DDs toA in {tDD_toA:.2f} sec") t0 = time() objDD2, int_toB = solve_cm_jUFLP_fullDDs(i1, i2, jm, "toB", True) tDD_toB = time() - t0 print(f"✅ Full DDs toB in {tDD_toB:.2f} sec") t0 = time() objDD3, int_VS = solve_cm_jUFLP_fullDDs(i1, i2, jm, "VS", True) tDD_VS = time() - t0 print(f"✅ Full DDs VS in {tDD_VS:.2f} sec") assert abs(objMIP - objMIP_CPP) < 0.01, f"objMIP = {objMIP:.2f}, objMIP_CPP={objMIP_CPP:.2f}" assert abs(objMIP - objDD)< 0.01, f"objMIP = {objMIP:.2f}, objDD={objDD:.2f}" assert abs(objMIP - objDD2)< 0.01, f"objMIP = {objMIP:.2f}, objDD2={objDD2:.2f}" assert abs(objMIP - objDD3)< 0.01, f"objMIP = {objMIP:.2f}, objDD3={objDD3:.2f}" print(f"{i}, {n}, {M}, {L}, {tMIP:.2f}, {tMIP_CPP:.2f}, {tDD_toA:.2f}, {tDD_toB:.2f}, {tDD_VS:.2f}, {int_toA}, {int_toB}, {int_VS}", flush=True) i += 1
if __name__ == '__main__': main()