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

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_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]
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

init_model(**args)[source]
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

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

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_minduration_all_tasks()[source]
constraint_objective_equal_makespan(task_sink)[source]
constraint_objective_makespan()[source]
constraint_objective_max_time_set_of_jobs(set_of_jobs)[source]
constraint_ressource_requirement_at_time_t(time, ressource, ressource_number, sign: SignEnum = SignEnum.LEQ)[source]
constraint_start_time_precomputed()[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]
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

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_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]
get_stats()[source]
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

get_first_time_to_do_one_task(resource_avail_in_time, task_id)[source]
problem: RCPSPModel
return_order_cpm()[source]
run_classic_cpm()[source]
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

class discrete_optimization.rcpsp.solver.cpm.CPMObject(ESD, EFD, LSD, LFD)[source]

Bases: object

set_earliest_finish_date(EFD)[source]
set_earliest_start_date(ESD)[source]
set_latest_finish_date(LFD)[source]
set_latest_start_date(LSD)[source]
discrete_optimization.rcpsp.solver.cpm.run_partial_classic_cpm(partial_schedule, cpm_solver)[source]

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_model(**kwargs)[source]

Init CP model.

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]
create_resource_capacity_var(model: CpModel)[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()

init_model(**kwargs)[source]

Init CP model.

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)

create_cumulative_constraint_and_used_resource(model: CpModel, resource: str, is_used_resource: Dict[str, IntVar], interval_var: Dict[Tuple[Hashable, int], IntervalVar], is_present_var: Dict[Tuple[Hashable, int], IntVar], fake_task: List[Dict[str, int]])[source]
init_model(**kwargs)[source]

Init CP model.

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]
remove_constraints_from_previous_iteration(milp_solver: LP_RCPSP, previous_constraints: 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]
remove_constraints_from_previous_iteration(milp_solver: LP_RCPSP, previous_constraints: 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]
remove_constraints_from_previous_iteration(milp_solver: LP_MRCPSP, previous_constraints: 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()

init_model(**args)[source]

Initialize intern model used to solve.

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

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

init_model(**args)[source]

Initialize intern model used to solve.

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

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

init_model(**args)[source]

Initialize intern model used to solve.

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

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_lp_solver_gantt.intersect(i1, i2)[source]

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

Module contents