discrete_optimization.rcpsp_multiskill package

Subpackages

Submodules

discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp module

discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp.sgs_fast_ms(permutation_task, priority_worker_per_task, modes_array, consumption_array, skills_needs, duration_array, predecessors, successors, horizon, ressource_available, ressource_renewable, worker_available, worker_skills, minimum_starting_time_array, one_unit_per_task: bool = True)[source]
discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp.sgs_fast_ms_partial_schedule(permutation_task, priority_worker_per_task, modes_array, scheduled_task_indicator, scheduled_start_task_times, scheduled_end_task_times, worker_used, current_time, consumption_array, skills_needs, duration_array, predecessors, successors, horizon, ressource_available, ressource_renewable, worker_available, worker_skills, minimum_starting_time_array, one_unit_per_task: bool = True)[source]
discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp.sgs_fast_ms_preemptive(permutation_task, priority_worker_per_task, modes_array, consumption_array, skills_needs, duration_array, preemptive_tag, predecessors, successors, horizon, ressource_available, ressource_renewable, worker_available, worker_skills, minimum_starting_time_array, is_releasable, one_unit_per_task: bool = True, consider_partial_preemptive: bool = False, strictly_disjunctive_subtasks: bool = False)[source]
discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp.sgs_fast_ms_preemptive_partial_schedule(permutation_task, priority_worker_per_task, modes_array, scheduled_task_indicator, scheduled_start_task_times, scheduled_end_task_times, nb_subparts, worker_used, current_time, consumption_array, skills_needs, duration_array, preemptive_tag, predecessors, successors, horizon, ressource_available, ressource_renewable, worker_available, worker_skills, minimum_starting_time_array, is_releasable, one_unit_per_task: bool = True, consider_partial_preemptive: bool = False)[source]
discrete_optimization.rcpsp_multiskill.fast_function_ms_rcpsp.sgs_fast_ms_preemptive_some_special_constraints(permutation_task, priority_worker_per_task, modes_array, consumption_array, skills_needs, duration_array, preemptive_tag, predecessors, successors, start_at_end_plus_offset, start_after_nunit, horizon, ressource_available, ressource_renewable, worker_available, worker_skills, minimum_starting_time_array, is_releasable, one_unit_per_task: bool = True, consider_partial_preemptive: bool = False, strictly_disjunctive_subtasks: bool = False)[source]

discrete_optimization.rcpsp_multiskill.multiskill_to_rcpsp module

class discrete_optimization.rcpsp_multiskill.multiskill_to_rcpsp.MultiSkillToRCPSP(multiskill_model: MS_RCPSPModel)[source]

Bases: object

construct_rcpsp_by_worker_type(limit_number_of_mode_per_task: bool = True, max_number_of_mode: int | None = None, check_resource_compliance: bool = True, one_worker_type_per_task: bool = False)[source]
is_compatible(task_requirements: Dict[str, int], ressource_availability: Dict[str, array], duration_task, horizon)[source]

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill module

class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.Employee(dict_skill: Dict[str, SkillDetail], calendar_employee: List[bool], salary: float = 0.0)[source]

Bases: object

