robin-logistics-env


Namerobin-logistics-env JSON
Version 3.3.0 PyPI version JSON
download
home_pageNone
SummaryProfessional multi-depot vehicle routing environment for hackathons and competitions with interactive dashboard and headless execution
upload_time2025-10-21 17:33:05
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords logistics optimization vehicle-routing hackathon competition simulation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Robin Logistics Environment

A comprehensive logistics optimization environment for hackathons and competitions. This package provides all the infrastructure needed to build and test logistics solvers without implementing the solving logic itself.

## ๐Ÿš€ Quick Start

### For Developers (Testing)

```bash
# Test with base skeleton solver
python main.py

# Test headless mode
python main.py --headless
```

### For Contestants

```python
from robin_logistics import LogisticsEnvironment
from my_solver import my_solver

# Create environment
env = LogisticsEnvironment()

# Set your solver
env.set_solver(my_solver)

# Launch dashboard (automatically uses your solver)
env.launch_dashboard()  # Default port 8501
env.launch_dashboard(port=8502)  # Custom port

# Or run headless
results = env.run_headless("my_run")
```

**Note**: When you call `env.launch_dashboard()`, your solver is automatically passed to the dashboard process. The solver must be defined in an importable module (not inline in REPL).

## ๐Ÿ—๏ธ Architecture

The environment is designed with a clear separation of concerns and **centralized step-based execution**:

- **Environment**: Provides data access, validation, and **sequential step-based execution**
- **Solver**: Implements the optimization logic and **generates step-based routes** (provided by contestants)
- **Dashboard**: Visualizes solutions and metrics from **centralized step progression data**
- **Headless Mode**: Runs simulations and saves results using **identical centralized calculations**

## โš™๏ธ Configuration & Scenario Generation

### Build From Configuration
Generate custom scenarios programmatically with full control over all parameters:

```python
# Custom configuration example
custom_config = {
    'random_seed': 42,                    # For reproducible results
    'num_orders': 25,                     # Number of orders to generate
    'min_items_per_order': 2,             # Minimum items per order
    'max_items_per_order': 8,             # Maximum items per order
    
    # SKU distribution (percentages, must sum to 100)
    'sku_percentages': [40, 35, 25],      # Light, Medium, Heavy items
    
    # Geographic distribution control
    'distance_control': {
        'radius_km': 20,                  # Maximum distance from warehouse centroid
        'density_strategy': 'clustered',   # 'uniform', 'clustered', 'ring'
        'clustering_factor': 0.8,         # 0.0 = uniform, 1.0 = highly clustered
        'ring_count': 4,                  # Number of rings for 'ring' strategy
    },
    
    # Per-warehouse configuration
    'warehouse_configs': [
        {
            # Vehicle fleet per warehouse
            'vehicle_counts': {
                'LightVan': 4,
                'MediumTruck': 2,
                'HeavyTruck': 1
            },
            # Inventory allocation (percentages of total demand)
            'sku_inventory_percentages': [60, 70, 50]  # Light, Medium, Heavy
        },
        {
            'vehicle_counts': {
                'LightVan': 2,
                'MediumTruck': 3,
                'HeavyTruck': 2
            },
            'sku_inventory_percentages': [40, 30, 50]
        }
    ]
}

# Generate scenario from config
env.generate_scenario_from_config(custom_config)

# Or generate new scenario with seed
env.generate_new_scenario(seed=42)
```

### Configuration Options Reference

#### **Core Parameters**
- `random_seed`: Integer for reproducible scenarios
- `num_orders`: Number of orders (1-500)
- `min_items_per_order`: Minimum items per order (default: 1)
- `max_items_per_order`: Maximum items per order (default: 10)
- `sku_percentages`: Distribution of SKU types [Light%, Medium%, Heavy%]

#### **Geographic Distribution (`distance_control`)**
- `radius_km`: Maximum distance from warehouse centroid (5-100 km)
- `density_strategy`: Order distribution pattern
  - `'uniform'`: Even distribution across area
  - `'clustered'`: Orders clustered around warehouses
  - `'ring'`: Orders distributed in concentric rings
