robin-logistics-env


Namerobin-logistics-env JSON
Version 2.0.1 PyPI version JSON
download
home_pagehttps://github.com/robin-logistics/optimization-environment
SummaryComprehensive logistics optimization environment with interactive dashboard and performance analytics
upload_time2025-08-07 09:36:37
maintainerNone
docs_urlNone
authorRobin Logistics Team
requires_python>=3.8
licenseMIT
keywords logistics optimization vehicle-routing supply-chain algorithms hackathon vrp mdvrp
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Robin Logistics Environment

[![PyPI version](https://badge.fury.io/py/robin-logistics-env.svg)](https://badge.fury.io/py/robin-logistics-env)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A comprehensive logistics optimization environment for developing and testing multi-depot vehicle routing algorithms. Built for hackathons, research, and educational purposes.

## ๐Ÿš€ Quick Start

### Installation

```bash
pip install robin-logistics-env
```

### Basic Usage

```python
from robin_logistics import LogisticsEnvironment

# Load the environment
env = LogisticsEnvironment()

# Define your solver function
def my_solver(env):
    """Your optimization algorithm goes here"""
    routes = {}
    
    # Access environment data
    warehouses = env.warehouse_locations
    orders = env.order_requirements
    vehicles = env.get_available_vehicles()
    
    # Build your solution
    for vehicle_id in vehicles[:len(orders)]:
        warehouse_node = env.get_vehicle_home_warehouse(vehicle_id)
        order = orders[0] if orders else None
        
        if order:
            routes[vehicle_id] = [
                warehouse_node,
                order['destination_node'],
                warehouse_node
            ]
            orders.pop(0)
    
    return {"routes": routes}

# Launch interactive dashboard
env.launch_dashboard(my_solver)
```

## ๐Ÿ“‹ Features

### ๐ŸŽฏ Core Capabilities
- **Multi-depot vehicle routing** with real-world constraints
- **Interactive dashboard** with real-time visualization
- **Performance metrics** and algorithm comparison
- **Dynamic problem generation** with configurable parameters
- **Solution validation** and cost estimation

### ๐Ÿ› ๏ธ Environment API
- **Distance calculations** between any nodes
- **Route optimization** helpers and validation
- **Inventory management** across multiple warehouses
- **Vehicle capacity** and constraint checking
- **Order fulfillment** tracking and analytics

### ๐Ÿ“Š Dashboard Features
- **Problem Definition Editor** - Configure orders, warehouses, inventory
- **Interactive Map** - Visualize routes and locations
- **Performance Metrics** - Track solver time, costs, efficiency
- **Order Inspector** - Detailed order and delivery information
- **Real-time Analytics** - Vehicle utilization, delivery rates

## ๐Ÿ“– API Reference

### LogisticsEnvironment

The main interface for accessing problem data and running optimizations.

#### Properties

```python
env.num_warehouses          # Number of distribution centers
env.num_vehicles            # Total fleet size
env.num_orders             # Customer orders count
env.warehouse_locations    # [(warehouse_id, lat, lon), ...]
env.customer_locations     # [(order_id, lat, lon), ...]
env.order_requirements     # Detailed order specifications
env.vehicle_specs          # Vehicle capacity and cost info
```

#### Core Methods

```python
# Distance and routing
env.get_distance(node1, node2)                    # Shortest distance in km
env.get_shortest_path(node1, node2)               # Path as list of nodes
env.calculate_route_statistics(route)             # Distance, stops, etc.

# Vehicle and capacity checking
env.get_available_vehicles()                      # List of vehicle IDs
env.can_vehicle_serve_orders(vehicle_id, orders)  # Capacity validation
env.get_vehicle_home_warehouse(vehicle_id)        # Home base location

# Order and inventory management
env.get_order_location(order_id)                  # Delivery destination
env.get_warehouse_inventory(warehouse_id)         # Stock levels
env.get_unassigned_orders(current_solution)       # Remaining orders

# Solution validation and optimization
env.validate_route(vehicle_id, route)             # Check route validity
env.estimate_route_cost(vehicle_id, route)        # Cost estimation
env.run_optimization(solver_function)             # Execute and analyze
```

#### Advanced Utilities

```python
# Geographic analysis
env.get_nodes_within_distance(center, max_dist)   # Nearby locations
env.get_sku_info()                                # Product specifications

# Performance analysis
env.launch_dashboard(solver_function)             # Interactive visualization
```

## ๐Ÿงช Example Solvers

### Basic Nearest Neighbor

```python
def nearest_neighbor_solver(env):
    """Simple nearest neighbor heuristic"""
    routes = {}
    unassigned = list(range(len(env.order_requirements)))
    
    for vehicle_id in env.get_available_vehicles():
        if not unassigned:
            break
            
        warehouse_node = env.get_vehicle_home_warehouse(vehicle_id)
        route = [warehouse_node]
        current_node = warehouse_node
        vehicle_orders = []
        
        while unassigned:
            # Find nearest unassigned order
            nearest_order = None
            min_distance = float('inf')
            
            for i, order_idx in enumerate(unassigned):
                order = env.order_requirements[order_idx]
                order_node = order['destination_node']
                distance = env.get_distance(current_node, order_node)
                
                # Check capacity constraints
                if env.can_vehicle_serve_orders(vehicle_id, [order['order_id']]):
                    if distance < min_distance:
                        min_distance = distance
                        nearest_order = i
            
            if nearest_order is None:
                break
                
            # Add order to route
            order_idx = unassigned.pop(nearest_order)
            order = env.order_requirements[order_idx]
            current_node = order['destination_node']
            route.append(current_node)
        
        # Return to warehouse
        route.append(warehouse_node)
        routes[vehicle_id] = route
    
    return {"routes": routes}
```

### Advanced Genetic Algorithm

```python
def genetic_algorithm_solver(env):
    """Genetic algorithm for vehicle routing"""
    import random
    
    def create_individual():
        orders = list(range(len(env.order_requirements)))
        random.shuffle(orders)
        return orders
    
    def evaluate_fitness(individual):
        # Convert to routes and calculate cost
        routes = assign_orders_to_vehicles(individual, env)
        return calculate_total_cost(routes, env)
    
    def crossover(parent1, parent2):
        # Order crossover (OX)
        size = len(parent1)
        start, end = sorted(random.sample(range(size), 2))
        child = [-1] * size
        child[start:end] = parent1[start:end]
        
        remaining = [x for x in parent2 if x not in child]
        for i in range(size):
            if child[i] == -1:
                child[i] = remaining.pop(0)
        return child
    
    def mutate(individual):
        # Swap mutation
        i, j = random.sample(range(len(individual)), 2)
        individual[i], individual[j] = individual[j], individual[i]
        return individual
    
    # Genetic algorithm main loop
    population_size = 100
    generations = 500
    mutation_rate = 0.1
    
    population = [create_individual() for _ in range(population_size)]
    
    for generation in range(generations):
        # Evaluate fitness
        fitness_scores = [evaluate_fitness(ind) for ind in population]
        
        # Selection, crossover, mutation
        new_population = []
        for _ in range(population_size):
            parent1 = tournament_selection(population, fitness_scores)
            parent2 = tournament_selection(population, fitness_scores)
            child = crossover(parent1, parent2)
            
            if random.random() < mutation_rate:
                child = mutate(child)
            
            new_population.append(child)
        
        population = new_population
    
    # Return best solution
    best_individual = min(population, key=evaluate_fitness)
    return assign_orders_to_vehicles(best_individual, env)
```

## ๐ŸŽ›๏ธ Dashboard Configuration

The interactive dashboard provides comprehensive control over problem parameters:

### Problem Definition
- **Orders**: Number, weight ratios, SKU variety
- **Warehouses**: Count, locations, inventory distribution  
- **Fleet**: Vehicle count per warehouse, capacity specifications
- **Geography**: Delivery distance constraints

### Performance Metrics
- **Timing**: Solver execution, simulation overhead
- **Efficiency**: Delivery rates, cost per order, fleet utilization
- **Quality**: Solution validation, constraint satisfaction

### Visualization
- **Interactive Map**: Real-time route visualization with order details
- **Analytics**: Vehicle status, inventory usage, journey analysis
- **Comparison**: Multi-algorithm performance benchmarking

## ๐Ÿ”ง Development Setup

### Local Installation

```bash
# Clone repository
git clone https://github.com/your-org/robin-logistics-env.git
cd robin-logistics-env

# Install in development mode
pip install -e .

# Install development dependencies
pip install -r requirements-dev.txt
```

### Running Tests

```bash
# Run test suite
python -m pytest tests/

# Run with coverage
python -m pytest tests/ --cov=robin_logistics --cov-report=html
```

### Building Documentation

```bash
# Generate API documentation
cd docs/
make html

# Serve locally
python -m http.server 8000 --directory _build/html
```

## ๐ŸŽฏ Problem Constraints

### Vehicle Constraints
- **Capacity**: Weight (kg) and volume (mยณ) limits
- **Distance**: Maximum travel distance per route
- **Home Base**: Must start and end at assigned warehouse

### Order Constraints  
- **Delivery**: Each order has a specific destination
- **Items**: Multiple SKUs with different weight/volume
- **Fulfillment**: Orders must be completely satisfied

### Inventory Constraints
- **Availability**: Limited stock at each warehouse
- **Distribution**: Configurable inventory allocation
- **Depletion**: Stock decreases with order fulfillment

## ๐Ÿ“ˆ Solution Format

Your solver function must return a dictionary with the following structure:

```python
{
    "routes": {
        "vehicle_id_1": [warehouse_node, customer_node_1, customer_node_2, warehouse_node],
        "vehicle_id_2": [warehouse_node, customer_node_3, warehouse_node],
        # ... more routes
    }
}
```

### Route Requirements
- **Start/End**: Routes must begin and end at the vehicle's home warehouse
- **Nodes**: Use node IDs from the road network
- **Orders**: Visit customer nodes to fulfill orders
- **Capacity**: Respect vehicle weight and volume limits
- **Distance**: Stay within vehicle's maximum travel distance

## ๐Ÿ† Optimization Tips

### Algorithm Design
1. **Start Simple**: Implement nearest neighbor or greedy heuristics first
2. **Add Constraints**: Gradually incorporate capacity and distance limits
3. **Improve Solutions**: Use local search, genetic algorithms, or simulated annealing
4. **Handle Edge Cases**: Empty orders, unreachable locations, capacity exceeded

### Performance Optimization
1. **Distance Caching**: Cache frequently accessed distances
2. **Early Termination**: Stop when solutions aren't improving
3. **Parallel Processing**: Use multiple threads for population-based algorithms
4. **Memory Management**: Avoid storing unnecessary intermediate solutions

### Dashboard Usage
1. **Problem Tuning**: Use sliders to test different problem sizes
2. **Performance Analysis**: Monitor solver time vs solution quality
3. **Visual Debugging**: Use the map to identify routing inefficiencies
4. **Comparison**: Test multiple algorithms on the same problem instance

## ๐Ÿค Contributing

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

### Development Workflow
1. Fork the repository
2. Create a feature branch: `git checkout -b feature-name`
3. Make your changes with tests
4. Run the test suite: `python -m pytest`
5. Submit a pull request

### Issue Reporting
- Use GitHub Issues for bug reports and feature requests
- Include code samples and error messages
- Describe your environment (Python version, OS, etc.)

## ๐Ÿ“„ License

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

## ๐Ÿ™ Acknowledgments

- Built for logistics optimization education and research
- Inspired by real-world vehicle routing challenges
- Designed for hackathon accessibility and extensibility

## ๐Ÿ“š Additional Resources

- [Vehicle Routing Problem on Wikipedia](https://en.wikipedia.org/wiki/Vehicle_routing_problem)
- [Operations Research Techniques](https://www.coursera.org/learn/operations-research-modeling)
- [Python Optimization Libraries](https://pypi.org/search/?q=optimization)

---

**Happy Optimizing!** ๐Ÿš›๐Ÿ“ฆโœจ

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/robin-logistics/optimization-environment",
    "name": "robin-logistics-env",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "logistics, optimization, vehicle-routing, supply-chain, algorithms, hackathon, vrp, mdvrp",
    "author": "Robin Logistics Team",
    "author_email": "Robin Logistics Team <info@robin-logistics.com>",
    "download_url": "https://files.pythonhosted.org/packages/49/41/ab39e306d5c326faf36caa2e7f604d95ecf731075202e2b651b582331580/robin_logistics_env-2.0.1.tar.gz",
    "platform": "any",
    "description": "# Robin Logistics Environment\n\n[![PyPI version](https://badge.fury.io/py/robin-logistics-env.svg)](https://badge.fury.io/py/robin-logistics-env)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA comprehensive logistics optimization environment for developing and testing multi-depot vehicle routing algorithms. Built for hackathons, research, and educational purposes.\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\npip install robin-logistics-env\n```\n\n### Basic Usage\n\n```python\nfrom robin_logistics import LogisticsEnvironment\n\n# Load the environment\nenv = LogisticsEnvironment()\n\n# Define your solver function\ndef my_solver(env):\n    \"\"\"Your optimization algorithm goes here\"\"\"\n    routes = {}\n    \n    # Access environment data\n    warehouses = env.warehouse_locations\n    orders = env.order_requirements\n    vehicles = env.get_available_vehicles()\n    \n    # Build your solution\n    for vehicle_id in vehicles[:len(orders)]:\n        warehouse_node = env.get_vehicle_home_warehouse(vehicle_id)\n        order = orders[0] if orders else None\n        \n        if order:\n            routes[vehicle_id] = [\n                warehouse_node,\n                order['destination_node'],\n                warehouse_node\n            ]\n            orders.pop(0)\n    \n    return {\"routes\": routes}\n\n# Launch interactive dashboard\nenv.launch_dashboard(my_solver)\n```\n\n## \ud83d\udccb Features\n\n### \ud83c\udfaf Core Capabilities\n- **Multi-depot vehicle routing** with real-world constraints\n- **Interactive dashboard** with real-time visualization\n- **Performance metrics** and algorithm comparison\n- **Dynamic problem generation** with configurable parameters\n- **Solution validation** and cost estimation\n\n### \ud83d\udee0\ufe0f Environment API\n- **Distance calculations** between any nodes\n- **Route optimization** helpers and validation\n- **Inventory management** across multiple warehouses\n- **Vehicle capacity** and constraint checking\n- **Order fulfillment** tracking and analytics\n\n### \ud83d\udcca Dashboard Features\n- **Problem Definition Editor** - Configure orders, warehouses, inventory\n- **Interactive Map** - Visualize routes and locations\n- **Performance Metrics** - Track solver time, costs, efficiency\n- **Order Inspector** - Detailed order and delivery information\n- **Real-time Analytics** - Vehicle utilization, delivery rates\n\n## \ud83d\udcd6 API Reference\n\n### LogisticsEnvironment\n\nThe main interface for accessing problem data and running optimizations.\n\n#### Properties\n\n```python\nenv.num_warehouses          # Number of distribution centers\nenv.num_vehicles            # Total fleet size\nenv.num_orders             # Customer orders count\nenv.warehouse_locations    # [(warehouse_id, lat, lon), ...]\nenv.customer_locations     # [(order_id, lat, lon), ...]\nenv.order_requirements     # Detailed order specifications\nenv.vehicle_specs          # Vehicle capacity and cost info\n```\n\n#### Core Methods\n\n```python\n# Distance and routing\nenv.get_distance(node1, node2)                    # Shortest distance in km\nenv.get_shortest_path(node1, node2)               # Path as list of nodes\nenv.calculate_route_statistics(route)             # Distance, stops, etc.\n\n# Vehicle and capacity checking\nenv.get_available_vehicles()                      # List of vehicle IDs\nenv.can_vehicle_serve_orders(vehicle_id, orders)  # Capacity validation\nenv.get_vehicle_home_warehouse(vehicle_id)        # Home base location\n\n# Order and inventory management\nenv.get_order_location(order_id)                  # Delivery destination\nenv.get_warehouse_inventory(warehouse_id)         # Stock levels\nenv.get_unassigned_orders(current_solution)       # Remaining orders\n\n# Solution validation and optimization\nenv.validate_route(vehicle_id, route)             # Check route validity\nenv.estimate_route_cost(vehicle_id, route)        # Cost estimation\nenv.run_optimization(solver_function)             # Execute and analyze\n```\n\n#### Advanced Utilities\n\n```python\n# Geographic analysis\nenv.get_nodes_within_distance(center, max_dist)   # Nearby locations\nenv.get_sku_info()                                # Product specifications\n\n# Performance analysis\nenv.launch_dashboard(solver_function)             # Interactive visualization\n```\n\n## \ud83e\uddea Example Solvers\n\n### Basic Nearest Neighbor\n\n```python\ndef nearest_neighbor_solver(env):\n    \"\"\"Simple nearest neighbor heuristic\"\"\"\n    routes = {}\n    unassigned = list(range(len(env.order_requirements)))\n    \n    for vehicle_id in env.get_available_vehicles():\n        if not unassigned:\n            break\n            \n        warehouse_node = env.get_vehicle_home_warehouse(vehicle_id)\n        route = [warehouse_node]\n        current_node = warehouse_node\n        vehicle_orders = []\n        \n        while unassigned:\n            # Find nearest unassigned order\n            nearest_order = None\n            min_distance = float('inf')\n            \n            for i, order_idx in enumerate(unassigned):\n                order = env.order_requirements[order_idx]\n                order_node = order['destination_node']\n                distance = env.get_distance(current_node, order_node)\n                \n                # Check capacity constraints\n                if env.can_vehicle_serve_orders(vehicle_id, [order['order_id']]):\n                    if distance < min_distance:\n                        min_distance = distance\n                        nearest_order = i\n            \n            if nearest_order is None:\n                break\n                \n            # Add order to route\n            order_idx = unassigned.pop(nearest_order)\n            order = env.order_requirements[order_idx]\n            current_node = order['destination_node']\n            route.append(current_node)\n        \n        # Return to warehouse\n        route.append(warehouse_node)\n        routes[vehicle_id] = route\n    \n    return {\"routes\": routes}\n```\n\n### Advanced Genetic Algorithm\n\n```python\ndef genetic_algorithm_solver(env):\n    \"\"\"Genetic algorithm for vehicle routing\"\"\"\n    import random\n    \n    def create_individual():\n        orders = list(range(len(env.order_requirements)))\n        random.shuffle(orders)\n        return orders\n    \n    def evaluate_fitness(individual):\n        # Convert to routes and calculate cost\n        routes = assign_orders_to_vehicles(individual, env)\n        return calculate_total_cost(routes, env)\n    \n    def crossover(parent1, parent2):\n        # Order crossover (OX)\n        size = len(parent1)\n        start, end = sorted(random.sample(range(size), 2))\n        child = [-1] * size\n        child[start:end] = parent1[start:end]\n        \n        remaining = [x for x in parent2 if x not in child]\n        for i in range(size):\n            if child[i] == -1:\n                child[i] = remaining.pop(0)\n        return child\n    \n    def mutate(individual):\n        # Swap mutation\n        i, j = random.sample(range(len(individual)), 2)\n        individual[i], individual[j] = individual[j], individual[i]\n        return individual\n    \n    # Genetic algorithm main loop\n    population_size = 100\n    generations = 500\n    mutation_rate = 0.1\n    \n    population = [create_individual() for _ in range(population_size)]\n    \n    for generation in range(generations):\n        # Evaluate fitness\n        fitness_scores = [evaluate_fitness(ind) for ind in population]\n        \n        # Selection, crossover, mutation\n        new_population = []\n        for _ in range(population_size):\n            parent1 = tournament_selection(population, fitness_scores)\n            parent2 = tournament_selection(population, fitness_scores)\n            child = crossover(parent1, parent2)\n            \n            if random.random() < mutation_rate:\n                child = mutate(child)\n            \n            new_population.append(child)\n        \n        population = new_population\n    \n    # Return best solution\n    best_individual = min(population, key=evaluate_fitness)\n    return assign_orders_to_vehicles(best_individual, env)\n```\n\n## \ud83c\udf9b\ufe0f Dashboard Configuration\n\nThe interactive dashboard provides comprehensive control over problem parameters:\n\n### Problem Definition\n- **Orders**: Number, weight ratios, SKU variety\n- **Warehouses**: Count, locations, inventory distribution  \n- **Fleet**: Vehicle count per warehouse, capacity specifications\n- **Geography**: Delivery distance constraints\n\n### Performance Metrics\n- **Timing**: Solver execution, simulation overhead\n- **Efficiency**: Delivery rates, cost per order, fleet utilization\n- **Quality**: Solution validation, constraint satisfaction\n\n### Visualization\n- **Interactive Map**: Real-time route visualization with order details\n- **Analytics**: Vehicle status, inventory usage, journey analysis\n- **Comparison**: Multi-algorithm performance benchmarking\n\n## \ud83d\udd27 Development Setup\n\n### Local Installation\n\n```bash\n# Clone repository\ngit clone https://github.com/your-org/robin-logistics-env.git\ncd robin-logistics-env\n\n# Install in development mode\npip install -e .\n\n# Install development dependencies\npip install -r requirements-dev.txt\n```\n\n### Running Tests\n\n```bash\n# Run test suite\npython -m pytest tests/\n\n# Run with coverage\npython -m pytest tests/ --cov=robin_logistics --cov-report=html\n```\n\n### Building Documentation\n\n```bash\n# Generate API documentation\ncd docs/\nmake html\n\n# Serve locally\npython -m http.server 8000 --directory _build/html\n```\n\n## \ud83c\udfaf Problem Constraints\n\n### Vehicle Constraints\n- **Capacity**: Weight (kg) and volume (m\u00b3) limits\n- **Distance**: Maximum travel distance per route\n- **Home Base**: Must start and end at assigned warehouse\n\n### Order Constraints  \n- **Delivery**: Each order has a specific destination\n- **Items**: Multiple SKUs with different weight/volume\n- **Fulfillment**: Orders must be completely satisfied\n\n### Inventory Constraints\n- **Availability**: Limited stock at each warehouse\n- **Distribution**: Configurable inventory allocation\n- **Depletion**: Stock decreases with order fulfillment\n\n## \ud83d\udcc8 Solution Format\n\nYour solver function must return a dictionary with the following structure:\n\n```python\n{\n    \"routes\": {\n        \"vehicle_id_1\": [warehouse_node, customer_node_1, customer_node_2, warehouse_node],\n        \"vehicle_id_2\": [warehouse_node, customer_node_3, warehouse_node],\n        # ... more routes\n    }\n}\n```\n\n### Route Requirements\n- **Start/End**: Routes must begin and end at the vehicle's home warehouse\n- **Nodes**: Use node IDs from the road network\n- **Orders**: Visit customer nodes to fulfill orders\n- **Capacity**: Respect vehicle weight and volume limits\n- **Distance**: Stay within vehicle's maximum travel distance\n\n## \ud83c\udfc6 Optimization Tips\n\n### Algorithm Design\n1. **Start Simple**: Implement nearest neighbor or greedy heuristics first\n2. **Add Constraints**: Gradually incorporate capacity and distance limits\n3. **Improve Solutions**: Use local search, genetic algorithms, or simulated annealing\n4. **Handle Edge Cases**: Empty orders, unreachable locations, capacity exceeded\n\n### Performance Optimization\n1. **Distance Caching**: Cache frequently accessed distances\n2. **Early Termination**: Stop when solutions aren't improving\n3. **Parallel Processing**: Use multiple threads for population-based algorithms\n4. **Memory Management**: Avoid storing unnecessary intermediate solutions\n\n### Dashboard Usage\n1. **Problem Tuning**: Use sliders to test different problem sizes\n2. **Performance Analysis**: Monitor solver time vs solution quality\n3. **Visual Debugging**: Use the map to identify routing inefficiencies\n4. **Comparison**: Test multiple algorithms on the same problem instance\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n### Development Workflow\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature-name`\n3. Make your changes with tests\n4. Run the test suite: `python -m pytest`\n5. Submit a pull request\n\n### Issue Reporting\n- Use GitHub Issues for bug reports and feature requests\n- Include code samples and error messages\n- Describe your environment (Python version, OS, etc.)\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Built for logistics optimization education and research\n- Inspired by real-world vehicle routing challenges\n- Designed for hackathon accessibility and extensibility\n\n## \ud83d\udcda Additional Resources\n\n- [Vehicle Routing Problem on Wikipedia](https://en.wikipedia.org/wiki/Vehicle_routing_problem)\n- [Operations Research Techniques](https://www.coursera.org/learn/operations-research-modeling)\n- [Python Optimization Libraries](https://pypi.org/search/?q=optimization)\n\n---\n\n**Happy Optimizing!** \ud83d\ude9b\ud83d\udce6\u2728\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Comprehensive logistics optimization environment with interactive dashboard and performance analytics",
    "version": "2.0.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/robin-logistics/optimization-environment/issues",
        "Changelog": "https://github.com/robin-logistics/optimization-environment/blob/main/CHANGELOG.md",
        "Documentation": "https://robin-logistics.readthedocs.io/",
        "Homepage": "https://github.com/robin-logistics/optimization-environment",
        "Repository": "https://github.com/robin-logistics/optimization-environment"
    },
    "split_keywords": [
        "logistics",
        " optimization",
        " vehicle-routing",
        " supply-chain",
        " algorithms",
        " hackathon",
        " vrp",
        " mdvrp"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "62b9a08198b4725639638c4c3c0cab9a0f856c1a02205db1df8a8b9a7915f9d8",
                "md5": "d4ea8bb8c694bdfa21fe976ee59e2f2b",
                "sha256": "f2daea94a759a50cfc6f7c8b5728c211da262b2a128f5950b8dac75d41acdd51"
            },
            "downloads": -1,
            "filename": "robin_logistics_env-2.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d4ea8bb8c694bdfa21fe976ee59e2f2b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 414740,
            "upload_time": "2025-08-07T09:36:35",
            "upload_time_iso_8601": "2025-08-07T09:36:35.793449Z",
            "url": "https://files.pythonhosted.org/packages/62/b9/a08198b4725639638c4c3c0cab9a0f856c1a02205db1df8a8b9a7915f9d8/robin_logistics_env-2.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4941ab39e306d5c326faf36caa2e7f604d95ecf731075202e2b651b582331580",
                "md5": "3ae3c9277b8bf2f2d6c9c28f73b1ba61",
                "sha256": "02d4b0908415231f6eecc896f9c2e870e4cbde3e98c62ff4a54201fabff36f0e"
            },
            "downloads": -1,
            "filename": "robin_logistics_env-2.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "3ae3c9277b8bf2f2d6c9c28f73b1ba61",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 423430,
            "upload_time": "2025-08-07T09:36:37",
            "upload_time_iso_8601": "2025-08-07T09:36:37.568983Z",
            "url": "https://files.pythonhosted.org/packages/49/41/ab39e306d5c326faf36caa2e7f604d95ecf731075202e2b651b582331580/robin_logistics_env-2.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-07 09:36:37",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "robin-logistics",
    "github_project": "optimization-environment",
    "github_not_found": true,
    "lcname": "robin-logistics-env"
}
        
Elapsed time: 1.94455s