当前位置:文档之家› 第7讲:仿真模型的matlab实现

第7讲:仿真模型的matlab实现


头朝右
头朝下
头朝左
23/59
第7讲 仿真模型与Matlab实现 当前位置为白格
头朝上
头朝右
头朝下
头朝左
24/59
第7讲 仿真模型与Matlab实现
例3:森林火灾模拟
元胞空间采用2维正方形网格自动机,元胞包括三 种状态:正在生长的树(绿色),正在燃烧的树(红色) 和空状态(黑色)。初始状态由这三种情况随机填充, 邻域取Moore型。每一步按下述规则更新状态: (1)正在燃烧的树变为空状态; (2)如果正在生长的树格位最近的邻居中有不少于一棵 树正在燃烧,则它将变为燃烧状态; (3)如果是空状态格位,则其以概率p生长出树; (4)考虑到闪电的作用,在最近邻居中没有正在燃烧的 树(周围全是树且没有燃烧)的情况下,生长树在每个 时间步以概率 f 变成燃烧的树。
(1)若蚂蚁位于黑色网格,则头向右转90度,前进一 步,并将原网格变成白色; (2)若蚂蚁位于白色网格,则头向左转90度,前进一 步,并将原网格变成黑色;
18/59
第7讲 仿真模型与Matlab实现
通过模拟可以发现,蚂蚁表现出了相当复杂的行为。 初始状态为一只小蚂蚁位于网格中间,且头朝上。随着 蚂蚁的行走演变,系统行为表现为三个阶段:
2/59

