discrete_optimization.alb.salbp.transformations package

Submodules

discrete_optimization.alb.salbp.transformations.to_binpack module

Transformation from SALBP to BinPacking (reverse direction).

Note: This transformation DISCARDS precedence constraints! Only use when precedence can be safely ignored or doesn’t exist.

class discrete_optimization.alb.salbp.transformations.to_binpack.SalbpToBinpackTransformation[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, BinPackProblem, BinPackSolution]

Transform SALBP to BinPacking (reverse direction).

Mapping: - Tasks (with processing times) → Items (with weights) - Station cycle time → Bin capacity - Minimize stations → Minimize bins - Precedence constraints DISCARDED

This transformation is INCOMPLETE IN BOTH DIRECTIONS: - Forward (problem): LOSSY - precedence constraints cannot be represented in BinPack - Backward (solution): LOSSY - incompatibility constraints from BinPack cannot be verified in SALBP

Only use when:
  • SALBP has NO precedence constraints AND

  • BinPack has NO incompatibility constraints

  • In this case, both problems are equivalent (pure capacity allocation)

Warning

This transformation LOSES precedence information! Solutions from BinPack solvers may violate precedence if present in SALBP.

back_transform_solution(solution: BinPackSolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform BinPacking solution back to SALBP solution.

Parameters:
  • solution – BinPacking solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: BinPackProblem) BinPackSolution | None[source]

Transform SALBP solution to BinPacking solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target BinPacking problem

Returns:

Equivalent BinPacking solution for warmstart

get_forward_metadata() TransformationMetadata[source]

Metadata for forward problem transformation (SALBP → BinPack).

This direction is LOSSY: precedence constraints cannot be represented.

transform_problem(source_problem: SalbpProblem) BinPackProblem[source]

Transform SALBP to BinPacking.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent BinPacking problem (without precedence)

discrete_optimization.alb.salbp.transformations.to_facility module

Transformation from SALBP to Facility Location.

Creates a facility problem with uniform facilities and zero distances.

class discrete_optimization.alb.salbp.transformations.to_facility.SalbpToFacilityTransformation[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, FacilityProblem, FacilitySolution]

Transform SALBP to Facility Location.

Mapping: - Tasks → Customers (demand = task_time) - Stations → Facilities (capacity = cycle_time) - Minimize stations → Minimize facilities - Precedence DISCARDED (Facility has no precedence concept)

This transformation is ASYMMETRIC: - Forward (problem): LOSSY - precedence constraints lost - Backward (solution): EXACT - facility assignments map to station assignments

Creates:
  • Uniform facilities (all same capacity = cycle_time, zero setup cost)

  • Zero distances between customers and facilities

  • This makes it equivalent to pure capacity allocation

back_transform_solution(solution: FacilitySolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform Facility Location solution back to SALBP solution.

Parameters:
  • solution – Facility Location solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: FacilityProblem) FacilitySolution | None[source]

Transform SALBP solution to Facility Location solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target Facility Location problem

Returns:

Equivalent Facility Location solution for warmstart

get_forward_metadata() TransformationMetadata[source]

Metadata for forward problem transformation (SALBP → Facility).

This direction is LOSSY: precedence constraints cannot be represented.

transform_problem(source_problem: SalbpProblem) FacilityProblem[source]

Transform SALBP to Facility Location.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent Facility Location problem

discrete_optimization.alb.salbp.transformations.to_rcalbp_l module

Transformation from SALBP to RCALBP_L (Resource-Constrained Assembly Line Balancing with Learning).

class discrete_optimization.alb.salbp.transformations.to_rcalbp_l.SalbpToRcalbpLTransformation(nb_stations_upper_bound: int | None = None)[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, RCALBPLProblem, RCALBPLSolution]

Transform SALBP to RCALBP_L.

Mapping: - SALBP tasks → RCALBP_L tasks (single period, no learning) - SALBP stations → RCALBP_L workstations - SALBP cycle time → RCALBP_L target cycle time - SALBP precedence → RCALBP_L precedence - No resources, no zones (empty sets) - Single period (no learning effect) - Task durations remain constant across workstations

This is a SUBSET transformation: SALBP is a special case of RCALBP_L where: - nb_resources = 0 - nb_zones = 0 - nb_periods = 1 - No learning effect (durations constant)

back_transform_solution(solution: RCALBPLSolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform RCALBP_L solution back to SALBP solution.

Parameters:
  • solution – RCALBP_L solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: RCALBPLProblem) RCALBPLSolution | None[source]

Transform SALBP solution to RCALBP_L solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target RCALBP_L problem

Returns:

Equivalent RCALBP_L solution

get_forward_metadata() TransformationMetadata[source]

Metadata for forward transformation (SALBP → RCALBP_L).

transform_problem(source_problem: SalbpProblem) RCALBPLProblem[source]

