discrete_optimization.rcpsp_multiskill.solvers package

Submodules

discrete_optimization.rcpsp_multiskill.solvers.cp_solver_mspsp_instlib module

class discrete_optimization.rcpsp_multiskill.solvers.cp_solver_mspsp_instlib.CP_MSPSP_MZN(problem: MS_RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]

Bases: MinizincCPSolver

constraint_end_time_string(task, end_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_objective_equal_makespan(task_sink)[source]
constraint_objective_makespan()[source]
constraint_objective_max_time_set_of_jobs(set_of_jobs)[source]
constraint_start_time_string(task, start_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_sum_of_ending_time(set_subtasks: Set[Hashable])[source]
constraint_sum_of_starting_time(set_subtasks: Set[Hashable])[source]
constraint_task_to_mode(task_id, mode)[source]
constraint_used_employee(task, employee, indicator: bool = False)[source]
init_from_model(**args)[source]
init_model(**args)[source]

Instantiate a CP model instance

Afterwards, self.instance should not be None anymore.

problem: MS_RCPSPModel
retrieve_solution(_output_item: str | None = None, **kwargs: Any) MS_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_multiskill.solvers.cp_solver_mspsp_instlib.chuffed_specific_code()[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solver_mspsp_instlib.create_usefull_res_data(rcpsp_model: MS_RCPSPModel)[source]

discrete_optimization.rcpsp_multiskill.solvers.cp_solvers module

class discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.CP_MS_MRCPSP_MZN(problem: MS_RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]

Bases: MinizincCPSolver

add_hard_special_constraints(partial_solution)[source]
constraint_end_time_string(task, end_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_objective_equal_makespan(task_sink)[source]
constraint_objective_max_time_set_of_jobs(set_of_jobs)[source]
constraint_start_time_string(task, start_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_sum_of_ending_time(set_subtasks: Set[Hashable])[source]
constraint_sum_of_starting_time(set_subtasks: Set[Hashable])[source]
constraint_task_to_mode(task_id, mode)[source]
constraint_used_employee(task, employee, indicator: bool = False)[source]
init_model(**args)[source]

Instantiate a CP model instance

Afterwards, self.instance should not be None anymore.

manual_cumulative_resource_constraints(instance)[source]
manual_starting_time(instance)[source]
problem: MS_RCPSPModel
retrieve_solution(_output_item: str | None = None, **kwargs: Any) MS_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:

write_search_strategy_chuffed(instance)[source]
class discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.CP_MS_MRCPSP_MZN_PARTIAL_PREEMPTIVE(problem: MS_RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]

Bases: CP_MS_MRCPSP_MZN_PREEMPTIVE

init_model(**args)[source]

Instantiate a CP model instance

Afterwards, self.instance should not be None anymore.

class discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.CP_MS_MRCPSP_MZN_PREEMPTIVE(problem: MS_RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED, params_objective_function: ParamsObjectiveFunction | None = None, silent_solve_error: bool = False, **kwargs)[source]

Bases: MinizincCPSolver

add_hard_special_constraints(partial_solution)[source]
constraint_duration_string_preemptive_i(task, duration, part_id=1, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_duration_to_min_duration_preemptive(task, min_duration)[source]
constraint_end_time_string(task, end_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_is_paused(task, is_paused)[source]
constraint_objective_equal_makespan(task_sink)[source]
constraint_objective_max_time_set_of_jobs(set_of_jobs)[source]
constraint_start_time_string(task, start_time, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_start_time_string_preemptive_i(task, start_time, part_id=1, sign: SignEnum = SignEnum.EQUAL) str[source]
constraint_sum_of_ending_time(set_subtasks: Set[Hashable])[source]
constraint_sum_of_starting_time(set_subtasks: Set[Hashable])[source]
constraint_task_to_mode(task_id, mode)[source]
constraint_used_employee(task, employee, part_id=1, indicator: bool = False)[source]
init_model(**args)[source]

Instantiate a CP model instance

Afterwards, self.instance should not be None anymore.

problem: MS_RCPSPModel
retrieve_solution(_output_item: str | None = None, **kwargs: Any) MS_RCPSPSolution_Preemptive[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_multiskill.solvers.cp_solvers.PrecomputeEmployeesForTasks(ms_rcpsp_model: MS_RCPSPModel, cp_solver_name: CPSolverName = CPSolverName.CHUFFED)[source]

Bases: object

init_model(**kwargs)[source]
retrieve_solutions(result, parameters_cp: ParametersCP)[source]
solve(parameters_cp: ParametersCP | None = None, **args)[source]
class discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.SearchStrategyMS_MRCPSP(value)[source]

Bases: Enum

An enumeration.

NONE = 'none'
PRIORITY_SEARCH_START_UNIT_USED = 'priority_smallest'
START_THEN_USED_UNIT = 'durThenStartThenMode'
class discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.SolutionPrecomputeEmployeesForTasks(unit_used, worker_type_used, mode_dict, overskill_unit, overskill_type)[source]

Bases: object

discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.add_constraints_string(child_instance, list_of_strings)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.add_fake_task_cp_data(rcpsp_model: MS_RCPSPModel, ignore_fake_task: bool = True, max_time_to_consider: int | None = None)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.add_hard_special_constraints(partial_solution: PartialSolution, cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.add_soft_special_constraints(partial_solution: PartialSolution, cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.define_second_part_objective(weights, name_penalty, equal=False)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_end_window(end_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_after_nunit(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_at_end(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_at_end_plus_offset(list_start_at_end_plus_offset, cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_times(dict_start_times: Dict[Hashable, int], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_together(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.hard_start_window(start_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_end_window(end_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_after_nunit(list_start_after_nunit: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_at_end(list_start_at_end: List[Tuple[Hashable, Hashable]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_at_end_plus_offset(list_start_at_end_plus_offset: List[Tuple[Hashable, Hashable, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_times(dict_start_times: Dict[Hashable, int], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_together(list_start_together: List[Tuple[Hashable, Hashable]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.soft_start_window(start_times_window: Dict[Hashable, Tuple[int, int]], cp_solver: CP_MS_MRCPSP_MZN | CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.stick_to_solution(solution: RCPSPSolution, cp_solver: CP_MS_MRCPSP_MZN)[source]
discrete_optimization.rcpsp_multiskill.solvers.cp_solvers.stick_to_solution_preemptive(solution: RCPSPSolutionPreemptive, cp_solver: CP_MS_MRCPSP_MZN_PREEMPTIVE)[source]

discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp module

class discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.PostProMSRCPSP(problem: MS_RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None)[source]

Bases: PostProcessSolution

build_other_solution(result_storage: ResultStorage) ResultStorage[source]
class discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.PostProMSRCPSPPreemptive(problem: MS_RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None)[source]

Bases: PostProcessSolution

build_other_solution(result_storage: ResultStorage) ResultStorage[source]
discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.compute_schedule_per_employees(solution: MS_RCPSPSolution_Preemptive | MS_RCPSPSolution, problem: MS_RCPSPModel, predecessors_dict)[source]
discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.sgs_variant(solution: MS_RCPSPSolution, problem: MS_RCPSPModel, predecessors_dict)[source]
discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.sgs_variant_preemptive(solution: MS_RCPSPSolution_Preemptive, problem: MS_RCPSPModel, predecessors_dict)[source]
discrete_optimization.rcpsp_multiskill.solvers.lns_post_process_rcpsp.shift_left_method(solution: MS_RCPSPSolution_Preemptive | MS_RCPSPSolution, problem: MS_RCPSPModel, predecessors_dict)[source]

discrete_optimization.rcpsp_multiskill.solvers.lp_model module

class discrete_optimization.rcpsp_multiskill.solvers.lp_model.LP_Solver_MRSCPSP(problem: MS_RCPSPModel, lp_solver: MilpSolverName = MilpSolverName.CBC, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]

Bases: PymipMilpSolver

init_model(**args)[source]

Initialize intern model used to solve.

Can initialize a ortools, milp, gurobi, … model.

problem: MS_RCPSPModel
retrieve_current_solution(get_var_value_for_current_solution: Callable[[Any], float], get_obj_value_for_current_solution: Callable[[], float]) MS_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

solve(parameters_milp: ParametersMilp | None = None, **args) 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_multiskill.solvers.ms_rcpsp_ga_solver module

class discrete_optimization.rcpsp_multiskill.solvers.ms_rcpsp_ga_solver.GA_MSRCPSP_Solver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: SolverDO

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

discrete_optimization.rcpsp_multiskill.solvers.ms_rcpsp_lp_lns_solver module

class discrete_optimization.rcpsp_multiskill.solvers.ms_rcpsp_lp_lns_solver.ConstraintHandlerFixStartTime(problem: MS_RCPSPModel, fraction_fix_start_time: float = 0.9)[source]

Bases: ConstraintHandler

adding_constraint_from_results_store(milp_solver: LP_Solver_MRSCPSP, result_storage: ResultStorage) Mapping[Hashable, Any][source]
remove_constraints_from_previous_iteration(milp_solver: LP_Solver_MRSCPSP, previous_constraints: Mapping[Hashable, Any])[source]
class discrete_optimization.rcpsp_multiskill.solvers.ms_rcpsp_lp_lns_solver.ConstraintHandlerStartTimeIntervalMRCPSP(problem: MS_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_Solver_MRSCPSP, result_storage: ResultStorage) Mapping[Hashable, Any][source]
remove_constraints_from_previous_iteration(milp_solver: LP_Solver_MRSCPSP, previous_constraints: Mapping[Hashable, Any])[source]
class discrete_optimization.rcpsp_multiskill.solvers.ms_rcpsp_lp_lns_solver.InitialSolutionMS_RCPSP(problem: MS_RCPSPModel, params_objective_function: ParamsObjectiveFunction | None = None, initial_method: InitialMethodRCPSP = InitialMethodRCPSP.PILE)[source]

Bases: InitialSolution

get_starting_solution() ResultStorage[source]

discrete_optimization.rcpsp_multiskill.solvers.multimode_transposition module

class discrete_optimization.rcpsp_multiskill.solvers.multimode_transposition.MultimodeTranspositionSolver(problem: MS_RCPSPModel, multimode_problem: RCPSPModel | RCPSPModelPreemptive | None = None, worker_type_to_worker: Dict[str, Set[str | int]] | None = None, params_objective_function: ParamsObjectiveFunction | None = None, solver_multimode_rcpsp: SolverDO | None = None)[source]

Bases: SolverDO

problem: MS_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_multiskill.solvers.multimode_transposition.rebuild_multiskill_solution(multiskill_rcpsp_model: MS_RCPSPModel, multimode_rcpsp_model: RCPSPModel | RCPSPModelPreemptive, worker_type_to_worker: Dict[str, Set[str | int]], solution_rcpsp: RCPSPSolution | RCPSPSolutionPreemptive)[source]
discrete_optimization.rcpsp_multiskill.solvers.multimode_transposition.rebuild_multiskill_solution_cp_based(multiskill_rcpsp_model: MS_RCPSPModel, multimode_rcpsp_model: RCPSPModel | RCPSPModelPreemptive, worker_type_to_worker: Dict[str, Set[str | int]], solution_rcpsp: RCPSPSolution | RCPSPSolutionPreemptive)[source]

discrete_optimization.rcpsp_multiskill.solvers.solver_rcpsp_based module

class discrete_optimization.rcpsp_multiskill.solvers.solver_rcpsp_based.Solver_RCPSP_Based(problem: MS_RCPSPModel | MS_RCPSPModel_Variant, method, params_objective_function: ParamsObjectiveFunction | None = None, **args)[source]

Bases: SolverDO

problem: MS_RCPSPModel | MS_RCPSPModel_Variant
solve(**kwargs)[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

Module contents