第7讲 仿真模型与Matlab实现
生命游戏的规则(数学形式):
t 1, if S N 2 or 3 t t 0, if S 2 or S N N 3
t 1, if S N 3 t 0, if S N 3
if Sit 1, then Sit 1
43/59
第7讲 仿真模型与Matlab实现
仿真场景2:
设在道路口处按均匀分布以40%的概率产生车辆, 假设随机慢化概率很低,不超过5%,最大速度为5,则 仿真结果显示:
44/59
第7讲 仿真模型与Matlab实现
仿真场景3:
设在道路口处按均匀分布以80%的概率产生车辆, 假设随机慢化概率40%,最大速度为4,则仿真结果显示:
程序实现
几个核心问题:
(1)棋盘状态如何表示? (2)邻域活细胞总数如何统计? (3)元胞自动机的状态改变规则在程序中如何体现? (4)动画如何生成? (5)初始状态如何给定?
13/59
第7讲 仿真模型与Matlab实现
(1)棋盘状态如何表示?
用一个0-1矩阵表示元胞自动机的棋盘,即:
(2)邻域活细胞总数如何统计?
数学建模课程综合设计
王 丹
理学院数学与系统科学系
2016年夏季
第7讲 仿真模型与Matlab实现 例1:生命游戏
生命游戏(game of life)是由 剑桥大学的数学家John Horton Conway在1970年提出来的。
1) 元胞分布在规则划分的二维网格上;
2) 元胞具有0,1两种状态,0代表“死”,1代表“生”;
17/59
第7讲 仿真模型与Matlab实现
例2:Langton's ant
兰顿蚂蚁是元胞自动机另外一个 经典的案例。其通过简单两条规则模 拟蚂蚁的行为规律。
蚂蚁在方形网格上运动,网格分为 黑色和白色两种,蚂蚁在网格上头可朝 向上、下、左、右四个方向,头朝向哪 个方向,下一步运动就向该方向,并且 不改变头的方向,运动遵循两条规则:
25/59
第7讲 仿真模型与Matlab实现
26/59
第7讲 仿真模型与Matlab实现
程序实现
核心变量:
规则(1)—规则(4)的实现!
用一个二维数组表示棋盘的状态,假设棋盘大小为100*100,初始 根据概率随机确定是否有树。 棋盘:S=rand(100); %随机生成[0,1]间的棋盘矩阵 S(S<=0.5) = 0;
36/59
第7讲 仿真模型与Matlab实现 红绿灯规则实现 记录更新的道路状态
阻塞道路末端 打开道路末端
37/59
第7讲 仿真模型与Matlab实现
随机交通事故处理
以0.5%的概率 产生随机事故
38/59
第7讲 仿真模型与Matlab实现
车辆移动仿真
从道路末端到起点 车辆移动方程
事故点附近处理
9/59
第7讲 仿真模型与Matlab实现 图姆勒(Tumler)
10/59
第7讲 仿真模型与Matlab实现 滑翔机发射器(Gosper Glider Gun )
11/59
第7讲 仿真模型与Matlab实现 滑翔机发射器(Gosper Glider Gun )
12/59
第7讲 仿真模型与Matlab实现
vn max(vn 1, 0)
(4)移动:车辆按照调整后速度向前移动
xn xn vn
这个模型称为NaSch(Nagel和Schreckenberg提出)模 型。
42/59
第7讲 仿真模型与Matlab实现
仿真场景1:
设在道路口处按均匀分布以40%的概率产生车辆, 假设随机慢化概率很低,不超过5%,最大速度为2,则 仿真结果显示:
4/59
第7讲 仿真模型与Matlab实现 完全生成初始状态
5/59
第7讲 仿真模型与Matlab实现 脉冲星(Explore)
6/59
第7讲 仿真模型与Matlab实现 滑翔机(Glider)
7/59
第7讲 仿真模型与Matlab实现 10元胞行(10 Cells row)
8/59
第7讲 仿真模型与Matlab实现 轻型飞船(Lightweight Spaceship)
19/59
第7讲 仿真模型与Matlab实现
20/59
第7讲 仿真模型与Matlab实现
程序实现
核心变量:
(1)棋盘的状态改变
(2)蚂蚁的当前位置和头的朝向
用一个二维数组表示棋盘的状态,假设棋盘大小为200*200,蚂蚁 位于棋盘中心(100,100)位置,初始蚂蚁头朝上。
棋盘:cells(1:200,1:200) = 1; %白色棋盘
32/59
第7讲 仿真模型与Matlab实现
33/59
第7讲 仿真模型与Matlab实现 在这个模型基础上还可以加上红绿灯机制,如在 路的最后设置红绿灯,给定红绿灯时间,只需在红灯 时间内让道路口位置恒为1,在绿灯时间内让道路口位 置恒为0即可。 红灯60个单位时间,绿灯120个单位时间
34/59
S=100; %道路长度 First(1:s+1) = 0; %一维数组表示道路 Passtime = 120; %绿灯时间 Stoptime = 60; %红灯时间
程序实现
Ispass=1, curpass=0, curstop =0; %记录当前车辆已通过或停止的 时间
Accident = 0; %路面是否发生随机事故 Acpoint = -1; %发生随机事故的位置 Actime = 60; curactime = -1; %随机事故的阻塞时间
第7讲 仿真模型与Matlab实现 增加偶然交通事故。在每个时刻,产生服从均匀分 布的随机数,若随机数大于0.5%则发生一次交通事故, 在有车的位置随机产生一个交通事故点,堵塞交通固定 时间,如60个时间单位。具体实现上让这个位置在堵塞 时间内恒为1即可。
35/59
第7讲 仿真模型与Matlab实现 系统参数设置:
39/59
第7讲 仿真模型与Matlab实现
道路口进入车辆
以0.4的概率按均匀分布在道路起点处产生1 辆车,更符合实际的是应该按照泊松分布或指数 分布产生车辆b实现 进一步考虑车辆加减速,设每辆汽车(元胞)有一 个行驶速度,速度最小值为0,最大值为vmax,在当前时 刻到下一时刻演化中,汽车遵循以下原则: (1)加速:现实中司机总是期望以最大速度行驶,所 以在每一步当可以加速时(前后车辆距离大于当前车速), 司机进行加速,新的速度为
45/59
第7讲 仿真模型与Matlab实现
仿真场景4:
设在道路口处按均匀分布以60%的概率产生车辆, 假设随机慢化概率40%,最大速度为2,则仿真结果显示:
posx = 100; posy = 100; %蚂蚁当前位置 direct = 1; %1,2,3,4代表从上开始顺时针四个方向
21/59
第7讲 仿真模型与Matlab实现 棋盘大小 全为白色棋盘 设定图像显示
蚂蚁初始位置 和方向
22/59
第7讲 仿真模型与Matlab实现 当前位置为黑格
头朝上
3) 元胞以相邻的8个元胞为邻居; 4) 一个元胞的生死由其在该时刻本身的生死状态和周围 八个邻居的状态决定。
1/59
第7讲 仿真模型与Matlab实现
生命游戏的规则:

生存:对一个活的元胞,如果它的邻居中有两 个或三个元胞是活的,那么该元胞将继续生存 下去。 死亡: 对一个活的元胞 (a)如果它的邻居中有 四个或四个以上的元胞是活的,那么该元胞将 死去;(b)如果它的邻居中只有一个或没有活 的元胞,那么该元胞也将死去。 繁殖: 对一个死的元胞,如果它的邻居中有3 个(不能多也不能少)活的,那么该元胞将成 为一个活的元胞。
vn min(vn 1, vmax )
(2)减速:当前后车距过近,用当前速度前进会碰撞 时司机进行减速,新的速度为
vn min(vn , d n )
dn为前后车距。
41/59
第7讲 仿真模型与Matlab实现 (3)随机慢化:由于各种不确定因素(如路况,司机 分心等)造成车辆减速,以概率p进行随机慢化,新的 速度为
if Sit 0, then Sit 1
规则的不断演化所形成的规律性与初始状态有关, 不同的初始状态可能导致不同的演化结果。
3/59
第7讲 仿真模型与Matlab实现
相关主题