Создание автономной системы логистики с многими агентами
Глубокое погружение в создание симуляции логистики с автономными грузовиками.
Концепция автономной логистики
В этом руководстве мы создаем современную автономную симуляцию логистики, в которой несколько умных грузовиков работают в динамичной городской сети дорог. Каждый грузовик действует как агент, способный делать ставки на заказы на доставку, планировать оптимальные маршруты, управлять уровнем заряда батареи и максимизировать прибыль через собственные решения.
Построение симуляции
В каждом фрагменте кода мы исследуем, как агентные поведения возникают из простых правил, как конкуренция формирует выделение заказов и как основанный на графе мир позволяет реализовать реалистичное движение и маршрутизацию.
Настройка окружения
Для начала симуляции:
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