- `clustering_factor`: Clustering intensity (0.0-1.0, only for 'clustered')
- `ring_count`: Number of rings (only for 'ring' strategy)

#### **Warehouse Configuration**
- `vehicle_counts`: Fleet composition per warehouse
  - `LightVan`: Capacity 800kg, 3mยณ, 100km range, $1/km
  - `MediumTruck`: Capacity 1600kg, 6mยณ, 150km range, $1.25/km  
  - `HeavyTruck`: Capacity 5000kg, 20mยณ, 200km range, $1.5/km
- `sku_inventory_percentages`: Inventory allocation as % of total demand

### Dashboard Configuration UI
The dashboard provides an interactive configuration interface with:
- **Geographic Control**: Radius, distribution strategy, clustering sliders
- **Supply Configuration**: Inventory distribution across warehouses
- **Fleet Configuration**: Vehicle counts per warehouse type
- **Order Settings**: Number of orders and SKU distribution

All dashboard settings map directly to the configuration schema above.

## ๐Ÿ“‹ Scenario Export/Import

Export and import scenarios with full configuration preservation:

### Export Scenario
```python
# Export current scenario with all generation parameters
scenario_data = env.export_scenario()

# Save to file
import json
with open('my_scenario.json', 'w') as f:
    json.dump(scenario_data, f, indent=2)
```

### Import Scenario
```python
# Load scenario from file
import json
with open('my_scenario.json', 'r') as f:
    scenario_data = json.load(f)

# Load into environment
env.load_scenario(scenario_data)

# Access stored generation config
config = env.get_stored_generation_config()
print(f"Clustering factor: {config['distance_control']['clustering_factor']}")
```

### Scenario Format
The exported scenario includes:
- **skus**: SKU definitions (weight, volume)
- **warehouses**: Warehouse locations, inventory, and vehicles
- **orders**: Order destinations and requirements
- **generation_config**: Complete configuration used to generate the scenario

This allows you to:
1. Export a scenario with specific settings
2. Manually modify orders, inventory, or vehicles
3. Import the modified scenario while preserving generation parameters
4. Recreate identical scenarios later with same configuration

## ๐Ÿ“ฆ Package Structure

```
robin_logistics/
โ”œโ”€โ”€ environment.py          # Main interface for contestants
โ”œโ”€โ”€ solvers.py             # Base skeleton solver for testing
โ”œโ”€โ”€ dashboard.py           # Streamlit-based visualization
โ”œโ”€โ”€ headless.py            # Headless execution and result saving
โ””โ”€โ”€ core/                  # Core components
    โ”œโ”€โ”€ models/            # Data models (Node, SKU, Order, Vehicle, Warehouse)
    โ”œโ”€โ”€ state/             # State management and orchestration
    โ”œโ”€โ”€ network/           # Road network and distance calculations
    โ”œโ”€โ”€ validation/        # Solution validation
    โ”œโ”€โ”€ metrics/           # Cost and performance calculations
    โ””โ”€โ”€ utils/             # Helper utilities
```

## ๐Ÿ”ง Key Features

- **Step-based route execution**: Routes defined as ordered steps with node-bound operations
- **Centralized validation**: Single `validate_route_steps()` method for all route validation
- **Centralized execution**: Single `execute_route_sequential()` method for all route execution
- **Centralized metrics**: Single source of truth for all calculations (cost, distance, fulfillment)
- **No legacy code**: Pure step-based architecture with no aggregated operation fallbacks
- **Real-time constraint checking**: Capacity, inventory, and distance constraints checked at each step
- **Consistent data flow**: Dashboard and headless mode use identical centralized calculations
 - **Isolated state with baseline resets**: Dashboard and headless restore original inventories and clear deliveries between runs
- **Seamless solver integration**: Your solver automatically works in both modes

## ๐Ÿ“Š Dashboard Features

- Problem visualization (nodes, warehouses, orders)
- **Step-based route visualization** with accurate node sequence and operations
- **Centralized metrics display** from step progression data (no redundant calculations)
- **Real-time step progression table** showing cumulative distance, weight, volume, and cost
- **Accurate operation display** showing pickups/deliveries at correct nodes from step data
- Order fulfillment tracking with proper rate capping (never exceeds 100%)
- **No legacy fallbacks** - all data comes from centralized step-based system

