<НА ГЛАВНУЮ

Создание автономной системы логистики с многими агентами

Глубокое погружение в создание симуляции логистики с автономными грузовиками.

Концепция автономной логистики

В этом руководстве мы создаем современную автономную симуляцию логистики, в которой несколько умных грузовиков работают в динамичной городской сети дорог. Каждый грузовик действует как агент, способный делать ставки на заказы на доставку, планировать оптимальные маршруты, управлять уровнем заряда батареи и максимизировать прибыль через собственные решения.

Построение симуляции

В каждом фрагменте кода мы исследуем, как агентные поведения возникают из простых правил, как конкуренция формирует выделение заказов и как основанный на графе мир позволяет реализовать реалистичное движение и маршрутизацию.

Настройка окружения

Для начала симуляции:

import networkx as nx  
import matplotlib.pyplot as plt  
import random  
import time  
from IPython.display import clear_output  
from dataclasses import dataclass, field  
from typing import List, Dict, Optional  
 
NUM_NODES = 30  
CONNECTION_RADIUS = 0.25  
NUM_AGENTS = 5  
STARTING_BALANCE = 1000  
FUEL_PRICE = 2.0  
PAYOUT_MULTIPLIER = 5.0  
BATTERY_CAPACITY = 100  
CRITICAL_BATTERY = 25  
 
@dataclass  
class Order:  
    id: str  
    target_node: int  
    weight_kg: int  
    payout: float  
    status: str = "pending"  

Мы настраиваем все основные блоки симуляции, включая глобальные параметры и базовые структуры данных.

Определение класса AgenticTruck

Далее мы определяем класс AgenticTruck, чтобы инициализировать ключевые атрибуты агента.

class AgenticTruck:
    def __init__(self, agent_id, start_node, graph, capacity=100):
        self.id = agent_id
        self.current_node = start_node
        self.graph = graph
        self.battery = BATTERY_CAPACITY
        self.balance = STARTING_BALANCE
        self.capacity = capacity
        self.state = "IDLE"
        self.path: List[int] = []
        self.current_order: Optional[Order] = None
        self.target_node: int = start_node

Эта настройка закладывает основу для эволюции поведения агентов.

Продвинутая логика принятия решений

Чтобы сделать наших агентов более умными, мы реализуем логику принятия решений для оценки заказов, вычисления путей и управления зарядкой. Это обеспечивает экономически целесообразные выборы агентами.

def calculate_bid(self, order):
    if order.weight_kg > self.capacity:
        return float('inf')
    if self.state != "IDLE" or self.battery < CRITICAL_BATTERY:
        return float('inf')
    dist_to_target, _ = self.get_path_cost(self.current_node, order.target_node)
    fuel_cost = dist_to_target * FUEL_PRICE
    expected_profit = order.payout - fuel_cost
    if expected_profit < 10:
        return float('inf')
    return dist_to_target

Каждый грузовик вычисляет, может ли он выполнить задание в зависимости от своих текущих условий.

Цикл выполнения симуляции

class Simulation:
    def __init__(self):
        self.setup_graph()
        self.setup_agents()
        self.orders = []
        self.order_count = 0

Мы создаем смоделированный мир, генерируем графовую городскую структуру и позволяяем агентам конкурировать за задания. Здесь возникают проявления поведения, когда агенты динамически взаимодействуют.

Визуализация результатов

def visualize(self, step_num):
    clear_output(wait=True)
    plt.figure(figsize=(10, 8))
    pos = nx.get_node_attributes(self.G, 'pos')
    node_colors = [self.G.nodes[n]['color'] for n in self.G.nodes()]
    nx.draw(self.G, pos, node_color=node_colors, with_labels=True)

Мы визуализируем движение агентов, заказы и сеть в реальном времени.

Наблюдения

Запуская симуляцию, мы видим, как агенты ведут переговоры о работе, борются за заказы и эффективно управляют ресурсами, такими как батарея и топливо. Каждая компонента, от генерации графов до маршрутизации, вносит вклад в функционирование логистической системы.

Узнать больше

Посмотрите ПОЛНЫЕ КОДЫ здесь для полного реализации и присоединяйтесь к нашему сообществу для получения новых идей о логистике и ИИ.

🇬🇧

Switch Language

Read this article in English

Switch to English