Source code for discrete_optimization.rcalbp_l.parser

#  Copyright (c) 2026 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.
import json
import os
from typing import Optional

from discrete_optimization.datasets import ERROR_MSG_MISSING_DATASETS, get_data_home
from discrete_optimization.rcalbp_l.problem import RCALBPLProblem


[docs] def get_data_available( data_folder: Optional[str] = None, data_home: Optional[str] = None ) -> list[str]: """Get datasets available for rcpsp. Params: data_folder: folder where datasets for rcpsp whould be find. If None, we look in "rcpsp" subdirectory of `data_home`. data_home: root directory for all datasets. Is None, set by default to "~/discrete_optimization_data " """ if data_folder is None: data_home = get_data_home(data_home=data_home) data_folder = f"{data_home}/rcalb_l" try: files = [f for f in os.listdir(data_folder) if f.endswith(".json")] except FileNotFoundError as e: raise FileNotFoundError(str(e) + ERROR_MSG_MISSING_DATASETS) return [os.path.abspath(os.path.join(data_folder, f)) for f in files]
[docs] def parse_rcalbpl_json(file_path: str) -> RCALBPLProblem: """ Parses the RC-ALBP/L JSON data and constructs the Problem instance. """ with open(file_path, "r") as f: data = json.load(f) # 1. Base Variables c_target = data["c_target"] c_max = data["c_max"] nb_stations = data["nb_stations"] nb_periods = data["nb_periods"] nb_tasks = data["nb_tasks"] # 2. Precedences precedences = [(p[0] - 1, p[1] - 1) for p in data.get("precedences", [])] # 3. Durations matrix durations = data.get("durations", []) # 4. Resources nb_resources = data.get("nb_resources", 0) capa_resources = data.get("capa_resources", []) cons_resources = data.get("cons_resources", []) # 5. Zones nb_zones = data.get("nb_zones", 0) capa_zones = data.get("capa_zones", []) cons_zones = data.get("cons_zones", []) neutr_zones = data.get("neutr_zones", []) neutr_zones = [[i - 1 for i in x] for x in neutr_zones] return RCALBPLProblem( c_target=c_target, c_max=c_max, nb_stations=nb_stations, nb_periods=nb_periods, nb_tasks=nb_tasks, precedences=precedences, durations=durations, nb_resources=nb_resources, capa_resources=capa_resources, cons_resources=cons_resources, nb_zones=nb_zones, capa_zones=capa_zones, cons_zones=cons_zones, neutr_zones=neutr_zones, )