Найти в Дзене
SkyNet | Новости ИИ

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

аукционами и визуализацией в реальном времени на основе графов В этом руководстве мы создаём продвинутую, полностью автономную логистическую симуляцию, в которой несколько умных грузовиков-доставщиков работают в динамической дорожной сети города. Мы проектируем систему так, чтобы каждый грузовик вёл себя как агент, способный делать ставки на заказы на доставку, планировать оптимальные маршруты, управлять уровнем заряда батареи, искать зарядные станции и максимизировать прибыль за счёт принятия решений, основанных на собственных интересах. Основные блоки построения симуляции Мы устанавливаем все основные блоки симуляции, включая импорты, глобальные параметры и базовые структуры данных. Мы также определяем класс AgenticTruck и инициализируем ключевые атрибуты, включая положение, заряд батареи, баланс и рабочее состояние. Мы закладываем основу для развития поведения агентов. Импорт библиотек и инициализация параметров: ```python import networkx as nx import matplotlib.pyplot as plt i

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

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

Основные блоки построения симуляции

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

Импорт библиотек и инициализация параметров:

```python

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

```

Определение класса `Order`:

```python

@dataclass

class Order:

id: str

target_node: int

weight_kg: int

payout: float

status: str = "pending"

```

Класс `AgenticTruck`:

```python

class AgenticTruck:

def init(self, agentid, startnode, graph, capacity=100):

self.id = agent_id

self.currentnode = startnode

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.targetnode: int = startnode

```

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

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

Методы класса `AgenticTruck`:

```python

def getpathcost(self, start, end):

try:

length = nx.shortestpathlength(self.graph, start, end, weight='weight')

path = nx.shortest_path(self.graph, start, end, weight='weight')

return length, path

except nx.NetworkXNoPath:

return float('inf'), []

def findnearestcharger(self):

chargers = [n for n, attr in self.graph.nodes(data=True) if attr.get('type') == 'charger']

best_charger = None

min_dist = float('inf')

best_path = []

for charger in chargers:

dist, path = self.getpathcost(self.current_node, charger)

if dist charger, bestpath

def calculate_bid(self, order):

if order.weight_kg > self.capacity:

return float('inf')

if self.state != "...

Читать далее