2023-09-03

This article is categorized as "Garbage" . It should NEVER be appeared in your search engine's results.

从零开始了解agent-based simulator


有关交通的simulator

上一篇:🔗 [2023-08-30 - Truxton's blog] https://truxton2blog.com/2023-08-30/  看了一眼repast,但发现难度有点大,所以先学一学自己写一个简单的

因为发现repast的上手难度挺高,有的时候(对于简单的任务)可能还不如手写来得快,因为手写的代码全程都是自己的,自己能看懂,自己能调优。

所以本文从这里开始


(总结上一周学过的内容)

用OOP的思路去解释simulator,example:

程序会创建一个抽象的地图(以简单的无向图为例),这个地图是静态不变的;

程序会设计一个class Agent:里面包含了一个agent的属性,比如它的随机速度,它的随机刷新点,它的随机目标,它的一些其他属性

class Agent:
    type    # passanger, taxi, bus, etc
    speed 
    spawn_position
    destination

然后模拟器开始运行:

t=0,生成1000个class Agent的实例,这1000个Agents一出生就开始按自己的属性运动

class Agent:
    # properties of an abstract Agent

agent_lst = []
for i in range(0, 1000):
    agent_lst.append(Agent())

t=1,更新1000个Agent实例的状态(运动到了哪里,速度是多少)

t=2,继续更新1000个Agent实例的状态(运动到了哪里,速度是多少)

......

同时,一个上帝视角的观察者会观察:1. 整个地图的状态(比如拥堵状况) 2. 1000个Agent实例的状态(比如:有多少个实体处于活跃状态)

这就是整个模拟器要做的事。诸如红绿灯、stop sign这些东西也是可以一点一点加进来的,但目前只需要考虑一个简单的就可以。

然后就是有关模拟器的优化,目前大量的计算量主要来源于:

  1. 很多时候会一次性生成几万个Agent实例,每次更新时间t -> t+1的时候都要遍历这几万个Agent实例的状态属性
  2. 即使是同一份代码也要多跑很多遍才能稳定一些统计数据,因为有很多随机因素
  3. 接上面,可改/可尝试/可优化的参数太多,只要改一个参数就要重跑整个模型,而且目前看来很多思路就像炼丹,参数一多就更不好改了(这里优化了那里又掉性能了)


 Last Modified in 2025-08-15 

Leave a Comment Anonymous comment is allowed / 允许匿名评论