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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)
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
头朝右
头朝下
头朝左
23/59
第7讲 仿真模型与Matlab实现 当前位置为白格
头朝上
头朝右
头朝下
头朝左
24/59
第7讲 仿真模型与Matlab实现
例3:森林火灾模拟
元胞空间采用2维正方形网格自动机,元胞包括三 种状态:正在生长的树(绿色),正在燃烧的树(红色) 和空状态(黑色)。初始状态由这三种情况随机填充, 邻域取Moore型。每一步按下述规则更新状态: (1)正在燃烧的树变为空状态; (2)如果正在生长的树格位最近的邻居中有不少于一棵 树正在燃烧,则它将变为燃烧状态; (3)如果是空状态格位,则其以概率p生长出树; (4)考虑到闪电的作用,在最近邻居中没有正在燃烧的 树(周围全是树且没有燃烧)的情况下,生长树在每个 时间步以概率 f 变成燃烧的树。
32/59
第7讲 仿真模型与Matlab实现
33/59
第7讲 仿真模型与Matlab实现 在这个模型基础上还可以加上红绿灯机制,如在 路的最后设置红绿灯,给定红绿灯时间,只需在红灯 时间内让道路口位置恒为1,在绿灯时间内让道路口位 置恒为0即可。 红灯60个单位时间,绿灯120个单位时间
34/59
36/59
第7讲 仿真模型与Matlab实现 红绿灯规则实现 记录更新的道路状态
阻塞道路末端 打开道路末端
37/59
第7讲 仿真模型与Matlab实现
随机交通事故处理
以0.5%的概率 产生随机事故
பைடு நூலகம்
38/59
第7讲 仿真模型与Matlab实现
车辆移动仿真
从道路末端到起点 车辆移动方程
事故点附近处理
S(S>0.5) = 1;
Sk=zeros(102); Sk(2:N+1,2:N+1) = S;
27/59
第7讲 仿真模型与Matlab实现
28/59
第7讲 仿真模型与Matlab实现
29/59
第7讲 仿真模型与Matlab实现
例4:基于元胞自动机的交通流模拟
将道路离散化为一维网格,车辆为元胞,匀速行驶, 其在一维网格上的移动看成一维网格的状态变化,邻域 取前后各一个位置,即邻域半径 r=1,初始状态为道路入 口处有一辆车,随着时间的进行,道路入口处按均匀分 布随机产生一辆车作为道路的输入(产生概率决定了车 流密度),车辆在道路上的移动可使用元胞自动机模拟。 将某一个位置的车固定不移动,还可模拟红绿灯和 交通堵塞等情况,如将道路最后一个位置车辆不移动或 固定时长移动,则可模拟红绿灯;将道路中某一个位置 车辆不移动一定时长可模拟偶然交通事故。
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; %随机事故的阻塞时间
45/59
第7讲 仿真模型与Matlab实现
仿真场景4:
设在道路口处按均匀分布以60%的概率产生车辆, 假设随机慢化概率40%,最大速度为2,则仿真结果显示:
43/59
第7讲 仿真模型与Matlab实现
仿真场景2:
设在道路口处按均匀分布以40%的概率产生车辆, 假设随机慢化概率很低,不超过5%,最大速度为5,则 仿真结果显示:
44/59
第7讲 仿真模型与Matlab实现
仿真场景3:
设在道路口处按均匀分布以80%的概率产生车辆, 假设随机慢化概率40%,最大速度为4,则仿真结果显示:
14/59
第7讲 仿真模型与Matlab实现
(3)元胞自动机的状态改变规则在程序中如何体现?
换一种写法:
程序效率 差异显著
15/59
第7讲 仿真模型与Matlab实现
(4)动画如何生成?
初始化:
每次更新: (5)初始状态如何给定?
直接赋值,如
16/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 min(vn 1, vmax )
(2)减速:当前后车距过近,用当前速度前进会碰撞 时司机进行减速,新的速度为
vn min(vn , d n )
dn为前后车距。
41/59
第7讲 仿真模型与Matlab实现 (3)随机慢化:由于各种不确定因素(如路况,司机 分心等)造成车辆减速,以概率p进行随机慢化,新的 速度为
31/59
第7讲 仿真模型与Matlab实现 移动规则可表示成:
S t 1 (i) S t (i 1) 1 S t (i) S t (i) S t (i 1)
上述这条规则隐藏了一个潜在的前提(假设): 前进中的车辆应该有车距(一个车位),即若完全紧 挨在一起的车辆在行进中要隔开一个车位。
程序实现
几个核心问题:
(1)棋盘状态如何表示? (2)邻域活细胞总数如何统计? (3)元胞自动机的状态改变规则在程序中如何体现? (4)动画如何生成? (5)初始状态如何给定?
13/59
第7讲 仿真模型与Matlab实现
(1)棋盘状态如何表示?
用一个0-1矩阵表示元胞自动机的棋盘,即:
(2)邻域活细胞总数如何统计?
17/59
第7讲 仿真模型与Matlab实现
例2:Langton's ant
兰顿蚂蚁是元胞自动机另外一个 经典的案例。其通过简单两条规则模 拟蚂蚁的行为规律。
蚂蚁在方形网格上运动,网格分为 黑色和白色两种,蚂蚁在网格上头可朝 向上、下、左、右四个方向,头朝向哪 个方向,下一步运动就向该方向,并且 不改变头的方向,运动遵循两条规则:
(1)若蚂蚁位于黑色网格,则头向右转90度,前进一 步,并将原网格变成白色; (2)若蚂蚁位于白色网格,则头向左转90度,前进一 步,并将原网格变成黑色;
18/59
第7讲 仿真模型与Matlab实现
通过模拟可以发现,蚂蚁表现出了相当复杂的行为。 初始状态为一只小蚂蚁位于网格中间,且头朝上。随着 蚂蚁的行走演变,系统行为表现为三个阶段:
vn max(vn 1, 0)
(4)移动:车辆按照调整后速度向前移动
xn xn vn
这个模型称为NaSch(Nagel和Schreckenberg提出)模 型。
42/59
第7讲 仿真模型与Matlab实现
仿真场景1:
设在道路口处按均匀分布以40%的概率产生车辆, 假设随机慢化概率很低,不超过5%,最大速度为2,则 仿真结果显示:
数学建模课程综合设计
王 丹
理学院数学与系统科学系
2016年夏季
第7讲 仿真模型与Matlab实现 例1:生命游戏
生命游戏(game of life)是由 剑桥大学的数学家John Horton Conway在1970年提出来的。
1) 元胞分布在规则划分的二维网格上;
2) 元胞具有0,1两种状态,0代表“死”,1代表“生”;
if Sit 0, then Sit 1
规则的不断演化所形成的规律性与初始状态有关, 不同的初始状态可能导致不同的演化结果。
3/59
第7讲 仿真模型与Matlab实现
生命游戏的一些演化过程和形态演示
(1)完全生成初始状态
(2)脉冲星(Explore)
(3)滑翔机(Glider) (4)小脉冲星(Small Explore) (5)10元胞行(10 Cells row) (6)轻型飞船(Lightweight Spaceship) (7)图姆勒(Tumler) (8)滑翔机发射器(Gosper Glider Gun )
posx = 100; posy = 100; %蚂蚁当前位置 direct = 1; %1,2,3,4代表从上开始顺时针四个方向
21/59
第7讲 仿真模型与Matlab实现 棋盘大小 全为白色棋盘 设定图像显示
蚂蚁初始位置 和方向
22/59
第7讲 仿真模型与Matlab实现 当前位置为黑格
头朝上
30/59
第7讲 仿真模型与Matlab实现 移动规则:
(1)在当前时间,某一个位置若有车,则下一个时间该 位置有无车取决于前后位置是否有车; (2)若当前位置有车,下一个位置没有车,则当前位置 下一个时刻有无车取决于上一个位置是否有车,如上一 个位置有车,则下一个时刻当前位置有车,否则无车, 若下一个位置有车,则还决定于下一个时刻此车是否会 前进,若前进,则当前位置下一个时刻有无车又由上一 个位置有无车决定,否则当前位置有车; (3)若当前时刻无车,则下一个时刻有无车取决于上一 个位置是否有车,若有车,则当前位置下一个时刻有车, 否则无车。
39/59
第7讲 仿真模型与Matlab实现
道路口进入车辆
以0.4的概率按均匀分布在道路起点处产生1 辆车,更符合实际的是应该按照泊松分布或指数 分布产生车辆,如:
40/59
第7讲 仿真模型与Matlab实现 进一步考虑车辆加减速,设每辆汽车(元胞)有一 个行驶速度,速度最小值为0,最大值为vmax,在当前时 刻到下一时刻演化中,汽车遵循以下原则: (1)加速:现实中司机总是期望以最大速度行驶,所 以在每一步当可以加速时(前后车辆距离大于当前车速), 司机进行加速,新的速度为
25/59
第7讲 仿真模型与Matlab实现
26/59
第7讲 仿真模型与Matlab实现
程序实现
核心变量:
规则(1)—规则(4)的实现!
用一个二维数组表示棋盘的状态,假设棋盘大小为100*100,初始 根据概率随机确定是否有树。 棋盘:S=rand(100); %随机生成[0,1]间的棋盘矩阵 S(S<=0.5) = 0;
19/59
第7讲 仿真模型与Matlab实现
20/59
第7讲 仿真模型与Matlab实现
程序实现
核心变量:
(1)棋盘的状态改变
(2)蚂蚁的当前位置和头的朝向
用一个二维数组表示棋盘的状态,假设棋盘大小为200*200,蚂蚁 位于棋盘中心(100,100)位置,初始蚂蚁头朝上。
棋盘:cells(1:200,1:200) = 1; %白色棋盘
第7讲 仿真模型与Matlab实现 增加偶然交通事故。在每个时刻,产生服从均匀分 布的随机数,若随机数大于0.5%则发生一次交通事故, 在有车的位置随机产生一个交通事故点,堵塞交通固定 时间,如60个时间单位。具体实现上让这个位置在堵塞 时间内恒为1即可。
35/59
第7讲 仿真模型与Matlab实现 系统参数设置:
3) 元胞以相邻的8个元胞为邻居; 4) 一个元胞的生死由其在该时刻本身的生死状态和周围 八个邻居的状态决定。
1/59
第7讲 仿真模型与Matlab实现
生命游戏的规则:

生存:对一个活的元胞,如果它的邻居中有两 个或三个元胞是活的,那么该元胞将继续生存 下去。 死亡: 对一个活的元胞 (a)如果它的邻居中有 四个或四个以上的元胞是活的,那么该元胞将 死去;(b)如果它的邻居中只有一个或没有活 的元胞,那么该元胞也将死去。 繁殖: 对一个死的元胞,如果它的邻居中有3 个(不能多也不能少)活的,那么该元胞将成 为一个活的元胞。
相关文档
最新文档