Transform SALBP to RCALBP_L.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent RCALBP_L problem (no resources, single period)

Module contents

Problem transformations for SALBP (Simple Assembly Line Balancing Problem).

class discrete_optimization.alb.salbp.transformations.SalbpToBinpackTransformation[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, BinPackProblem, BinPackSolution]

Transform SALBP to BinPacking (reverse direction).

Mapping: - Tasks (with processing times) → Items (with weights) - Station cycle time → Bin capacity - Minimize stations → Minimize bins - Precedence constraints DISCARDED

This transformation is INCOMPLETE IN BOTH DIRECTIONS: - Forward (problem): LOSSY - precedence constraints cannot be represented in BinPack - Backward (solution): LOSSY - incompatibility constraints from BinPack cannot be verified in SALBP

Only use when:
  • SALBP has NO precedence constraints AND

  • BinPack has NO incompatibility constraints

  • In this case, both problems are equivalent (pure capacity allocation)

Warning

This transformation LOSES precedence information! Solutions from BinPack solvers may violate precedence if present in SALBP.

back_transform_solution(solution: BinPackSolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform BinPacking solution back to SALBP solution.

Parameters:
  • solution – BinPacking solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: BinPackProblem) BinPackSolution | None[source]

Transform SALBP solution to BinPacking solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target BinPacking problem

Returns:

Equivalent BinPacking solution for warmstart

get_forward_metadata() TransformationMetadata[source]

Metadata for forward problem transformation (SALBP → BinPack).

This direction is LOSSY: precedence constraints cannot be represented.

transform_problem(source_problem: SalbpProblem) BinPackProblem[source]

Transform SALBP to BinPacking.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent BinPacking problem (without precedence)

class discrete_optimization.alb.salbp.transformations.SalbpToFacilityTransformation[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, FacilityProblem, FacilitySolution]

Transform SALBP to Facility Location.

Mapping: - Tasks → Customers (demand = task_time) - Stations → Facilities (capacity = cycle_time) - Minimize stations → Minimize facilities - Precedence DISCARDED (Facility has no precedence concept)

This transformation is ASYMMETRIC: - Forward (problem): LOSSY - precedence constraints lost - Backward (solution): EXACT - facility assignments map to station assignments

Creates:
  • Uniform facilities (all same capacity = cycle_time, zero setup cost)

  • Zero distances between customers and facilities

  • This makes it equivalent to pure capacity allocation

back_transform_solution(solution: FacilitySolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform Facility Location solution back to SALBP solution.

Parameters:
  • solution – Facility Location solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: FacilityProblem) FacilitySolution | None[source]

Transform SALBP solution to Facility Location solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target Facility Location problem

Returns:

Equivalent Facility Location solution for warmstart

get_forward_metadata() TransformationMetadata[source]

Metadata for forward problem transformation (SALBP → Facility).

This direction is LOSSY: precedence constraints cannot be represented.

transform_problem(source_problem: SalbpProblem) FacilityProblem[source]

Transform SALBP to Facility Location.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent Facility Location problem

class discrete_optimization.alb.salbp.transformations.SalbpToRcalbpLTransformation(nb_stations_upper_bound: int | None = None)[source]

Bases: ProblemTransformation[SalbpProblem, SalbpSolution, RCALBPLProblem, RCALBPLSolution]

Transform SALBP to RCALBP_L.

Mapping: - SALBP tasks → RCALBP_L tasks (single period, no learning) - SALBP stations → RCALBP_L workstations - SALBP cycle time → RCALBP_L target cycle time - SALBP precedence → RCALBP_L precedence - No resources, no zones (empty sets) - Single period (no learning effect) - Task durations remain constant across workstations

This is a SUBSET transformation: SALBP is a special case of RCALBP_L where: - nb_resources = 0 - nb_zones = 0 - nb_periods = 1 - No learning effect (durations constant)

back_transform_solution(solution: RCALBPLSolution, source_problem: SalbpProblem) SalbpSolution[source]

Transform RCALBP_L solution back to SALBP solution.

Parameters:
  • solution – RCALBP_L solution

  • source_problem – Original SALBP problem

Returns:

Equivalent SALBP solution

forward_transform_solution(solution: SalbpSolution, target_problem: RCALBPLProblem) RCALBPLSolution | None[source]

Transform SALBP solution to RCALBP_L solution (for warmstart).

Parameters:
  • solution – SALBP solution

  • target_problem – Target RCALBP_L problem

Returns:

Equivalent RCALBP_L solution

get_forward_metadata() TransformationMetadata[source]

Metadata for forward transformation (SALBP → RCALBP_L).

transform_problem(source_problem: SalbpProblem) RCALBPLProblem[source]

Transform SALBP to RCALBP_L.

Parameters:

source_problem – SALBP problem instance

Returns:

Equivalent RCALBP_L problem (no resources, single period)