discrete_optimization.generic_rcpsp_tools.solvers.lns_cp package
Submodules
discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder module
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.OptionNeighborRandom(value)[source]
Bases:
Enum
An enumeration.
- DEBUG = 5
- LARGE = 4
- MIX_ALL = 0
- MIX_FAST = 1
- MIX_LARGE_NEIGH = 2
- NO_CONSTRAINT = 6
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.Params(fraction_to_fix, minus_delta, plus_delta)[source]
Bases:
object
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_basic_random_and_neighbor(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_basic_random_constraint_handler(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_basic_time_window_constraint_handler(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_constraint_handler_cut_part(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph=None, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_neighbor_mixing_cut_parts(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph: GraphRcpsp | None = None, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_neighbor_mixing_methods(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph: GraphRcpsp | None = None, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.build_neighbor_random(option_neighbor: OptionNeighborRandom, rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem) MznConstraintHandler [source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.constraint_neigh(rcpsp_problem, fraction_subproblem: float = 0.35, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.cut_parts(rcpsp_problem, nb_cut_part=4, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.mix(rcpsp_problem, nb_cut_part=3, fraction_subproblem=0.25)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.mix_both(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, option_neighbor_random: OptionNeighborRandom, graph: GraphRcpsp | None = None, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.mix_lot(rcpsp_problem, nb_cut_parts, fraction_subproblems, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.random_neigh(rcpsp_problem, fraction_subproblem: float = 0.35, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_builder.return_random_basic_constraint_handler(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph=None, fraction_to_fix=0.9, minus_delta=100, plus_delta=100, minus_delta_2=4000, plus_delta_2=4000)[source]
discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools module
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.BasicConstraintBuilder(neighbor_builder: NeighborBuilder, params_constraint_builder: ParamsConstraintBuilder | None = None, preemptive: bool = False, multiskill: bool = False, verbose: bool = False)[source]
Bases:
object
- return_constraints(current_solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, params_constraint_builder: ParamsConstraintBuilder = None)[source]
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.ConstraintHandlerMultiskillAllocation(problem: VariantMultiskillRcpspProblem | MultiskillRcpspProblem, params_list: list[ParamsConstraintBuilder] | None = None, verbose: bool = False)[source]
Bases:
MznConstraintHandler
- adding_constraint_from_results_store(solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, child_instance: Instance, result_storage: ResultStorage, last_result_store: ResultStorage | None = None, **kwargs: Any) Iterable[Any] [source]
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.ConstraintHandlerScheduling(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, basic_constraint_builder: BasicConstraintBuilder, params_list: list[ParamsConstraintBuilder] | None = None, use_makespan_of_subtasks: bool = True, objective_subproblem: ObjectiveSubproblem = ObjectiveSubproblem.GLOBAL_MAKESPAN, verbose: bool = True)[source]
Bases:
MznConstraintHandler
- adding_constraint_from_results_store(solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, child_instance: Instance, result_storage: ResultStorage, last_result_store: ResultStorage | None = None, **kwargs: Any) Iterable[Any] [source]
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.EquilibrateMultiskillAllocation(problem: VariantMultiskillRcpspProblem | MultiskillRcpspProblem, params_list: list[ParamsConstraintBuilder] | None = None, verbose: bool = False)[source]
Bases:
MznConstraintHandler
- adding_constraint_from_results_store(solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, child_instance: Instance, result_storage: ResultStorage, last_result_store: ResultStorage | None = None, **kwargs: Any) Iterable[Any] [source]
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.EquilibrateMultiskillAllocationNonPreemptive(problem: VariantMultiskillRcpspProblem | MultiskillRcpspProblem, params_list: list[ParamsConstraintBuilder] | None = None, verbose: bool = False)[source]
Bases:
MznConstraintHandler
- adding_constraint_from_results_store(solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, child_instance: Instance, result_storage: ResultStorage, last_result_store: ResultStorage | None = None, **kwargs: Any) Iterable[Any] [source]
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborBuilder[source]
Bases:
object
- abstract find_subtasks(current_solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborBuilderMix(list_neighbor: list[NeighborBuilder], weight_neighbor: list[float] | array, verbose: bool = False)[source]
Bases:
NeighborBuilder
- find_subtasks(current_solution: RcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborBuilderSubPart(problem: RcpspProblem, graph: GraphRcpsp | None = None, nb_cut_part: int = 10)[source]
Bases:
NeighborBuilder
Cut the schedule in different subpart in the increasing order of the schedule.
- find_subtasks(current_solution: RcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborBuilderTimeWindow(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph: GraphRcpsp | None = None, time_window_length: int = 10)[source]
Bases:
NeighborBuilder
- find_subtasks(current_solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborConstraintBreaks(problem: SpecialConstraintsPreemptiveRcpspProblem | RcpspProblem, graph: GraphRcpsp | None = None, fraction_subproblem: float = 0.1, other_constraint_handler: NeighborBuilder | None = None)[source]
Bases:
NeighborBuilder
- find_subtasks(current_solution: RcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborRandom(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph: GraphRcpsp | None = None, fraction_subproblem: float = 0.9, delta_abs_time_from_makespan_to_not_fix: int = 5, delta_rel_time_from_makespan_to_not_fix: float = 0.0)[source]
Bases:
NeighborBuilder
- find_subtasks(current_solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.NeighborRandomAndNeighborGraph(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph: GraphRcpsp | None = None, fraction_subproblem: float = 0.1)[source]
Bases:
NeighborBuilder
- find_subtasks(current_solution: RcpspSolution, subtasks: set[Hashable] | None = None) tuple[set[Hashable], set[Hashable]] [source]
Split the scheduling task set in 2 part, it can then be used by constraint handler to introduce different constraints in those two subsets. Usually the first returned set will be considered like the subproblem in LNS :param current_solution: current solution to consider :param subtasks: possibly existing subset of tasks that are in the neighborhood
Returns:
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.ObjectiveSubproblem(value)[source]
Bases:
Enum
An enumeration.
- GLOBAL_MAKESPAN = 3
- MAKESPAN_SUBTASKS = 0
- SUM_END_SUBTASKS = 2
- SUM_START_SUBTASKS = 1
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.ParamsConstraintBuilder(minus_delta_primary: int, plus_delta_primary: int, minus_delta_secondary: int, plus_delta_secondary: int, minus_delta_primary_duration: int = 5, plus_delta_primary_duration: int = 5, minus_delta_secondary_duration: int = 5, plus_delta_secondary_duration: int = 5, constraint_max_time_to_current_solution: bool = True, fraction_of_task_assigned_multiskill: float = 0.6, except_assigned_multiskill_primary_set: bool = False, first_method_multiskill: bool = True, second_method_multiskill: bool = False, additional_methods: bool = False)[source]
Bases:
Hyperparametrizable
- hyperparameters: list[Hyperparameter] = [IntegerHyperparameter(name='minus_delta_primary', default=100, depends_on=None, name_in_kwargs='minus_delta_primary', low=0, high=200, step=1, log=False), IntegerHyperparameter(name='plus_delta_primary', default=100, depends_on=None, name_in_kwargs='plus_delta_primary', low=0, high=200, step=1, log=False), IntegerHyperparameter(name='minus_delta_secondary', default=0, depends_on=None, name_in_kwargs='minus_delta_secondary', low=0, high=10, step=1, log=False), IntegerHyperparameter(name='plus_delta_secondary', default=0, depends_on=None, name_in_kwargs='plus_delta_secondary', low=0, high=10, step=1, log=False), IntegerHyperparameter(name='minus_delta_primary_duration', default=5, depends_on=None, name_in_kwargs='minus_delta_primary_duration', low=0, high=10, step=1, log=False), IntegerHyperparameter(name='plus_delta_primary_duration', default=5, depends_on=None, name_in_kwargs='plus_delta_primary_duration', low=0, high=10, step=1, log=False), IntegerHyperparameter(name='minus_delta_secondary_duration', default=5, depends_on=None, name_in_kwargs='minus_delta_secondary_duration', low=0, high=10, step=1, log=False), IntegerHyperparameter(name='plus_delta_secondary_duration', default=5, depends_on=None, name_in_kwargs='plus_delta_secondary_duration', low=0, high=10, step=1, log=False), CategoricalHyperparameter(name='constraint_max_time_to_current_solution', default=False, depends_on=None, name_in_kwargs='constraint_max_time_to_current_solution'), FloatHyperparameter(name='fraction_of_task_assigned_multiskill', default=0.6, depends_on=None, name_in_kwargs='fraction_of_task_assigned_multiskill', low=0.0, high=1.0, suggest_low=False, suggest_high=False, step=None, log=False), CategoricalHyperparameter(name='except_assigned_multiskill_primary_set', default=False, depends_on=('first_method_multiskill', [True]), name_in_kwargs='except_assigned_multiskill_primary_set'), CategoricalHyperparameter(name='first_method_multiskill', default=True, depends_on=None, name_in_kwargs='first_method_multiskill'), CategoricalHyperparameter(name='second_method_multiskill', default=False, depends_on=None, name_in_kwargs='second_method_multiskill'), CategoricalHyperparameter(name='additional_methods', default=False, depends_on=None, name_in_kwargs='additional_methods')]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_number_of_change_in_worker_allocation(current_solution: MultiskillRcpspSolution, nb_moves: int)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_number_of_change_in_worker_allocation_preemptive(current_solution: PreemptiveMultiskillRcpspSolution, nb_preemptive: int, nb_moves: int)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_unit_used_subset_employees(employees_set: set[Hashable], current_solution: MultiskillRcpspSolution, cp_solver: CpMultiskillRcpspSolver, employees_usage_dict=None)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_unit_used_subset_employees_preemptive(employees_set: set[Hashable], current_solution: PreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveMultiskillRcpspSolver, employees_usage_dict=None, exceptions=None)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_unit_used_to_tasks(tasks_set: set[Hashable], current_solution: MultiskillRcpspSolution, cp_solver: CpMultiskillRcpspSolver)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraint_unit_used_to_tasks_preemptive(tasks_set: set[Hashable], current_solution: PreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveMultiskillRcpspSolver, exceptions=None)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_exchange_worker(current_solution: MultiskillRcpspSolution, nb_moves: int, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_start_on_end(current_solution: MultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, frac=0.5)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_start_on_end_preemptive(current_solution: PreemptiveRcpspSolution | PreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, frac=0.5)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_strings(current_solution: RcpspSolution | MultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, tasks_primary: set[Hashable], tasks_secondary: set[Hashable], params_constraints: ParamsConstraintBuilder)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_strings_multiskill(current_solution: MultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, tasks_primary: set[Hashable], tasks_secondary: set[Hashable], params_constraints: ParamsConstraintBuilder)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_strings_multiskill_preemptive(current_solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, tasks_primary: set[Hashable], tasks_secondary: set[Hashable], params_constraints: ParamsConstraintBuilder)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.constraints_strings_preemptive(current_solution: PreemptiveRcpspSolution | PreemptiveMultiskillRcpspSolution, cp_solver: CpPreemptiveRcpspSolver | CpRcpspSolver | CpMultimodeRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpMultiskillRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpPartialPreemptiveMultiskillRcpspSolver, tasks_primary: set[Hashable], tasks_secondary: set[Hashable], params_constraints: ParamsConstraintBuilder)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.neighbor_tools.get_max_time_solution(solution: PreemptiveRcpspSolution | RcpspSolution | MultiskillRcpspSolution | VariantMultiskillRcpspSolution | PreemptiveMultiskillRcpspSolution | VariantPreemptiveMultiskillRcpspSolution)[source]
discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.postpro_ls module
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.postpro_ls.LocalSearchPostProcessSolution(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]
Bases:
PostProcessSolution
- build_other_solution(result_storage: ResultStorage) ResultStorage [source]
discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair module
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.NeighborRepairProblems(problem: RcpspProblem | PreemptiveRcpspProblem | PreemptiveRcpspSolution | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem, params_list: list[ParamsConstraintBuilder] | None = None)[source]
Bases:
MznConstraintHandler
- adding_constraint_from_results_store(solver: CpPreemptiveRcpspSolver | CpPreemptiveMultiskillRcpspSolver | CpMultimodePreemptiveRcpspSolver, child_instance: Instance, result_storage: ResultStorage, last_result_store: ResultStorage | None = None, **kwargs: Any) Iterable[Any] [source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.compute_shift_extremities(model: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.find_possible_problems_preemptive(model: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, solution: PreemptiveMultiskillRcpspSolution | PreemptiveRcpspSolution | SpecialPreemptiveRcpspSolution)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.post_process_solution(model, solution)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.problem_constraints(current_solution: PreemptiveRcpspSolution | PreemptiveMultiskillRcpspSolution, problems_output: dict[Hashable, list], minus_delta: int, plus_delta: int, cp_solver: CpPreemptiveRcpspSolver | CpMultimodePreemptiveRcpspSolver | CpPreemptiveMultiskillRcpspSolver, constraint_max_time=False, minus_delta_2=0, plus_delta_2=0)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solution_repair.return_pauses_and_active_times(model: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, solution: PreemptiveMultiskillRcpspSolution | PreemptiveRcpspSolution | SpecialPreemptiveRcpspSolution)[source]
discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver module
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.ConstraintHandlerType(value)[source]
Bases:
Enum
An enumeration.
- MIX_SUBPROBLEMS = 0
- SOLUTION_REPAIR = 1
- class discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.LnsCpMznGenericRcpspSolver(problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, partial_solution=None, subsolver: MinizincCpSolver | None = None, initial_solution_provider: InitialSolution | None = None, constraint_handler: MznConstraintHandler | None = None, post_process_solution: PostProcessSolution | None = None, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]
Bases:
LnsCpMzn
,GenericRcpspSolver
- hyperparameters: list[Hyperparameter] = [EnumHyperparameter(name='cp_solver_name', default=<CpSolverName.CHUFFED: 0>, depends_on=None, name_in_kwargs='cp_solver_name'), CategoricalHyperparameter(name='do_ls', default=False, depends_on=None, name_in_kwargs='do_ls'), EnumHyperparameter(name='constraint_handler_type', default=<ConstraintHandlerType.MIX_SUBPROBLEMS: 0>, depends_on=None, name_in_kwargs='constraint_handler_type'), FloatHyperparameter(name='fraction_subproblem', default=0.05, depends_on=('constraint_handler_type', [<ConstraintHandlerType.MIX_SUBPROBLEMS: 0>]), name_in_kwargs='fraction_subproblem', low=0.0, high=1.0, suggest_low=False, suggest_high=False, step=None, log=False), IntegerHyperparameter(name='nb_cut_part', default=10, depends_on=('constraint_handler_type', [<ConstraintHandlerType.MIX_SUBPROBLEMS: 0>]), name_in_kwargs='nb_cut_part', low=0, high=100, step=1, log=False), CategoricalHyperparameter(name='use_makespan_of_subtasks', default=False, depends_on=('constraint_handler_type', [<ConstraintHandlerType.MIX_SUBPROBLEMS: 0>]), name_in_kwargs='use_makespan_of_subtasks'), SubBrickKwargsHyperparameter(name='params_0_kwargs', default=None, depends_on=None, name_in_kwargs='params_0_kwargs'), SubBrickKwargsHyperparameter(name='params_1_kwargs', default=None, depends_on=None, name_in_kwargs='params_1_kwargs')]
Hyperparameters available for this solver.
- These hyperparameters are to be feed to **kwargs found in
__init__()
init_model() (when available)
solve()
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.build_constraint_handler(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.build_constraint_handler_helper(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, graph, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.build_default_cp_model(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, partial_solution=None, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.build_default_initial_solution(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, **kwargs)[source]
- discrete_optimization.generic_rcpsp_tools.solvers.lns_cp.solver.build_default_postpro(rcpsp_problem: RcpspProblem | PreemptiveRcpspProblem | SpecialConstraintsPreemptiveRcpspProblem | MultiskillRcpspProblem | VariantMultiskillRcpspProblem, partial_solution=None, **kwargs)[source]