def solver_statistics(solver_type, solver):
    time_optimizer = None
    d_solver = {}

    if solver_type == "cp":
        d_solver["n_booleans"] = solver.NumBooleans()
        d_solver["n_branches"] = solver.NumBranches()
        d_solver["n_conflicts"] = solver.NumConflicts()
        d_solver["objective"] = int(solver.ObjectiveValue())
        d_solver["best_objective_bound"] = int(solver.BestObjectiveBound())

        time_optimizer = solver.WallTime()

    elif solver_type == "mip":
        d_solver["n_constraints"] = solver.NumConstraints()
        d_solver["n_variables"] = solver.NumVariables()
        d_solver["objective"] = solver.Objective().Value()
        d_solver["best_bound"] = solver.Objective().BestBound()

    elif solver_type == "ls":
        if not LOCALSOLVER_AVAILABLE:
            raise ImportError('Cannot import localsolver. Install LocalSolver '
                              'or choose another solver, options are "cp" and '
                              '"mip".')

        d_solver["n_iterations"] = LSStatistics.get_nb_iterations(
            solver.statistics)

    elif solver_type == "lp":
        d_solver["n_variables"] = solver.n_variables
        d_solver["n_constraints"] = solver.n_constraints
        d_solver["n_iterations"] = solver.n_iterations
        d_solver["objective"] = solver.objective

    return d_solver, time_optimizer
Esempio n. 2
0
def print_solver_statistics(solver_type, solver):
    if solver_type == "cp":
        n_booleans = solver.NumBooleans()
        n_branches = solver.NumBranches()
        n_conflicts = solver.NumConflicts()
        objective = int(solver.ObjectiveValue())
        best_objective_bound = int(solver.BestObjectiveBound())

        solver_stats = (
            "  Solver statistics\n"
            "    Type                          {:>10}\n"
            "    Number of booleans            {:>10}\n"
            "    Number of branches            {:>10}\n"
            "    Number of conflicts           {:>10}\n"
            "    Objective value               {:>10}\n"
            "    Best objective bound          {:>10}\n"
            ).format(solver_type, n_booleans, n_branches, n_conflicts,
                     objective, best_objective_bound)
    elif solver_type == "mip":
        n_constraints = solver.NumConstraints()
        n_variables = solver.NumVariables()
        objective = solver.Objective().Value()
        best_bound = solver.Objective().BestBound()

        solver_stats = (
            "  Solver statistics\n"
            "    Type                          {:>10}\n"
            "    Number of variables           {:>10}\n"
            "    Number of constraints         {:>10}\n"
            "    Objective value               {:>10.4f}\n"
            "    Best objective bound          {:>10.4f}\n"
            ).format(solver_type, n_variables, n_constraints, objective,
                     best_bound)
    elif solver_type == "ls":
        if not LOCALSOLVER_AVAILABLE:
            raise ImportError('Cannot import localsolver. Install LocalSolver '
                              'or choose another solver, options are "cp" and '
                              '"mip".')

        n_iterations = LSStatistics.get_nb_iterations(solver.statistics)
        solver_stats = (
            "  Solver statistics\n"
            "    Type                          {:>10}\n"
            "    Number of iterations          {:>10}\n"
            ).format(solver_type, n_iterations)

    print(solver_stats)