Beispiel #1
0
  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
Beispiel #2
0
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