def _scip_solve(self, solver): """solves a mip/lp using scip""" if solver is None: solver = Model() solver.hideOutput() if self.config.disable_maxcuts: for param in [ 'separating/maxcuts', 'separating/maxcutsroot', 'propagating/maxrounds', 'propagating/maxroundsroot', 'presolving/maxroundsroot' ]: solver.setIntParam(param, 0) solver.setBoolParam('conflict/enable', False) solver.setPresolve(SCIP_PARAMSETTING.OFF) solver.setBoolParam('randomization/permutevars', True) # seed is set to 0 permanently. solver.setIntParam('randomization/permutationseed', 0) solver.setIntParam('randomization/randomseedshift', 0) with U.Timer() as timer: solver.optimize() assert solver.getStatus() == 'optimal', solver.getStatus() obj = float(solver.getObjVal()) ass = {var.name: solver.getVal(var) for var in solver.getVars()} mip_stats = ConfigDict(mip_work=solver.getNNodes(), n_cuts=solver.getNCuts(), n_cuts_applied=solver.getNCutsApplied(), n_lps=solver.getNLPs(), solving_time=solver.getSolvingTime(), pre_solving_time=solver.getPresolvingTime(), time_elapsed=timer.to_seconds()) return ass, obj, mip_stats
def convert(): milp = MILP() milp.problem_type = args.problem_type model = Model() model.hideOutput() heur = LogBestSol() model.includeHeur(heur, "PyHeur", "custom heuristic implemented in python", "Y", timingmask=SCIP_HEURTIMING.BEFORENODE) model.setRealParam('limits/gap', args.gap) model.readProblem(args.inp_file) milp.mip = scip_to_milps(model) model.optimize() heur.done() milp.optimal_objective = model.getObjVal() milp.optimal_solution = { var.name: model.getVal(var) for var in model.getVars() } milp.is_optimal = (model.getStatus() == 'optimal') milp.optimal_sol_metadata.n_nodes = model.getNNodes() milp.optimal_sol_metadata.gap = model.getGap() milp.optimal_sol_metadata.primal_integral = heur.primal_integral milp.optimal_sol_metadata.primal_gaps = heur.l feasible_sol = model.getSols()[-1] milp.feasible_objective = model.getSolObjVal(feasible_sol) milp.feasible_solution = { var.name: model.getSolVal(feasible_sol, var) for var in model.getVars() } model = Model() model.hideOutput() relax_integral_constraints(milp.mip).add_to_scip_solver(model) model.optimize() assert model.getStatus() == 'optimal' milp.optimal_lp_sol = { var.name: model.getVal(var) for var in model.getVars() } return milp