Skip to content
JAOT

Transportation Network Design

Overview

Transportation network optimization helps logistics companies plan freight movement across multi-modal networks -- deciding how to ship goods from origins to destinations via truck, rail, air, or sea to minimize total cost while meeting delivery deadlines. Unlike single-vehicle routing, network design considers the entire supply chain flow, including hub-and-spoke architectures, transshipment points, and modal trade-offs.

For companies moving thousands of shipments per day, network-level optimization can reduce freight costs by 10-20% compared to routing each shipment independently.

When to Use This

Best for: Freight planners, logistics directors, and supply chain analysts who need to optimize how goods flow from multiple origins to multiple destinations across different transportation modes.

  • Scenario: You need to ship products from several warehouses to multiple retail stores or distribution centers, choosing the best combination of truck, rail, and air freight to minimize costs while meeting delivery windows
  • Industry: Third-party logistics (3PL), freight forwarding, retail distribution, e-commerce fulfillment, postal services, manufacturing distribution
  • ROI: Typical reduction of 10-20% in total freight costs, improved modal utilization, and more consistent delivery times

Step-by-Step Walkthrough

1. Define the network

Map your origins (factories, warehouses), intermediate hubs (distribution centers, rail yards), and destinations (stores, customers). Specify the demand at each destination and supply available at each origin.

2. Define transportation modes

For each route segment, specify the available modes with their cost per unit, capacity, transit time, and frequency. For example, Chicago to New York might have truck ($2.10/unit, 2-day transit) and rail ($0.85/unit, 5-day transit) options.

3. Add operational constraints

  • Capacity limits on each route and mode
  • Delivery deadline requirements by destination
  • Minimum shipment sizes for rail or container loads
  • Hub throughput capacities
  • Modal compatibility (some products cannot go by certain modes)

4. Set the objective

Typically minimize total transportation cost while meeting all demand and delivery requirements. Alternatively, minimize total transit time or balance cost against service level.

Transportation Network in JAOT Builder

5. Analyze the optimal network flow

Review the shipping plan: how much flows through each route, which modes are selected, and where hubs are congested. Identify opportunities to consolidate shipments or shift modes on high-volume lanes.

Example Parameters

import httpx

API_URL = "https://api.jaot.io/api/v2"
headers = {"Authorization": "Bearer ok_live_your_key_here"}

# Ship from 3 warehouses to 4 stores via truck or rail
response = httpx.post(f"{API_URL}/solve", headers=headers, json={
    "variables": [
        # truck_WH_Store = units shipped by truck from warehouse to store
        {"name": "truck_chicago_nyc", "type": "continuous", "lb": 0},
        {"name": "rail_chicago_nyc", "type": "continuous", "lb": 0},
        {"name": "truck_chicago_atlanta", "type": "continuous", "lb": 0},
        {"name": "rail_chicago_atlanta", "type": "continuous", "lb": 0},
        {"name": "truck_dallas_nyc", "type": "continuous", "lb": 0},
        {"name": "truck_dallas_atlanta", "type": "continuous", "lb": 0},
        {"name": "truck_dallas_miami", "type": "continuous", "lb": 0},
        {"name": "truck_la_seattle", "type": "continuous", "lb": 0},
        {"name": "rail_la_seattle", "type": "continuous", "lb": 0},
        {"name": "truck_la_miami", "type": "continuous", "lb": 0},
    ],
    "objective": {
        "sense": "minimize",
        "coefficients": {
            "truck_chicago_nyc": 2.10, "rail_chicago_nyc": 0.85,
            "truck_chicago_atlanta": 1.80, "rail_chicago_atlanta": 0.75,
            "truck_dallas_nyc": 2.50, "truck_dallas_atlanta": 1.40,
            "truck_dallas_miami": 1.90, "truck_la_seattle": 1.60,
            "rail_la_seattle": 0.65, "truck_la_miami": 3.20,
        },
    },
    "constraints": [
        {
            "name": "nyc_demand",
            "coefficients": {
                "truck_chicago_nyc": 1, "rail_chicago_nyc": 1,
                "truck_dallas_nyc": 1
            },
            "sense": ">=",
            "rhs": 500,
        },
        {
            "name": "atlanta_demand",
            "coefficients": {
                "truck_chicago_atlanta": 1, "rail_chicago_atlanta": 1,
                "truck_dallas_atlanta": 1
            },
            "sense": ">=",
            "rhs": 300,
        },
        {
            "name": "seattle_demand",
            "coefficients": {"truck_la_seattle": 1, "rail_la_seattle": 1},
            "sense": ">=",
            "rhs": 200,
        },
        {
            "name": "miami_demand",
            "coefficients": {"truck_dallas_miami": 1, "truck_la_miami": 1},
            "sense": ">=",
            "rhs": 250,
        },
        {
            "name": "chicago_supply",
            "coefficients": {
                "truck_chicago_nyc": 1, "rail_chicago_nyc": 1,
                "truck_chicago_atlanta": 1, "rail_chicago_atlanta": 1
            },
            "sense": "<=",
            "rhs": 600,
        },
        {
            "name": "dallas_supply",
            "coefficients": {
                "truck_dallas_nyc": 1, "truck_dallas_atlanta": 1,
                "truck_dallas_miami": 1
            },
            "sense": "<=",
            "rhs": 450,
        },
        {
            "name": "la_supply",
            "coefficients": {
                "truck_la_seattle": 1, "rail_la_seattle": 1,
                "truck_la_miami": 1
            },
            "sense": "<=",
            "rhs": 400,
        },
    ],
})
result = response.json()

print(f"Minimum freight cost: ${result['objective_value']:,.2f}")
for var in result["variables"]:
    if var["value"] > 0:
        print(f"  {var['name']}: {var['value']:.0f} units")

Templates

Next Steps