calendar_employee: List[bool]
copy()[source]
dict_skill: Dict[str, SkillDetail]
get_non_zero_skills()[source]
get_skill_level(s)[source]
to_json(with_calendar: bool = True)[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPModel(skills_set: Set[str], resources_set: Set[str], non_renewable_resources: Set[str], resources_availability: Dict[str, List[int]], employees: Dict[Hashable, Employee], mode_details: Dict[Hashable, Dict[int, Dict[str, int]]], successors: Dict[Hashable, List[Hashable]], horizon, employees_availability: List[int] | None = None, tasks_list: List[Hashable] | None = None, employees_list: List[Hashable] | None = None, horizon_multiplier=1, sink_task: Hashable | None = None, source_task: Hashable | None = None, one_unit_per_task_max: bool = False, preemptive: bool = False, preemptive_indicator: Dict[Hashable, bool] | None = None, special_constraints: SpecialConstraintsDescription | None = None, partial_preemption_data: Dict[Hashable, Dict[int, Dict[str, bool]]] | None = None, always_releasable_resources: Set[str] | None = None, never_releasable_resources: Set[str] | None = None, resource_blocking_data: List[Tuple[List[Hashable], Set[str]]] | None = None, strictly_disjunctive_subtasks: bool = True)[source]

Bases: Problem

build_mode_dict(rcpsp_modes_from_solution)[source]
build_multimode_rcpsp_calendar_representative()[source]
compute_graph() Graph[source]
copy()[source]
employees: Dict[Hashable, Employee]
employees_availability: List[int]
evaluate(rcpsp_sol: MS_RCPSPSolution) Dict[str, float][source]

Evaluate a given solution object for the given problem.

This method should return a dictionnary of KPI, that can be then used for mono or multiobjective optimization.

Parameters:

variable (Solution) – the Solution object to evaluate.

Returns: Dictionnary of float kpi for the solution.

abstract evaluate_from_encoding(int_vector, encoding_name)[source]
evaluate_function(rcpsp_sol: MS_RCPSPSolution)[source]
evaluate_mobj(rcpsp_sol: MS_RCPSPSolution)[source]

Default implementation of multiobjective evaluation.

It consists in flattening the evaluate() function and put in an array. User should probably custom this to be more efficient.

Parameters:

variable (Solution) – the Solution object to evaluate.

Returns (TupleFitness): a flattened tuple fitness object representing the multi-objective criteria.

evaluate_mobj_from_dict(dict_values: Dict[str, float]) TupleFitness[source]

Return an multiobjective fitness from a dictionnary of kpi (output of evaluate function).

It consists in flattening the evaluate() function and put in an array. User should probably custom this to be more efficient.

Parameters:

dict_values – output of evaluate() function

Returns (TupleFitness): a flattened tuple fitness object representing the multi-objective criteria.

get_attribute_register() EncodingRegister[source]

Returns how the Solution should be encoded.

Returns (EncodingRegister): content of the encoding of the solution

get_dummy_solution()[source]
get_max_resource_capacity(res)[source]
get_modes_dict(rcpsp_solution: MS_RCPSPSolution)[source]
get_objective_register() ObjectiveRegister[source]

Returns the objective definition.

Returns (ObjectiveRegister): object defining the objective criteria.

get_resource_availability_array(res)[source]
get_resource_available(res, time)[source]
get_resource_names()[source]
get_solution_type() Type[Solution][source]

Returns the class implementation of a Solution.

Returns (class): class object of the given Problem.

get_tasks_list()[source]
includes_special_constraint()[source]
is_multiskill()[source]
is_preemptive()[source]
is_rcpsp_multimode()[source]
is_varying_resource()[source]
mode_details: Dict[Hashable, Dict[int, Dict[str, int]]]
n_jobs_non_dummy: int
non_renewable_resources: Set[str]
partial_preemption_data: Dict[Hashable, Dict[int, Dict[str, bool]]]
resource_blocking_data: List[Tuple[List[Hashable], Set[str]]]
resources_availability: Dict[str, List[int]]
resources_set: Set[str]
return_index_task(task, offset=0)[source]
satisfy(variable: Solution) bool[source]

Computes if a solution satisfies or not the constraints of the problem.

Parameters:

variable – the Solution object to check satisfability

Returns (bool): boolean true if the constraints are fulfilled, false elsewhere.

satisfy_classic(rcpsp_sol: MS_RCPSPSolution) bool[source]
satisfy_preemptive(rcpsp_sol: MS_RCPSPSolution_Preemptive) bool[source]
sgs: ScheduleGenerationScheme
skills_set: Set[str]
strictly_disjunctive_subtasks: bool
successors: Dict[Hashable, List[Hashable]]
to_variant_model()[source]
update_function()[source]
update_functions()[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPModel_Variant(skills_set: Set[str], resources_set: Set[str], non_renewable_resources: Set[str], resources_availability: Dict[str, List[int]], employees: Dict[Hashable, Employee], employees_availability: List[int], mode_details: Dict[Hashable, Dict[int, Dict[str, int]]], successors: Dict[Hashable, List[Hashable]], horizon, tasks_list: List[Hashable] | None = None, employees_list: List[Hashable] | None = None, horizon_multiplier=1, sink_task: Hashable | None = None, source_task: Hashable | None = None, one_unit_per_task_max: bool = False, preemptive: bool = False, preemptive_indicator: Dict[Hashable, bool] | None = None, special_constraints: SpecialConstraintsDescription | None = None, partial_preemption_data: Dict[Hashable, Dict[int, Dict[str, bool]]] | None = None, always_releasable_resources: Set[str] | None = None, never_releasable_resources: Set[str] | None = None, resource_blocking_data: List[Tuple[List[Hashable], Set[str]]] | None = None, strictly_disjunctive_subtasks: bool = True)[source]

Bases: MS_RCPSPModel

convert_fixed_priority_worker_per_task_from_permutation(permutation)[source]
evaluate_from_encoding(int_vector, encoding_name)[source]
evaluate_function(rcpsp_sol: MS_RCPSPSolution_Variant)[source]
get_attribute_register() EncodingRegister[source]

Returns how the Solution should be encoded.

Returns (EncodingRegister): content of the encoding of the solution

get_dummy_solution(preemptive: bool | None = None)[source]
get_solution_type() Type[Solution][source]

Returns the class implementation of a Solution.

Returns (class): class object of the given Problem.

set_fixed_attributes(encoding_str: str, sol: MS_RCPSPSolution_Variant)[source]
set_fixed_modes(fixed_modes)[source]
set_fixed_priority_worker_per_task(fixed_priority_worker_per_task)[source]
set_fixed_priority_worker_per_task_from_permutation(permutation)[source]
set_fixed_task_permutation(fixed_permutation)[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPSolution(problem: Problem, modes: Dict[Hashable, int], schedule: Dict[Hashable, Dict[str, int | List[int]]], employee_usage: Dict[Hashable, Dict[Hashable, Set[str]]])[source]

Bases: Solution

change_problem(new_problem: Problem)[source]

If relevant to the optimisation problem, change the underlying problem instance for the solution.

This method can be used to evaluate a solution for different instance of problems.

Parameters:

new_problem (Problem) – another problem instance from which the solution can be evaluated

Returns: None

copy()[source]

Deep copy of the solution.

The copy() function should return a new object containing the same input as the current object, that respects the following expected behaviour: -y = x.copy() -if do some inplace change of y, the changes are not done in x.

Returns: a new object from which you can manipulate attributes without changing the original object.

employee_used(task)[source]
get_active_time(task)[source]
get_end_time(task)[source]
get_end_times_list(task)[source]
get_max_end_time()[source]
get_number_of_part(task)[source]
get_start_time(task)[source]
get_start_times_list(task)[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPSolution_Preemptive(problem: Problem, modes: Dict[Hashable, int], schedule: Dict[Hashable, Dict[str, List[int]]], employee_usage: Dict[Hashable, List[Dict[Hashable, Set[str]]]])[source]

Bases: MS_RCPSPSolution

copy()[source]

Deep copy of the solution.

The copy() function should return a new object containing the same input as the current object, that respects the following expected behaviour: -y = x.copy() -if do some inplace change of y, the changes are not done in x.

Returns: a new object from which you can manipulate attributes without changing the original object.

employee_used(task)[source]
get_active_time(task)[source]
get_end_time(task)[source]
get_end_times_list(task)[source]
get_max_preempted()[source]
get_min_duration_subtask()[source]
get_nb_task_preemption()[source]
get_number_of_part(task)[source]
get_start_time(task)[source]
get_start_times_list(task)[source]
get_task_preempted()[source]
total_number_of_cut()[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPSolution_Preemptive_Variant(problem: Problem, modes_vector: List[int] | None = None, modes_vector_from0: List[int] | None = None, priority_list_task: List[int] | None = None, priority_worker_per_task: List[List[Hashable]] | None = None, modes: Dict[int, int] | None = None, schedule: Dict[Hashable, Dict[str, List[int]]] | None = None, employee_usage: Dict[Hashable, List[Dict[Hashable, Set[str]]]] | None = None, fast: bool = True)[source]

Bases: MS_RCPSPSolution_Preemptive

copy()[source]

Deep copy of the solution.

The copy() function should return a new object containing the same input as the current object, that respects the following expected behaviour: -y = x.copy() -if do some inplace change of y, the changes are not done in x.

Returns: a new object from which you can manipulate attributes without changing the original object.

do_recompute(fast=True)[source]
run_sgs_partial(current_t, completed_tasks: Dict[Hashable, TaskDetailsPreemptive], scheduled_tasks_start_times: Dict[Hashable, TaskDetailsPreemptive], fast: bool = True)[source]
update_from_numba_output(starts_dict, ends_dict, skills_usage, unfeasible_non_renewable_resources)[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.MS_RCPSPSolution_Variant(problem: Problem, modes_vector: List[int] | None = None, modes_vector_from0: List[int] | None = None, priority_list_task: List[int] | None = None, priority_worker_per_task: List[List[Hashable]] | None = None, modes: Dict[int, int] | None = None, schedule: Dict[int, Dict[str, int]] | None = None, employee_usage: Dict[int, Dict[int, Set[str]]] | None = None, fast: bool = True)[source]

Bases: MS_RCPSPSolution

copy()[source]

Deep copy of the solution.

The copy() function should return a new object containing the same input as the current object, that respects the following expected behaviour: -y = x.copy() -if do some inplace change of y, the changes are not done in x.

Returns: a new object from which you can manipulate attributes without changing the original object.

do_recompute(fast=True)[source]
run_sgs_partial(current_t, completed_tasks: Dict[Hashable, TaskDetails], scheduled_tasks_start_times: Dict[Hashable, TaskDetails], fast=True)[source]
update_infos_from_numba_output(rcpsp_schedule, skills_usage, unfeasible_non_renewable_resources)[source]
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.ScheduleGenerationScheme(value)[source]

Bases: Enum

An enumeration.

PARALLEL_SGS = 1
SERIAL_SGS = 0
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.SkillDetail(skill_value: float, efficiency_ratio: float, experience: float)[source]

Bases: object

copy()[source]
efficiency_ratio: float
experience: float
skill_value: float
class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.TaskDetails(start, end, resource_units_used: List[int])[source]

Bases: object

class discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.TaskDetailsPreemptive(starts: List[int], ends: List[int], resource_units_used: List[List[Hashable]])[source]

Bases: object

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.build_partial_vectors(problem: MS_RCPSPModel, completed_tasks: Dict[Hashable, TaskDetails], scheduled_tasks_start_times: Dict[Hashable, TaskDetails])[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.build_partial_vectors_preemptive(problem: MS_RCPSPModel, completed_tasks: Dict[Hashable, TaskDetailsPreemptive], scheduled_tasks_start_times: Dict[Hashable, TaskDetailsPreemptive])[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.check_solution(problem: MS_RCPSPModel, solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive, relax_the_start_at_end: bool = True)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.cluster_employees_to_resource_types(ms_rcpsp_problem: MS_RCPSPModel)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.compute_constraints_details(solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive, constraints: SpecialConstraintsDescription)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.compute_overskill(problem: MS_RCPSPModel, solution: MS_RCPSPSolution_Preemptive)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.compute_ressource_array_preemptive(problem: MS_RCPSPModel, solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.compute_skills_missing_problem(problem: MS_RCPSPModel, solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.create_fake_tasks_multiskills(rcpsp_problem: MS_RCPSPModel | MS_RCPSPSolution_Variant)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.create_np_data_and_jit_functions(rcpsp_problem: MS_RCPSPModel | MS_RCPSPModel_Variant)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.employee_usage(solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive, problem: MS_RCPSPModel)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.evaluate_constraints(solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive, constraints: SpecialConstraintsDescription)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.intersect(i1, i2)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.permutation_do_to_permutation_sgs_fast(rcpsp_problem: MS_RCPSPModel, permutation_do)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.priority_worker_per_task_do_to_permutation_sgs_fast(rcpsp_problem: MS_RCPSPModel, priority_worker_per_task)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.schedule_solution_preemptive_to_variant(solution: MS_RCPSPSolution_Preemptive)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.schedule_solution_to_variant(solution: MS_RCPSPSolution)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.sgs_multi_skill(solution: MS_RCPSPSolution_Variant)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.sgs_multi_skill_partial_schedule(solution: MS_RCPSPSolution_Variant, current_t, completed_tasks: Dict[Hashable, TaskDetails], scheduled_tasks_start_times: Dict[Hashable, TaskDetails])[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.sgs_multi_skill_preemptive(solution: MS_RCPSPSolution_Preemptive_Variant)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.sgs_multi_skill_preemptive_partial_schedule(solution: MS_RCPSPSolution_Preemptive_Variant, current_t, completed_tasks: Dict[Hashable, TaskDetailsPreemptive], scheduled_tasks_start_times: Dict[Hashable, TaskDetailsPreemptive])[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.start_together_problem_description(solution: MS_RCPSPSolution | MS_RCPSPSolution_Preemptive, constraints: SpecialConstraintsDescription)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill.tree()[source]

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mslib_parser module

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mslib_parser.get_data_available(data_folder: str | None = None, data_home: str | None = None)[source]

Get datasets available for knapsack. Params:

data_folder: folder where datasets for knapsack whould be find.

If None, we look in “knapsack” subdirectory of data_home.

data_home: root directory for all datasets. Is None, set by

default to “~/discrete_optimization_data “

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mslib_parser.parse_file_mslib(file_path, skill_level_version: bool = True)[source]

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mspsp_parser module

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mspsp_parser.get_data_available_mspsp(data_folder: str | None = None, data_home: str | None = None)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_mspsp_parser.parse_dzn_file(file_path) MS_RCPSPModel[source]

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_parser module

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_parser.get_data_available(data_folder: str | None = None, data_home: str | None = None)[source]

Get datasets available for rcpsp_multiskill.

Params:
data_folder: folder where datasets for rcpsp_multiskill whould be find.

If None, we look in “rcpsp_multiskill” subdirectory of data_home.

data_home: root directory for all datasets. Is None, set by

default to “~/discrete_optimization_data “

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_parser.parse_file(file_path, max_horizon=None, one_unit_per_task=True, preemptive=False) Tuple[MS_RCPSPModel, Dict][source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_parser.parse_imopse(input_data, max_horizon=None, one_unit_per_task=True, preemptive=False)[source]

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_solvers module

discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_solvers.look_for_solver(domain)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_solvers.look_for_solver_class(class_domain)[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_solvers.return_solver(method, problem: MS_RCPSPModel, **args) ResultStorage[source]
discrete_optimization.rcpsp_multiskill.rcpsp_multiskill_solvers.solve(method, problem: MS_RCPSPModel, **args) ResultStorage[source]

Module contents