## ๐Ÿš› Headless Mode

Run simulations without the dashboard and save detailed results:

```python
results = env.run_headless("run_001")
# Results saved to 'results/custom_solver_run_001/'
```

Generated files include:
- Solution summary and validation
- Route details and metrics
- Fulfillment analysis with capped rates
- Raw data for further processing
- **All metrics identical to dashboard** (unified calculation source)

## ๐Ÿ”„ Solver Integration

The environment seamlessly integrates your solver across all modes:

- **Headless Mode**: Direct solver execution with result saving
- **Dashboard Mode**: Automatic solver import and execution with enhanced error reporting
- **CLI Mode**: Command-line solver execution with file paths
- **Unified Metrics**: Both modes use identical calculation logic for perfect consistency

Your solver function is automatically passed to the dashboard process when using `env.launch_dashboard()`, ensuring consistent behavior across all execution modes.

### Required Solution Schema (Step-Based)

Solvers must return routes with ordered steps bound to nodes. Each route requires:

```python
{
  'vehicle_id': 'veh_01',
  'steps': [
    {'node_id': start_node, 'pickups': [...], 'deliveries': [], 'unloads': []},
    {'node_id': some_node, 'pickups': [], 'deliveries': [...], 'unloads': []},
    ...
  ]
}
```

The environment validates connectivity, enforces cumulative distance against vehicle limits, and executes operations sequentially per step.

## ๐ŸŽฏ Recent Improvements (v2.8.0+)

### **Unified Metrics Calculator**
- Dashboard and headless now use identical data sources
- No more calculation discrepancies between modes
- Single source of truth for all metrics

### **Enhanced Error Reporting**
- Dashboard shows detailed solver failure reasons
- Validation errors displayed with specific feedback
- Better debugging and troubleshooting

### **Fixed Fulfillment Logic**
- Fulfillment rates properly capped at 100%
- Correct remaining quantity calculations
- Consistent fulfillment tracking across all sections

### **Simplified Cost Analysis**
 - Cumulative cost shown per step (dispatch fixed cost + variable to date)
- Clean cost breakdown: Total, Fixed, Variable costs
- Total distance display
- No redundant metrics or calculations

### **State Management & Reset**
- **Automatic State Reset**: Dashboard automatically resets inventory and vehicle states between runs
- **Manual Reset Methods**: Use `env.reset_all_state()` or `env.complete_reset()` for manual state management
- **Fresh Environment**: Each simulation starts with original inventory levels and empty vehicles

```python
# Manual state management examples
env.reset_all_state()        # Reset inventory, vehicles, order tracking
env.complete_reset(seed=42)  # Full reset + generate new scenario
env._reset_vehicle_states()  # Reset only vehicle loads/capacities
```

## ๐Ÿงช Testing

Test the environment with mock data:

```bash
# Run mock tests
python -m tests.test_environment_mock

# Test with mock solvers
python -m tests.test_environment_with_mock_solvers
```

## ๐Ÿ“š Documentation

- [API Reference](API_REFERENCE.md) - Complete API documentation
- [Contributing](CONTRIBUTING.md) - Development guidelines
- [Changelog](CHANGELOG.md) - Version history

## ๐Ÿš€ Installation

```bash
# Install in development mode from source
pip install -e .

# Or install dependencies only
pip install -r requirements.txt
```

