From 2bb04de3270e1c6998b9c85db18e52a5ffe62b34 Mon Sep 17 00:00:00 2001 From: Nolwen Date: Fri, 4 Oct 2024 19:16:56 +0200 Subject: [PATCH] Update solvers_map's - add mathopt and cpsat when missing - put them before gurobi and minizinc respectively - remove default args that are already the same in solvers --- .../coloring/coloring_solvers.py | 56 ++++++++----------- .../facility/facility_solvers.py | 20 +++---- .../knapsack/knapsack_solvers.py | 11 ++-- .../maximum_independent_set/mis_solvers.py | 7 +-- discrete_optimization/rcpsp/rcpsp_solvers.py | 36 +++--------- .../rcpsp_multiskill_solvers.py | 25 ++++----- .../solvers/ms_rcpsp_ga_solver.py | 6 +- 7 files changed, 63 insertions(+), 98 deletions(-) diff --git a/discrete_optimization/coloring/coloring_solvers.py b/discrete_optimization/coloring/coloring_solvers.py index 0181013b..cfe25e1f 100644 --- a/discrete_optimization/coloring/coloring_solvers.py +++ b/discrete_optimization/coloring/coloring_solvers.py @@ -7,16 +7,25 @@ from typing import Any from discrete_optimization.coloring.solvers.coloring_asp_solver import ColoringASPSolver -from discrete_optimization.coloring.solvers.coloring_cp_solvers import ( - ColoringCP, - ColoringCPModel, -) +from discrete_optimization.coloring.solvers.coloring_cp_solvers import ColoringCP from discrete_optimization.coloring.solvers.coloring_cpsat_solver import ( ColoringCPSatSolver, ModelingCPSat, ) -from discrete_optimization.coloring.solvers.coloring_lp_solvers import ColoringLP +from discrete_optimization.coloring.solvers.coloring_lp_solvers import ( + ColoringLP, + ColoringLPMathOpt, +) from discrete_optimization.coloring.solvers.coloring_solver import SolverColoring +from discrete_optimization.coloring.solvers.greedy_coloring import ( + ColoringProblem, + GreedyColoring, +) +from discrete_optimization.generic_tools.cp_tools import ParametersCP +from discrete_optimization.generic_tools.do_problem import Problem +from discrete_optimization.generic_tools.result_storage.result_storage import ( + ResultStorage, +) try: import pytoulbar2 @@ -30,45 +39,28 @@ toulbar2_available = True -from discrete_optimization.coloring.solvers.greedy_coloring import ( - ColoringProblem, - GreedyColoring, - NXGreedyColoringMethod, -) -from discrete_optimization.generic_tools.cp_tools import CPSolverName, ParametersCP -from discrete_optimization.generic_tools.do_problem import Problem -from discrete_optimization.generic_tools.lp_tools import ParametersMilp -from discrete_optimization.generic_tools.result_storage.result_storage import ( - ResultStorage, -) - solvers: dict[str, list[tuple[type[SolverColoring], dict[str, Any]]]] = { "lp": [ ( ColoringLP, - { - "greedy_start": True, - "use_cliques": False, - "parameters_milp": ParametersMilp.default(), - }, + {}, ), - ], - "cp": [ ( - ColoringCP, - { - "cp_solver_name": CPSolverName.CHUFFED, - "cp_model": ColoringCPModel.DEFAULT, - "parameters_cp": ParametersCP.default(), - "object_output": True, - }, + ColoringLPMathOpt, + {}, ), + ], + "cp": [ ( ColoringCPSatSolver, {"modeling": ModelingCPSat.BINARY, "parameters_cp": ParametersCP.default()}, ), + ( + ColoringCP, + {}, + ), ], - "greedy": [(GreedyColoring, {"strategy": NXGreedyColoringMethod.best})], + "greedy": [(GreedyColoring, {})], "asp": [(ColoringASPSolver, {"time_limit": 5})], } if toulbar2_available: diff --git a/discrete_optimization/facility/facility_solvers.py b/discrete_optimization/facility/facility_solvers.py index 66e0b7d0..79dc3fb5 100644 --- a/discrete_optimization/facility/facility_solvers.py +++ b/discrete_optimization/facility/facility_solvers.py @@ -15,7 +15,7 @@ from discrete_optimization.facility.solvers.facility_lp_solver import ( LP_Facility_Solver, LP_Facility_Solver_CBC, - ParametersMilp, + LP_Facility_Solver_MathOpt, ) from discrete_optimization.facility.solvers.facility_solver import SolverFacility from discrete_optimization.facility.solvers.greedy_solvers import ( @@ -30,23 +30,17 @@ solvers: dict[str, list[tuple[type[SolverFacility], dict[str, Any]]]] = { "lp": [ + ( + LP_Facility_Solver_MathOpt, + {}, + ), ( LP_Facility_Solver, - { - "parameters_milp": ParametersMilp.default(), - "use_matrix_indicator_heuristic": True, - "n_shortest": 10, - "n_cheapest": 10, - }, + {}, ), ( LP_Facility_Solver_CBC, - { - "parameters_milp": ParametersMilp.default(), - "use_matrix_indicator_heuristic": True, - "n_shortest": 10, - "n_cheapest": 10, - }, + {}, ), ], "cp": [ diff --git a/discrete_optimization/knapsack/knapsack_solvers.py b/discrete_optimization/knapsack/knapsack_solvers.py index 691fc75c..882319c0 100644 --- a/discrete_optimization/knapsack/knapsack_solvers.py +++ b/discrete_optimization/knapsack/knapsack_solvers.py @@ -4,7 +4,6 @@ from typing import Any -from discrete_optimization.generic_tools.cp_tools import CPSolverName from discrete_optimization.generic_tools.do_problem import Problem from discrete_optimization.generic_tools.lp_tools import ParametersMilp from discrete_optimization.generic_tools.result_storage.result_storage import ( @@ -18,6 +17,9 @@ from discrete_optimization.knapsack.solvers.dyn_prog_knapsack import KnapsackDynProg from discrete_optimization.knapsack.solvers.greedy_solvers import GreedyBest from discrete_optimization.knapsack.solvers.knapsack_asp_solver import KnapsackASPSolver +from discrete_optimization.knapsack.solvers.knapsack_cpsat_solver import ( + CPSatKnapsackSolver, +) from discrete_optimization.knapsack.solvers.knapsack_solver import SolverKnapsack from discrete_optimization.knapsack.solvers.lp_solvers import ( KnapsackORTools, @@ -33,10 +35,11 @@ ], "greedy": [(GreedyBest, {})], "cp": [ - (CPKnapsackMZN, {"cp_solver_name": CPSolverName.CHUFFED}), - (CPKnapsackMZN2, {"cp_solver_name": CPSolverName.CHUFFED}), + (CPSatKnapsackSolver, {}), + (CPKnapsackMZN, {}), + (CPKnapsackMZN2, {}), ], - "asp": [(KnapsackASPSolver, {"time_limit": 100})], + "asp": [(KnapsackASPSolver, {})], "dyn_prog": [ ( KnapsackDynProg, diff --git a/discrete_optimization/maximum_independent_set/mis_solvers.py b/discrete_optimization/maximum_independent_set/mis_solvers.py index 30f71542..94728dcc 100644 --- a/discrete_optimization/maximum_independent_set/mis_solvers.py +++ b/discrete_optimization/maximum_independent_set/mis_solvers.py @@ -6,8 +6,6 @@ from typing import Any -from discrete_optimization.coloring.solvers.coloring_cpsat_solver import ModelingCPSat -from discrete_optimization.generic_tools.cp_tools import ParametersCP from discrete_optimization.generic_tools.lp_tools import ParametersMilp from discrete_optimization.generic_tools.result_storage.result_storage import ( ResultStorage, @@ -30,7 +28,6 @@ from discrete_optimization.maximum_independent_set.solvers.mis_solver import MisSolver from discrete_optimization.maximum_independent_set.solvers.mis_toulbar import ( MisToulbarSolver, - toulbar_available, ) solvers: dict[str, list[tuple[type[MisSolver], dict[str, Any]]]] = { @@ -48,10 +45,10 @@ }, ), ], - "ortools": [ + "cp": [ ( MisOrtoolsSolver, - {"modeling": ModelingCPSat.BINARY, "parameters_cp": ParametersCP.default()}, + {}, ), ], "networkX": [(MisNetworkXSolver, {})], diff --git a/discrete_optimization/rcpsp/rcpsp_solvers.py b/discrete_optimization/rcpsp/rcpsp_solvers.py index b5b66238..50c6eb45 100644 --- a/discrete_optimization/rcpsp/rcpsp_solvers.py +++ b/discrete_optimization/rcpsp/rcpsp_solvers.py @@ -21,7 +21,6 @@ ParametersAltGa, ParametersGa, ) -from discrete_optimization.generic_tools.lp_tools import ParametersMilp from discrete_optimization.generic_tools.result_storage.result_storage import ( ResultStorage, ) @@ -44,7 +43,6 @@ LP_RCPSP_MATHOPT, ) from discrete_optimization.rcpsp.solver.rcpsp_pile import ( - GreedyChoice, PileSolverRCPSP, PileSolverRCPSP_Calendar, ) @@ -59,51 +57,35 @@ "lp": [ ( LP_RCPSP_MATHOPT, - { - "parameters_milp": ParametersMilp.default(), - }, + {}, ), ( LP_MRCPSP_MATHOPT, - { - "parameters_milp": ParametersMilp.default(), - }, + {}, ), ], "greedy": [ - (PileSolverRCPSP, {"greedy_choice": GreedyChoice.MOST_SUCCESSORS}), - (PileSolverRCPSP_Calendar, {"greedy_choice": GreedyChoice.MOST_SUCCESSORS}), + (PileSolverRCPSP, {}), + (PileSolverRCPSP_Calendar, {}), ], "cp": [ + (CPSatRCPSPSolver, {"parameters_cp": ParametersCP.default()}), ( CP_RCPSP_MZN, - { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - }, + {}, ), ( CP_MRCPSP_MZN, - { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - }, + {}, ), ( CP_RCPSP_MZN_PREEMPTIVE, - { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - }, + {}, ), ( CP_MRCPSP_MZN_PREEMPTIVE, - { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - }, + {}, ), - (CPSatRCPSPSolver, {"parameters_cp": ParametersCP.default()}), ], "critical-path": [(CPM, {})], "lns-scheduling": [ diff --git a/discrete_optimization/rcpsp_multiskill/rcpsp_multiskill_solvers.py b/discrete_optimization/rcpsp_multiskill/rcpsp_multiskill_solvers.py index 00b3dad2..032bc233 100644 --- a/discrete_optimization/rcpsp_multiskill/rcpsp_multiskill_solvers.py +++ b/discrete_optimization/rcpsp_multiskill/rcpsp_multiskill_solvers.py @@ -24,6 +24,9 @@ CP_MS_MRCPSP_MZN, CP_MS_MRCPSP_MZN_PREEMPTIVE, ) +from discrete_optimization.rcpsp_multiskill.solvers.cpsat_msrcpsp_solver import ( + CPSatMSRCPSPSolver, +) from discrete_optimization.rcpsp_multiskill.solvers.lp_model import ( LP_Solver_MRSCPSP_MathOpt, ) @@ -35,39 +38,33 @@ "lp": [ ( LP_Solver_MRSCPSP_MathOpt, - { - "parameters_milp": ParametersMilp.default(), - }, + {}, ) ], "cp": [ + ( + CPSatMSRCPSPSolver, + {}, + ), ( CP_MS_MRCPSP_MZN, - { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - "exact_skills_need": False, - }, + {}, ), ( CP_MS_MRCPSP_MZN_PREEMPTIVE, { - "cp_solver_name": CPSolverName.CHUFFED, - "parameters_cp": ParametersCP.default(), - "exact_skills_need": False, "nb_preemptive": 5, }, ), ], - "ls": [(LS_RCPSP_Solver, {"ls_solver": LS_SOLVER.SA, "nb_iteration_max": 20})], - "ga": [(GA_MSRCPSP_Solver, {"parameters_ga": ParametersAltGa.default_msrcpsp()})], + "ls": [(LS_RCPSP_Solver, {"nb_iteration_max": 20})], + "ga": [(GA_MSRCPSP_Solver, {})], "lns-scheduling": [ ( LargeNeighborhoodSearchScheduling, { "nb_iteration_lns": 100, "nb_iteration_no_improvement": 100, - "parameters_cp": ParametersCP.default(), }, ) ], diff --git a/discrete_optimization/rcpsp_multiskill/solvers/ms_rcpsp_ga_solver.py b/discrete_optimization/rcpsp_multiskill/solvers/ms_rcpsp_ga_solver.py index ee44d992..a34ef73a 100644 --- a/discrete_optimization/rcpsp_multiskill/solvers/ms_rcpsp_ga_solver.py +++ b/discrete_optimization/rcpsp_multiskill/solvers/ms_rcpsp_ga_solver.py @@ -11,9 +11,9 @@ class GA_MSRCPSP_Solver(SolverDO): problem: RCPSPModel - def solve( - self, parameters_ga: ParametersAltGa = ParametersAltGa.default_msrcpsp(), **args - ): + def solve(self, parameters_ga: ParametersAltGa = None, **args): + if parameters_ga is None: + parameters_ga = ParametersAltGa.default_msrcpsp() ga_solver = AlternatingGa( problem=self.problem, encodings=parameters_ga.encodings,