Skip to content

Nohome

No-home placement strategy: two-phase return assignment + entangling routing.

Instead of returning atoms to their original home positions after each CZ layer, this strategy assigns displaced qubits to optimal home sites that minimise future movement. The assignment uses the Hungarian algorithm with gamma-decayed future CZ partner proximity as a lookahead signal.

Phase 1 (return): Hungarian-pick a home layout, then route current → home via fixed-target solve. Phase 2 (entangling): Hungarian-pick CZ-staging targets (with optional lookahead-aware blend), then route home → staging via fixed-target solve. This mirrors how :class:PhysicalPlacementStrategy routes to pre-computed CZ targets.

Both phases run in Rust via MoveSolver.solve_nohome.

NoHomePlacementStrategy dataclass

NoHomePlacementStrategy(
    arch_spec: ArchSpec,
    strategy: SearchStrategy = (
        lambda: SearchStrategy.IDS
    )(),
    max_expansions: int | None = 100,
    restarts: int = 20,
    deadlock_policy: DeadlockPolicy = (
        lambda: DeadlockPolicy.MOVE_BLOCKERS
    )(),
    top_c: int | None = None,
    gamma: float = 0.85,
    lambda_lookahead: float = 0.5,
    k_candidates: int = 8,
    top_bus_signatures: int = 6,
    bus_reward_rho: int = 1,
)

Bases: NoReturnStrategyBase


              flowchart TD
              bloqade.lanes.heuristics.physical.nohome.NoHomePlacementStrategy[NoHomePlacementStrategy]
              bloqade.lanes.heuristics.physical._no_return_base.NoReturnStrategyBase[NoReturnStrategyBase]
              bloqade.lanes.analysis.placement.strategy.PlacementStrategyABC[PlacementStrategyABC]

                              bloqade.lanes.heuristics.physical._no_return_base.NoReturnStrategyBase --> bloqade.lanes.heuristics.physical.nohome.NoHomePlacementStrategy
                                bloqade.lanes.analysis.placement.strategy.PlacementStrategyABC --> bloqade.lanes.heuristics.physical._no_return_base.NoReturnStrategyBase
                



              click bloqade.lanes.heuristics.physical.nohome.NoHomePlacementStrategy href "" "bloqade.lanes.heuristics.physical.nohome.NoHomePlacementStrategy"
              click bloqade.lanes.heuristics.physical._no_return_base.NoReturnStrategyBase href "" "bloqade.lanes.heuristics.physical._no_return_base.NoReturnStrategyBase"
              click bloqade.lanes.analysis.placement.strategy.PlacementStrategyABC href "" "bloqade.lanes.analysis.placement.strategy.PlacementStrategyABC"
            

Two-phase placement: return assignment + entangling routing.

Parameters

arch_spec: Architecture specification. strategy: Inner search strategy as a :class:SearchStrategy enum used for the two routing phases. Default 🇵🇾attr:SearchStrategy.IDS. max_expansions: Maximum node expansions per solve call (shared across phases). restarts: Number of parallel restarts with perturbed scoring inside each routing solve (return phase + entangling phase). The two-phase Hungarian assignments themselves are deterministic; diversity comes from the candidate-home-layout fan-out. Default 20. deadlock_policy: :class:DeadlockPolicy enum value controlling how the heuristic generator handles deadlocks during routing. Default 🇵🇾attr:DeadlockPolicy.MOVE_BLOCKERS. gamma: Discount factor for future CZ layer weights in the return assignment (default 0.85). lambda_lookahead: Blend weight for future proximity penalty in the return assignment (default 0.5). k_candidates: Maximum candidate holes per returner for cost-matrix pruning (default 8). top_bus_signatures: Number of bus-reward variant assignments to generate (default 6). Each variant rewards edges sharing a high-coverage lane signature, biasing the assignment toward layouts with parallel routing. bus_reward_rho: Per-edge hop-count discount applied to edges using a top signature when building bus-reward variant cost matrices (default 1).

Notes

Unlike :class:NoReturnPlacementStrategy and :class:RecedingHorizonNoReturnPlacementStrategy, this strategy does not pass top_c to SolveOptions (it inherits the base default None), matching the historical behaviour of the two-phase solve_nohome entry point.