## ๐Ÿ“ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "robin-logistics-env",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "logistics, optimization, vehicle-routing, hackathon, competition, simulation",
    "author": null,
    "author_email": "Robin <mario.salama@beltoneholding.com>",
    "download_url": "https://files.pythonhosted.org/packages/40/05/392d63543bf5c44e0aeaa7912143084c8ff3a31a534b204ed09017f7e5ec/robin_logistics_env-3.3.0.tar.gz",
    "platform": null,
    "description": "# Robin Logistics Environment\r\n\r\nA comprehensive logistics optimization environment for hackathons and competitions. This package provides all the infrastructure needed to build and test logistics solvers without implementing the solving logic itself.\r\n\r\n## \ud83d\ude80 Quick Start\r\n\r\n### For Developers (Testing)\r\n\r\n```bash\r\n# Test with base skeleton solver\r\npython main.py\r\n\r\n# Test headless mode\r\npython main.py --headless\r\n```\r\n\r\n### For Contestants\r\n\r\n```python\r\nfrom robin_logistics import LogisticsEnvironment\r\nfrom my_solver import my_solver\r\n\r\n# Create environment\r\nenv = LogisticsEnvironment()\r\n\r\n# Set your solver\r\nenv.set_solver(my_solver)\r\n\r\n# Launch dashboard (automatically uses your solver)\r\nenv.launch_dashboard()  # Default port 8501\r\nenv.launch_dashboard(port=8502)  # Custom port\r\n\r\n# Or run headless\r\nresults = env.run_headless(\"my_run\")\r\n```\r\n\r\n**Note**: When you call `env.launch_dashboard()`, your solver is automatically passed to the dashboard process. The solver must be defined in an importable module (not inline in REPL).\r\n\r\n## \ud83c\udfd7\ufe0f Architecture\r\n\r\nThe environment is designed with a clear separation of concerns and **centralized step-based execution**:\r\n\r\n- **Environment**: Provides data access, validation, and **sequential step-based execution**\r\n- **Solver**: Implements the optimization logic and **generates step-based routes** (provided by contestants)\r\n- **Dashboard**: Visualizes solutions and metrics from **centralized step progression data**\r\n- **Headless Mode**: Runs simulations and saves results using **identical centralized calculations**\r\n\r\n## \u2699\ufe0f Configuration & Scenario Generation\r\n\r\n### Build From Configuration\r\nGenerate custom scenarios programmatically with full control over all parameters:\r\n\r\n```python\r\n# Custom configuration example\r\ncustom_config = {\r\n    'random_seed': 42,                    # For reproducible results\r\n    'num_orders': 25,                     # Number of orders to generate\r\n    'min_items_per_order': 2,             # Minimum items per order\r\n    'max_items_per_order': 8,             # Maximum items per order\r\n    \r\n    # SKU distribution (percentages, must sum to 100)\r\n    'sku_percentages': [40, 35, 25],      # Light, Medium, Heavy items\r\n    \r\n    # Geographic distribution control\r\n    'distance_control': {\r\n        'radius_km': 20,                  # Maximum distance from warehouse centroid\r\n        'density_strategy': 'clustered',   # 'uniform', 'clustered', 'ring'\r\n        'clustering_factor': 0.8,         # 0.0 = uniform, 1.0 = highly clustered\r\n        'ring_count': 4,                  # Number of rings for 'ring' strategy\r\n    },\r\n    \r\n    # Per-warehouse configuration\r\n    'warehouse_configs': [\r\n        {\r\n            # Vehicle fleet per warehouse\r\n            'vehicle_counts': {\r\n                'LightVan': 4,\r\n                'MediumTruck': 2,\r\n                'HeavyTruck': 1\r\n            },\r\n            # Inventory allocation (percentages of total demand)\r\n            'sku_inventory_percentages': [60, 70, 50]  # Light, Medium, Heavy\r\n        },\r\n        {\r\n            'vehicle_counts': {\r\n                'LightVan': 2,\r\n                'MediumTruck': 3,\r\n                'HeavyTruck': 2\r\n            },\r\n            'sku_inventory_percentages': [40, 30, 50]\r\n        }\r\n    ]\r\n}\r\n\r\n# Generate scenario from config\r\nenv.generate_scenario_from_config(custom_config)\r\n\r\n# Or generate new scenario with seed\r\nenv.generate_new_scenario(seed=42)\r\n```\r\n\r\n### Configuration Options Reference\r\n\r\n#### **Core Parameters**\r\n- `random_seed`: Integer for reproducible scenarios\r\n- `num_orders`: Number of orders (1-500)\r\n- `min_items_per_order`: Minimum items per order (default: 1)\r\n- `max_items_per_order`: Maximum items per order (default: 10)\r\n- `sku_percentages`: Distribution of SKU types [Light%, Medium%, Heavy%]\r\n\r\n#### **Geographic Distribution (`distance_control`)**\r\n- `radius_km`: Maximum distance from warehouse centroid (5-100 km)\r\n- `density_strategy`: Order distribution pattern\r\n  - `'uniform'`: Even distribution across area\r\n  - `'clustered'`: Orders clustered around warehouses\r\n  - `'ring'`: Orders distributed in concentric rings\r\n- `clustering_factor`: Clustering intensity (0.0-1.0, only for 'clustered')\r\n- `ring_count`: Number of rings (only for 'ring' strategy)\r\n\r\n#### **Warehouse Configuration**\r\n- `vehicle_counts`: Fleet composition per warehouse\r\n  - `LightVan`: Capacity 800kg, 3m\u00b3, 100km range, $1/km\r\n  - `MediumTruck`: Capacity 1600kg, 6m\u00b3, 150km range, $1.25/km  \r\n  - `HeavyTruck`: Capacity 5000kg, 20m\u00b3, 200km range, $1.5/km\r\n- `sku_inventory_percentages`: Inventory allocation as % of total demand\r\n\r\n### Dashboard Configuration UI\r\nThe dashboard provides an interactive configuration interface with:\r\n- **Geographic Control**: Radius, distribution strategy, clustering sliders\r\n- **Supply Configuration**: Inventory distribution across warehouses\r\n- **Fleet Configuration**: Vehicle counts per warehouse type\r\n- **Order Settings**: Number of orders and SKU distribution\r\n\r\nAll dashboard settings map directly to the configuration schema above.\r\n\r\n## \ud83d\udccb Scenario Export/Import\r\n\r\nExport and import scenarios with full configuration preservation:\r\n\r\n### Export Scenario\r\n```python\r\n# Export current scenario with all generation parameters\r\nscenario_data = env.export_scenario()\r\n\r\n# Save to file\r\nimport json\r\nwith open('my_scenario.json', 'w') as f:\r\n    json.dump(scenario_data, f, indent=2)\r\n```\r\n\r\n### Import Scenario\r\n```python\r\n# Load scenario from file\r\nimport json\r\nwith open('my_scenario.json', 'r') as f:\r\n    scenario_data = json.load(f)\r\n\r\n# Load into environment\r\nenv.load_scenario(scenario_data)\r\n\r\n# Access stored generation config\r\nconfig = env.get_stored_generation_config()\r\nprint(f\"Clustering factor: {config['distance_control']['clustering_factor']}\")\r\n```\r\n\r\n### Scenario Format\r\nThe exported scenario includes:\r\n- **skus**: SKU definitions (weight, volume)\r\n- **warehouses**: Warehouse locations, inventory, and vehicles\r\n- **orders**: Order destinations and requirements\r\n- **generation_config**: Complete configuration used to generate the scenario\r\n\r\nThis allows you to:\r\n1. Export a scenario with specific settings\r\n2. Manually modify orders, inventory, or vehicles\r\n3. Import the modified scenario while preserving generation parameters\r\n4. Recreate identical scenarios later with same configuration\r\n\r\n## \ud83d\udce6 Package Structure\r\n\r\n```\r\nrobin_logistics/\r\n\u251c\u2500\u2500 environment.py          # Main interface for contestants\r\n\u251c\u2500\u2500 solvers.py             # Base skeleton solver for testing\r\n\u251c\u2500\u2500 dashboard.py           # Streamlit-based visualization\r\n\u251c\u2500\u2500 headless.py            # Headless execution and result saving\r\n\u2514\u2500\u2500 core/                  # Core components\r\n    \u251c\u2500\u2500 models/            # Data models (Node, SKU, Order, Vehicle, Warehouse)\r\n    \u251c\u2500\u2500 state/             # State management and orchestration\r\n    \u251c\u2500\u2500 network/           # Road network and distance calculations\r\n    \u251c\u2500\u2500 validation/        # Solution validation\r\n    \u251c\u2500\u2500 metrics/           # Cost and performance calculations\r\n    \u2514\u2500\u2500 utils/             # Helper utilities\r\n```\r\n\r\n## \ud83d\udd27 Key Features\r\n\r\n- **Step-based route execution**: Routes defined as ordered steps with node-bound operations\r\n- **Centralized validation**: Single `validate_route_steps()` method for all route validation\r\n- **Centralized execution**: Single `execute_route_sequential()` method for all route execution\r\n- **Centralized metrics**: Single source of truth for all calculations (cost, distance, fulfillment)\r\n- **No legacy code**: Pure step-based architecture with no aggregated operation fallbacks\r\n- **Real-time constraint checking**: Capacity, inventory, and distance constraints checked at each step\r\n- **Consistent data flow**: Dashboard and headless mode use identical centralized calculations\r\n - **Isolated state with baseline resets**: Dashboard and headless restore original inventories and clear deliveries between runs\r\n- **Seamless solver integration**: Your solver automatically works in both modes\r\n\r\n## \ud83d\udcca Dashboard Features\r\n\r\n- Problem visualization (nodes, warehouses, orders)\r\n- **Step-based route visualization** with accurate node sequence and operations\r\n- **Centralized metrics display** from step progression data (no redundant calculations)\r\n- **Real-time step progression table** showing cumulative distance, weight, volume, and cost\r\n- **Accurate operation display** showing pickups/deliveries at correct nodes from step data\r\n- Order fulfillment tracking with proper rate capping (never exceeds 100%)\r\n- **No legacy fallbacks** - all data comes from centralized step-based system\r\n\r\n## \ud83d\ude9b Headless Mode\r\n\r\nRun simulations without the dashboard and save detailed results:\r\n\r\n```python\r\nresults = env.run_headless(\"run_001\")\r\n# Results saved to 'results/custom_solver_run_001/'\r\n```\r\n\r\nGenerated files include:\r\n- Solution summary and validation\r\n- Route details and metrics\r\n- Fulfillment analysis with capped rates\r\n- Raw data for further processing\r\n- **All metrics identical to dashboard** (unified calculation source)\r\n\r\n## \ud83d\udd04 Solver Integration\r\n\r\nThe environment seamlessly integrates your solver across all modes:\r\n\r\n- **Headless Mode**: Direct solver execution with result saving\r\n- **Dashboard Mode**: Automatic solver import and execution with enhanced error reporting\r\n- **CLI Mode**: Command-line solver execution with file paths\r\n- **Unified Metrics**: Both modes use identical calculation logic for perfect consistency\r\n\r\nYour solver function is automatically passed to the dashboard process when using `env.launch_dashboard()`, ensuring consistent behavior across all execution modes.\r\n\r\n### Required Solution Schema (Step-Based)\r\n\r\nSolvers must return routes with ordered steps bound to nodes. Each route requires:\r\n\r\n```python\r\n{\r\n  'vehicle_id': 'veh_01',\r\n  'steps': [\r\n    {'node_id': start_node, 'pickups': [...], 'deliveries': [], 'unloads': []},\r\n    {'node_id': some_node, 'pickups': [], 'deliveries': [...], 'unloads': []},\r\n    ...\r\n  ]\r\n}\r\n```\r\n\r\nThe environment validates connectivity, enforces cumulative distance against vehicle limits, and executes operations sequentially per step.\r\n\r\n## \ud83c\udfaf Recent Improvements (v2.8.0+)\r\n\r\n### **Unified Metrics Calculator**\r\n- Dashboard and headless now use identical data sources\r\n- No more calculation discrepancies between modes\r\n- Single source of truth for all metrics\r\n\r\n### **Enhanced Error Reporting**\r\n- Dashboard shows detailed solver failure reasons\r\n- Validation errors displayed with specific feedback\r\n- Better debugging and troubleshooting\r\n\r\n### **Fixed Fulfillment Logic**\r\n- Fulfillment rates properly capped at 100%\r\n- Correct remaining quantity calculations\r\n- Consistent fulfillment tracking across all sections\r\n\r\n### **Simplified Cost Analysis**\r\n - Cumulative cost shown per step (dispatch fixed cost + variable to date)\r\n- Clean cost breakdown: Total, Fixed, Variable costs\r\n- Total distance display\r\n- No redundant metrics or calculations\r\n\r\n### **State Management & Reset**\r\n- **Automatic State Reset**: Dashboard automatically resets inventory and vehicle states between runs\r\n- **Manual Reset Methods**: Use `env.reset_all_state()` or `env.complete_reset()` for manual state management\r\n- **Fresh Environment**: Each simulation starts with original inventory levels and empty vehicles\r\n\r\n```python\r\n# Manual state management examples\r\nenv.reset_all_state()        # Reset inventory, vehicles, order tracking\r\nenv.complete_reset(seed=42)  # Full reset + generate new scenario\r\nenv._reset_vehicle_states()  # Reset only vehicle loads/capacities\r\n```\r\n\r\n## \ud83e\uddea Testing\r\n\r\nTest the environment with mock data:\r\n\r\n```bash\r\n# Run mock tests\r\npython -m tests.test_environment_mock\r\n\r\n# Test with mock solvers\r\npython -m tests.test_environment_with_mock_solvers\r\n```\r\n\r\n## \ud83d\udcda Documentation\r\n\r\n- [API Reference](API_REFERENCE.md) - Complete API documentation\r\n- [Contributing](CONTRIBUTING.md) - Development guidelines\r\n- [Changelog](CHANGELOG.md) - Version history\r\n\r\n## \ud83d\ude80 Installation\r\n\r\n```bash\r\n# Install in development mode from source\r\npip install -e .\r\n\r\n# Or install dependencies only\r\npip install -r requirements.txt\r\n```\r\n\r\n## \ud83d\udcdd License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Professional multi-depot vehicle routing environment for hackathons and competitions with interactive dashboard and headless execution",
    "version": "3.3.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/RobinDataScience/Logistics-Env/issues",
        "Homepage": "https://github.com/RobinDataScience/Logistics-Env",
        "Repository": "https://github.com/RobinDataScience/Logistics-Env.git"
    },
    "split_keywords": [
        "logistics",
        " optimization",
        " vehicle-routing",
        " hackathon",
        " competition",
        " simulation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "80f7748c7bcb2c4ae294875e1ade09428111fa3d47a02d78f3c51b04d8894de6",
                "md5": "135480d92600e4b5420dbf48d7cae80c",
                "sha256": "64c1b551555ec857970e20625cef2dad8784dfd5b3602cb4f155bf395a824c93"
            },
            "downloads": -1,
            "filename": "robin_logistics_env-3.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "135480d92600e4b5420dbf48d7cae80c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 9310486,
            "upload_time": "2025-10-21T17:31:02",
            "upload_time_iso_8601": "2025-10-21T17:31:02.442028Z",
            "url": "https://files.pythonhosted.org/packages/80/f7/748c7bcb2c4ae294875e1ade09428111fa3d47a02d78f3c51b04d8894de6/robin_logistics_env-3.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4005392d63543bf5c44e0aeaa7912143084c8ff3a31a534b204ed09017f7e5ec",
                "md5": "a44c99615e04efafe7a25fbb13127226",
                "sha256": "18313cb69921871bfa46f0ab6ab99a5f12bf60b3397167e30715ef102dfc32a2"
            },
            "downloads": -1,
            "filename": "robin_logistics_env-3.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a44c99615e04efafe7a25fbb13127226",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 9316810,
            "upload_time": "2025-10-21T17:33:05",
            "upload_time_iso_8601": "2025-10-21T17:33:05.564098Z",
            "url": "https://files.pythonhosted.org/packages/40/05/392d63543bf5c44e0aeaa7912143084c8ff3a31a534b204ed09017f7e5ec/robin_logistics_env-3.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-21 17:33:05",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RobinDataScience",
    "github_project": "Logistics-Env",
    "github_not_found": true,
    "lcname": "robin-logistics-env"
}
        
Elapsed time: 3.17116s