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
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)