Skip to content

SDK Common QUBO Problem Generation Guide

Updated: 2026-08-28

Purpose

This guide shows SDK users how to compile road routing, delivery allocation, low-altitude UAV corridors, high-altitude airspace choices, and generic binary decisions into a shared QUBO format. The generated QUBO is accepted by the existing D-Wave, OpenJij, Fixstars Amplify, Qiskit, and classical annealing backends.

Installation

The common builder requires only the normal Core installation.

cd EvoSpikeNet-Core
pip install -e .

OpenStreetMap road extraction is optional. Install it only in an environment that fetches live OSM road networks.

pip install -e '.[road]'

Cached road snapshots and automated tests use NetworkX graphs and require neither OSMnx nor network access.

Minimal Road Example

import networkx as nx
from evospikenet.optimization import RoadLocation, RoadNetworkBuilder, QuboProblemBuilder

graph = nx.MultiDiGraph()
graph.add_edge("hub", "depot", length=1200.0)
graph.add_edge("depot", "hub", length=1500.0)

locations = [RoadLocation("hub", 35.5492, 139.7898), RoadLocation("depot", 35.5312, 139.7029)]
snapshot = RoadNetworkBuilder().from_graph(graph, locations, {"hub": "hub", "depot": "depot"})
solver_input = QuboProblemBuilder().build(snapshot.to_optimization_problem("route-replan")).as_problem_dict()

Road graphs remain directed: \(d(i,j)\) can differ from \(d(j,i)\) because of one-way roads. Unreachable links are excluded from candidates rather than assigned an artificial cost.

Temporary Restrictions

Use DynamicConstraint for accidents, construction, closures, no-fly zones, weather, and unavailable vehicles.

from datetime import datetime, timedelta, timezone
from evospikenet.optimization import DynamicConstraint

now = datetime.now(timezone.utc)
closure = DynamicConstraint(
    constraint_id="closure-20260828-01",
    constraint_type="road_closure",
    severity="hard",
    candidate_ids=frozenset({"road:hub:depot"}),
    active_from=now,
    active_until=now + timedelta(minutes=30),
    penalty=10_000.0,
)

hard restrictions produce a prohibitive QUBO penalty and must also be checked before applying a solution. soft restrictions add a tunable detour or risk cost. Restrictions can target IDs or candidate attributes, and only active time windows are compiled.

Run the SDK Example

The offline sample creates directed road links, compiles a temporary closure, and prints the resulting solver input without downloading OSM data.

cd EvoSpikeNet-Core
python3.10 examples/sdk/programs/road_qubo_generation_demo.py

See Quantum Annealing Problem Generation Specification for the full design, QUBO constraints, and acceptance requirements. All solver output must pass application-level regulation, collision, and safety validation before operational use.