Source code for discrete_optimization.jsp.utils
# Copyright (c) 2024 AIRBUS and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
from discrete_optimization.jsp.problem import JobShopProblem
from discrete_optimization.rcpsp.problem import RcpspProblem
[docs]
def transform_jsp_to_rcpsp(jsp_problem: JobShopProblem) -> RcpspProblem:
mode_details = {}
successors = {}
tasks_list = ["source"]
successors["source"] = [(i, 0) for i in range(jsp_problem.n_jobs)]
successors["sink"] = []
mode_details["source"] = {1: {"duration": 0}}
mode_details["sink"] = {1: {"duration": 0}}
for i in range(jsp_problem.n_jobs):
for j in range(len(jsp_problem.list_jobs[i])):
tasks_list.append((i, j))
mode_details[(i, j)] = {
1: {
"duration": jsp_problem.list_jobs[i][j].processing_time,
f"machine_{jsp_problem.list_jobs[i][j].machine_id}": 1,
}
}
if j < len(jsp_problem.list_jobs[i]) - 1:
successors[(i, j)] = [(i, j + 1)]
successors[(i, len(jsp_problem.list_jobs[i]) - 1)] = ["sink"]
tasks_list.append("sink")
rcpsp_problem = RcpspProblem(
resources={f"machine_{i}": 1 for i in range(jsp_problem.n_machines)},
non_renewable_resources=[],
successors=successors,
mode_details=mode_details,
tasks_list=tasks_list,
source_task="source",
sink_task="sink",
horizon=5000,
)
return rcpsp_problem