# 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"
}