discrete_optimization.rcpsp.solver package
Submodules
discrete_optimization.rcpsp.solver.cp_lns_methods_preemptive module
- class discrete_optimization.rcpsp.solver.cp_lns_methods_preemptive.PostProLeftShift(problem: RCPSPModelPreemptive, params_objective_function: ParamsObjectiveFunction | None = None, do_ls: bool = False, **kwargs)[source]
Bases:
PostProcessSolution
- build_other_solution(result_storage: ResultStorage) ResultStorage [source]
- discrete_optimization.rcpsp.solver.cp_lns_methods_preemptive.last_opti_solution(last_result_store: ResultStorage)[source]
- discrete_optimization.rcpsp.solver.cp_lns_methods_preemptive.sgs_variant(solution: RCPSPSolutionPreemptive, problem: RCPSPModelPreemptive, predecessors_dict)[source]
discrete_optimization.rcpsp.solver.cp_model_input module
- class discrete_optimization.rcpsp.solver.cp_model_input.CPModelEnum(value)[source]
Bases:
Enum
An enumeration.
- MODES = 'modes'
- MULTI = 'multi'
- MULTI_CALENDAR = 'multi-calendar'
- MULTI_CALENDAR_BOXES = 'multi-calendar-boxes'
- MULTI_FAKETASKS = 'multi-faketasks'
- MULTI_NO_BOOL = 'multi-no-bool'
- MULTI_PREEMPTIVE = 'multi-preemptive'
- MULTI_PREEMPTIVE_CALENDAR = 'multi-preemptive-calendar'
- MULTI_RESOURCE_FEASIBILITY = 'multi-resource-feasibility'
- SINGLE = 'single'
- SINGLE_PREEMPTIVE = 'single-preemptive'
- SINGLE_PREEMPTIVE_CALENDAR = 'single-preemptive-calendar'
discrete_optimization.rcpsp.solver.cp_solvers module
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_MRCPSP_MZN(problem: RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]
Bases:
MinizincCPSolver
,SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='cp_solver_name', default=<CPSolverName.CHUFFED: 0>, choices=[<CPSolverName.CHUFFED: 0>, <CPSolverName.GECODE: 1>, <CPSolverName.CPLEX: 2>, <CPSolverName.CPOPT: 3>, <CPSolverName.GUROBI: 4>, <CPSolverName.ORTOOLS: 5>, <CPSolverName.HIGHS: 6>])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: RCPSPModel
- retrieve_solution(_output_item: str | None = None, **kwargs: Any) RCPSPSolution [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
_output_item – string representing the minizinc solver output passed by minizinc to the solution constructor
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_MRCPSP_MZN_MODES(problem: RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None)[source]
Bases:
object
- problem: RCPSPModel
- retrieve_solutions(result, parameters_cp: ParametersCP)[source]
- solve(parameters_cp: ParametersCP | None = None, **args)[source]
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_MRCPSP_MZN_NOBOOL(problem: RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]
Bases:
MinizincCPSolver
,SolverRCPSP
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: RCPSPModel
- retrieve_solution(_output_item: str | None = None, **kwargs: Any) RCPSPSolution [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
_output_item – string representing the minizinc solver output passed by minizinc to the solution constructor
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_MRCPSP_MZN_PREEMPTIVE(problem: RCPSPModelPreemptive, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = True, **kwargs)[source]
Bases:
MinizincCPSolver
,SolverRCPSP
- constraint_duration_string_preemptive_i(task, duration, part_id=1, sign: SignEnum = SignEnum.EQUAL) str [source]
- constraint_ressource_requirement_at_time_t(time, ressource, ressource_number, sign: SignEnum = SignEnum.LEQ)[source]
- constraint_start_time_string_preemptive_i(task, start_time, part_id=1, sign: SignEnum = SignEnum.EQUAL) str [source]
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: RCPSPModelPreemptive
- retrieve_solution(_output_item: str | None = None, **kwargs: Any) RCPSPSolutionPreemptive [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
_output_item – string representing the minizinc solver output passed by minizinc to the solution constructor
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- discrete_optimization.rcpsp.solver.cp_solvers.CP_MRCPSP_MZN_WITH_FAKE_TASK(problem: RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction = None, silent_solve_error: bool = False, **kwargs)[source]
Deprecated since version 0.1.
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_RCPSP_MZN(problem: RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = True, **kwargs)[source]
Bases:
MinizincCPSolver
,SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='cp_solver_name', default=<CPSolverName.CHUFFED: 0>, choices=[<CPSolverName.CHUFFED: 0>, <CPSolverName.GECODE: 1>, <CPSolverName.CPLEX: 2>, <CPSolverName.CPOPT: 3>, <CPSolverName.GUROBI: 4>, <CPSolverName.ORTOOLS: 5>, <CPSolverName.HIGHS: 6>])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: RCPSPModel
- retrieve_solution(_output_item: str | None = None, **kwargs: Any) RCPSPSolution [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
_output_item – string representing the minizinc solver output passed by minizinc to the solution constructor
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- class discrete_optimization.rcpsp.solver.cp_solvers.CP_RCPSP_MZN_PREEMPTIVE(problem: RCPSPModelPreemptive, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = True, **kwargs)[source]
Bases:
CP_MRCPSP_MZN_PREEMPTIVE
- constraint_ressource_requirement_at_time_t(time, ressource, ressource_number, sign: SignEnum = SignEnum.LEQ)[source]
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: RCPSPModelPreemptive
- retrieve_solution(**kwargs: Any) RCPSPSolutionPreemptive [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- discrete_optimization.rcpsp.solver.cp_solvers.add_constraints_string(child_instance, list_of_strings)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.add_fake_task_cp_data(rcpsp_model: RCPSPModel | RCPSPModelPreemptive, ignore_fake_task: bool = True, max_time_to_consider: int | None = None)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.add_hard_special_constraints(partial_solution: PartialSolution, cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN | CP_MRCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.add_hard_special_constraints_mrcpsp(partial_solution: PartialSolution, cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.add_soft_special_constraints(partial_solution: PartialSolution, cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.add_soft_special_constraints_mrcpsp(partial_solution: PartialSolution, cp_solver: CP_MRCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.define_second_part_objective(weights, name_penalty, equal=False)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_end_window(end_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_after_nunit(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_after_nunit_mrcpsp(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_at_end(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_at_end_mrcpsp(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_at_end_plus_offset(list_start_at_end_plus_offset, cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_at_end_plus_offset_mrcpsp(list_start_at_end_plus_offset, cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_times(dict_start_times: Dict[Hashable, int], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_times_mrcpsp(dict_start_times: Dict[Hashable, int], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_together(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_together_mrcpsp(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.hard_start_window(start_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.precompute_possible_starting_time_interval(problem: RCPSPModelPreemptive)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_end_window(end_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_end_window_mrcpsp(end_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_after_nunit(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_after_nunit_mrcpsp(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_at_end(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_at_end_mrcpsp(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_at_end_plus_offset(list_start_at_end_plus_offset: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_at_end_plus_offset_mrcpsp(list_start_at_end_plus_offset: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_times(dict_start_times: Dict[Hashable, int], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_times_mrcpsp(dict_start_times: Dict[Hashable, int], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_together(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_RCPSP_MZN_PREEMPTIVE | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_together_mrcpsp(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_window(start_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_RCPSP_MZN | CP_MRCPSP_MZN_PREEMPTIVE | CP_RCPSP_MZN_PREEMPTIVE)[source]
- discrete_optimization.rcpsp.solver.cp_solvers.soft_start_window_mrcpsp(start_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MRCPSP_MZN | CP_MRCPSP_MZN_WITH_FAKE_TASK | CP_MRCPSP_MZN_NOBOOL)[source]
discrete_optimization.rcpsp.solver.cp_solvers_multiscenario module
- class discrete_optimization.rcpsp.solver.cp_solvers_multiscenario.CP_MULTISCENARIO(problem: AggregRCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]
Bases:
MinizincCPSolver
- property base_problem
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='cp_solver_name', default=<CPSolverName.CHUFFED: 0>, choices=[<CPSolverName.CHUFFED: 0>, <CPSolverName.GECODE: 1>, <CPSolverName.CPLEX: 2>, <CPSolverName.CPOPT: 3>, <CPSolverName.GUROBI: 4>, <CPSolverName.ORTOOLS: 5>, <CPSolverName.HIGHS: 6>]), CategoricalHyperparameter(name='relax_ordering', default=False, choices=[True, False]), IntegerHyperparameter(name='nb_incoherence_limit', default=3, low=0, high=10)]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- init_model(**args)[source]
Instantiate a CP model instance
Afterwards, self.instance should not be None anymore.
- problem: AggregRCPSPModel
- retrieve_solution(_output_item: str | None = None, **kwargs: Any) RCPSPSolution [source]
Return a d-o solution from the variables computed by minizinc.
- Parameters:
_output_item – string representing the minizinc solver output passed by minizinc to the solution constructor
**kwargs – keyword arguments passed by minzinc to the solution contructor containing the objective value (key “objective”), and the computed variables as defined in minizinc model.
Returns:
- discrete_optimization.rcpsp.solver.cp_solvers_multiscenario.add_fake_task_cp_data(rcpsp_model: RCPSPModel | RCPSPModelPreemptive, ignore_fake_task: bool = True, max_time_to_consider: int | None = None)[source]
discrete_optimization.rcpsp.solver.cpm module
- class discrete_optimization.rcpsp.solver.cpm.CPM(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None)[source]
Bases:
SolverRCPSP
- problem: RCPSPModel
- run_sgs_on_order(map_nodes: Dict[Any, CPMObject], critical_path: List[Any], total_order: List[Any] | None = None, cut_sgs_by_critical=True)[source]
- run_sgs_time_loop(map_nodes: Dict[Any, CPMObject], critical_path: List[Any], total_order: List[Any] | None = None)[source]
- solve(**kwargs) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
discrete_optimization.rcpsp.solver.cpsat_solver module
- class discrete_optimization.rcpsp.solver.cpsat_solver.CPSatRCPSPSolver(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
OrtoolsCPSatSolver
,SolverRCPSP
- add_classical_precedence_constraints(model: CpModel, starts_var: Dict[Hashable, IntVar], ends_var: Dict[Hashable, IntVar])[source]
- add_one_mode_selected_per_task(model: CpModel, is_present_var: Dict[Tuple[Hashable, int], IntVar], interval_per_tasks: Dict[Hashable, Set[Tuple[Hashable, int]]])[source]
- create_cumulative_constraint(model: CpModel, resource: str, interval_var: Dict[Tuple[Hashable, int], IntervalVar], is_present_var: Dict[Tuple[Hashable, int], IntVar], fake_task: List[Dict[str, int]])[source]
- create_fake_tasks() List[Dict[str, int]] [source]
Create tasks representing the variable resource availability. :return:
- create_mode_pair_constraint(model: CpModel, interval_per_tasks: Dict[Hashable, Set[Tuple[Hashable, int]]], is_present_var: Dict[Tuple[Hashable, int], IntVar], pair_mode_constraint: PairModeConstraint)[source]
- init_temporal_variable(model: CpModel) Tuple[Dict[Hashable, IntVar], Dict[Hashable, IntVar], Dict[Tuple[Hashable, int], IntVar], Dict[Tuple[Hashable, int], IntervalVar], Dict[Hashable, Set[Tuple[Hashable, int]]]] [source]
- retrieve_solution(cpsolvercb: CpSolverSolutionCallback) RCPSPSolution [source]
Construct a do solution from the cpsat solver internal solution.
It will be called each time the cpsat solver find a new solution. At that point, value of internal variables are accessible via cpsolvercb.Value(VARIABLE_NAME).
- Parameters:
cpsolvercb – the ortools callback called when the cpsat solver finds a new solution.
- Returns:
the intermediate solution, at do format.
- class discrete_optimization.rcpsp.solver.cpsat_solver.CPSatRCPSPSolverCumulativeResource(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
CPSatRCPSPSolver
Specific solver to minimize the minimum resource amount needed to accomplish the scheduling problem. In this version we sum up the resource for each given time to do the resource optimisation.
- create_cumulative_constraint_and_resource_capa(model: CpModel, resource: str, resource_capacity_var: Dict[str, IntVar], interval_var: Dict[Tuple[Hashable, int], IntervalVar], is_present_var: Dict[Tuple[Hashable, int], IntVar], fake_task: List[Dict[str, int]], use_overlap_for_disjunctive_resource: bool)[source]
- hyperparameters: List[Hyperparameter] = [CategoricalHyperparameter(name='use_overlap_for_disjunctive_resource', default=True, choices=[True, False])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- class discrete_optimization.rcpsp.solver.cpsat_solver.CPSatRCPSPSolverResource(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
CPSatRCPSPSolver
Specific solver to minimize the minimum resource amount needed to accomplish the scheduling problem. In this version we don’t sum up the resource at a given time, and it suits/makes sense mostly for disjunctive resource (machines)
discrete_optimization.rcpsp.solver.rcpsp_cp_lns_solver module
- class discrete_optimization.rcpsp.solver.rcpsp_cp_lns_solver.PostProcessLeftShift(rcpsp_problem: RCPSPModel, partial_solution: PartialSolution | None = None)[source]
Bases:
PostProcessSolution
- build_other_solution(result_storage: ResultStorage) ResultStorage [source]
discrete_optimization.rcpsp.solver.rcpsp_ga_solver module
- class discrete_optimization.rcpsp.solver.rcpsp_ga_solver.GA_MRCPSP_Solver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='crossover', default=None, choices=[<DeapCrossover.CX_UNIFORM: 0>, <DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED: 1>, <DeapCrossover.CX_ORDERED: 2>, <DeapCrossover.CX_ONE_POINT: 3>, <DeapCrossover.CX_TWO_POINT: 4>, <DeapCrossover.CX_PARTIALY_MATCHED: 5>]), EnumHyperparameter(name='selection', default=<DeapSelection.SEL_TOURNAMENT: 0>, choices=[<DeapSelection.SEL_TOURNAMENT: 0>, <DeapSelection.SEL_RANDOM: 1>, <DeapSelection.SEL_BEST: 2>, <DeapSelection.SEL_ROULETTE: 4>, <DeapSelection.SEL_WORST: 5>, <DeapSelection.SEL_STOCHASTIC_UNIVERSAL_SAMPLING: 6>]), IntegerHyperparameter(name='pop_size', default=100, low=1, high=1000), FloatHyperparameter(name='mut_rate', default=0.1, low=0, high=0.9), FloatHyperparameter(name='crossover_rate', default=0.9, low=0, high=1), FloatHyperparameter(name='tournament_size', default=0.2, low=0, high=1)]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- problem: RCPSPModel
- solve(parameters_ga: ~discrete_optimization.generic_tools.ea.ga_tools.ParametersAltGa = <discrete_optimization.generic_tools.ea.ga_tools.ParametersAltGa object>, **args)[source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- class discrete_optimization.rcpsp.solver.rcpsp_ga_solver.GA_RCPSP_Solver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='crossover', default=None, choices=[<DeapCrossover.CX_UNIFORM: 0>, <DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED: 1>, <DeapCrossover.CX_ORDERED: 2>, <DeapCrossover.CX_ONE_POINT: 3>, <DeapCrossover.CX_TWO_POINT: 4>, <DeapCrossover.CX_PARTIALY_MATCHED: 5>]), EnumHyperparameter(name='selection', default=<DeapSelection.SEL_TOURNAMENT: 0>, choices=[<DeapSelection.SEL_TOURNAMENT: 0>, <DeapSelection.SEL_RANDOM: 1>, <DeapSelection.SEL_BEST: 2>, <DeapSelection.SEL_ROULETTE: 4>, <DeapSelection.SEL_WORST: 5>, <DeapSelection.SEL_STOCHASTIC_UNIVERSAL_SAMPLING: 6>]), IntegerHyperparameter(name='pop_size', default=100, low=1, high=1000), FloatHyperparameter(name='mut_rate', default=0.1, low=0, high=0.9), FloatHyperparameter(name='crossover_rate', default=0.9, low=0, high=1), FloatHyperparameter(name='tournament_size', default=0.2, low=0, high=1)]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- problem: RCPSPModel
- solve(parameters_ga: ParametersGa | None = None, **args)[source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver module
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.ConstraintHandlerFixStartTime(problem: RCPSPModel, fraction_fix_start_time: float = 0.9)[source]
Bases:
ConstraintHandler
- adding_constraint_from_results_store(milp_solver: LP_RCPSP, result_storage: ResultStorage) Mapping[Hashable, Any] [source]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.ConstraintHandlerStartTimeInterval(problem: RCPSPModel, fraction_to_fix: float = 0.9, minus_delta: int = 2, plus_delta: int = 2)[source]
Bases:
ConstraintHandler
- adding_constraint_from_results_store(milp_solver: LP_RCPSP, result_storage: ResultStorage) Mapping[Hashable, Any] [source]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.ConstraintHandlerStartTimeIntervalMRCPSP(problem: RCPSPModel, fraction_to_fix: float = 0.9, minus_delta: int = 2, plus_delta: int = 2)[source]
Bases:
ConstraintHandler
- adding_constraint_from_results_store(milp_solver: LP_MRCPSP, result_storage: ResultStorage) Mapping[Hashable, Any] [source]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.ConstraintHandlerStartTimeIntervalMRCPSP_GRB(problem: RCPSPModel, fraction_to_fix: float = 0.9, minus_delta: int = 2, plus_delta: int = 2)[source]
Bases:
ConstraintHandler
- adding_constraint_from_results_store(milp_solver: LP_MRCPSP_GUROBI, result_storage: ResultStorage) Mapping[Hashable, Any] [source]
- remove_constraints_from_previous_iteration(milp_solver: LP_MRCPSP_GUROBI, previous_constraints: Mapping[Hashable, Any])[source]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.InitialMethodRCPSP(value)[source]
Bases:
Enum
An enumeration.
- CP = 5
- DUMMY = 0
- GA = 4
- LS = 3
- PILE = 1
- PILE_CALENDAR = 2
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.InitialSolutionRCPSP(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, initial_method: InitialMethodRCPSP = InitialMethodRCPSP.PILE)[source]
Bases:
InitialSolution
- get_starting_solution() ResultStorage [source]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_lns_solver.LNS_LP_RCPSP_SOLVER(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
SolverRCPSP
- problem: RCPSPModel
- solve(callbacks: List[Callback] | None = None, **kwargs) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
discrete_optimization.rcpsp.solver.rcpsp_lp_solver module
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver.LP_MRCPSP(problem: RCPSPModel, lp_solver: MilpSolverName = MilpSolverName.CBC, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
PymipMilpSolver
,_BaseLP_MRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='lp_solver', default=<MilpSolverName.CBC: 0>, choices=[<MilpSolverName.CBC: 0>, <MilpSolverName.GRB: 1>]), CategoricalHyperparameter(name='greedy_start', default=True, choices=[True, False])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- init_model(**args)[source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- solve(parameters_milp: ParametersMilp | None = None, **kwargs) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver.LP_MRCPSP_GUROBI(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
GurobiMilpSolver
,_BaseLP_MRCPSP
- hyperparameters: List[Hyperparameter] = [CategoricalHyperparameter(name='greedy_start', default=True, choices=[True, False])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver.LP_RCPSP(problem: RCPSPModel, lp_solver: MilpSolverName = MilpSolverName.CBC, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
PymipMilpSolver
,SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='lp_solver', default=<MilpSolverName.CBC: 0>, choices=[<MilpSolverName.CBC: 0>, <MilpSolverName.GRB: 1>]), CategoricalHyperparameter(name='greedy_start', default=True, choices=[True, False])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- init_model(**args)[source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- problem: RCPSPModel
- retrieve_current_solution(get_var_value_for_current_solution: Callable[[Any], float], get_obj_value_for_current_solution: Callable[[], float]) RCPSPSolution [source]
Retrieve current solution from internal gurobi solution.
This converts internal gurobi solution into a discrete-optimization Solution. This method can be called after the solve in retrieve_solutions() or during solve within a gurobi/pymilp/cplex callback. The difference will be the get_var_value_for_current_solution and get_obj_value_for_current_solution callables passed.
- Parameters:
get_var_value_for_current_solution – function extracting the value of the given variable for the current solution will be different when inside a callback or after the solve is finished
get_obj_value_for_current_solution – function extracting the value of the objective for the current solution.
- Returns:
the converted solution at d-o format
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver.LP_RCPSP_CPLEX(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
CplexMilpSolver
,_BaseLP_MRCPSP
- hyperparameters: List[Hyperparameter] = [CategoricalHyperparameter(name='greedy_start', default=True, choices=[True, False])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
discrete_optimization.rcpsp.solver.rcpsp_lp_solver_gantt module
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver_gantt.ConstraintTaskIndividual(list_tuple)[source]
Bases:
object
- list_tuple: List[Tuple[str, int, int, bool]]
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver_gantt.ConstraintWorkDuration(ressource, individual, time_bounds, working_time_upper_bound)[source]
Bases:
object
- individual: int
- ressource: str
- time_bounds: Tuple[int, int]
- working_time_upper_bound: int
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver_gantt.LP_MRCPSP_GANTT(problem: RCPSPModel, rcpsp_solution: RCPSPSolution, lp_solver=MilpSolverName.CBC, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
PymipMilpSolver
,_Base_LP_MRCPSP_GANTT
- class discrete_optimization.rcpsp.solver.rcpsp_lp_solver_gantt.LP_MRCPSP_GANTT_GUROBI(problem: RCPSPModel, rcpsp_solution: RCPSPSolution, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
GurobiMilpSolver
,_Base_LP_MRCPSP_GANTT
- adding_constraint(constraint_description: ConstraintTaskIndividual | ConstraintWorkDuration, constraint_name: str = '')[source]
- build_objective_function_from_a_solution(ressource_usage: Dict[str, Dict[int, Dict[int, bool]]], ignore_tuple: Set[Tuple[str, int, int]] | None = None)[source]
- init_model(**args)[source]
Initialize intern model used to solve.
Can initialize a ortools, milp, gurobi, … model.
- retrieve_current_solution(get_var_value_for_current_solution: Callable[[Any], float], get_obj_value_for_current_solution: Callable[[], float]) Tuple[Dict[Any, Dict[Any, Dict[Any, Any]]], float] [source]
Retrieve current solution from internal gurobi solution.
This converts internal gurobi solution into a discrete-optimization Solution. This method can be called after the solve in retrieve_solutions() or during solve within a gurobi/pymilp/cplex callback. The difference will be the get_var_value_for_current_solution and get_obj_value_for_current_solution callables passed.
- Parameters:
get_var_value_for_current_solution – function extracting the value of the given variable for the current solution will be different when inside a callback or after the solve is finished
get_obj_value_for_current_solution – function extracting the value of the objective for the current solution.
- Returns:
the converted solution at d-o format
discrete_optimization.rcpsp.solver.rcpsp_pile module
- class discrete_optimization.rcpsp.solver.rcpsp_pile.Executor(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
PileSolverRCPSP
- compute_schedule_from_priority_list(permutation_jobs: List[int], modes_dict: Dict[int, int])[source]
- update(rcpsp_model: RCPSPModel)[source]
- class discrete_optimization.rcpsp.solver.rcpsp_pile.GreedyChoice(value)[source]
Bases:
Enum
An enumeration.
- FASTEST = 3
- MOST_SUCCESSORS = 1
- SAMPLE_MOST_SUCCESSORS = 2
- TOTALLY_RANDOM = 4
- class discrete_optimization.rcpsp.solver.rcpsp_pile.PileSolverRCPSP(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='greedy_choice', default=<GreedyChoice.MOST_SUCCESSORS: 1>, choices=[<GreedyChoice.MOST_SUCCESSORS: 1>, <GreedyChoice.SAMPLE_MOST_SUCCESSORS: 2>, <GreedyChoice.FASTEST: 3>, <GreedyChoice.TOTALLY_RANDOM: 4>])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- solve(**kwargs) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
- class discrete_optimization.rcpsp.solver.rcpsp_pile.PileSolverRCPSP_Calendar(problem: RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
SolverRCPSP
- hyperparameters: List[Hyperparameter] = [EnumHyperparameter(name='greedy_choice', default=<GreedyChoice.MOST_SUCCESSORS: 1>, choices=[<GreedyChoice.MOST_SUCCESSORS: 1>, <GreedyChoice.SAMPLE_MOST_SUCCESSORS: 2>, <GreedyChoice.FASTEST: 3>, <GreedyChoice.TOTALLY_RANDOM: 4>])]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- problem: RCPSPModel
- solve(**kwargs) ResultStorage [source]
Generic solving function.
- Parameters:
callbacks – list of callbacks used to hook into the various stage of the solve
**kwargs – any argument specific to the solver
Solvers deriving from SolverDo should use callbacks methods .on_step_end(), … during solve(). But some solvers are not yet updated and are just ignoring it.
Returns (ResultStorage): a result object containing potentially a pool of solutions to a discrete-optimization problem
discrete_optimization.rcpsp.solver.rcpsp_solver module
- class discrete_optimization.rcpsp.solver.rcpsp_solver.SolverRCPSP(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
SolverDO
- problem: RCPSPModel | RCPSPModelPreemptive