import matplotlib.pyplot as plt
from point import Point
import matplotlib.animation as animation
import random
from funcs import *
import numpy as np
import time
import matplotlib.pyplot as plt
fig = plt.figure()
#data = np.arange(100).reshape(10, 10)
random.seed(a=10000)
# initial
Lcar=9
Wcar=5
Vmax=20
B=8
Wb=9
WB=Wb*B
L =3
Wl = 7
WL=Wl*L
Lr=100
Ld=600
sizeW=WB
sizeL=Lr+Ld
grad=((WB-WL)/Ld)
blockPoints= init_map_points(Lr,Ld,WB,WL)
step = 0
pin = 0.4
pd = 0.1
pv=0.3
q=0
points=[]
carList=[]
initBlockMap=initialBlockMap(blockPoints,sizeW,sizeL,Lcar,Wcar)
map = convertPointToPattern(blockPoints,sizeL,sizeW);
cmap = plt.cm.gray
norm = plt.Normalize(0,256)
rgba = cmap(norm(map))
def compare(p):
return -p.X
def fushu(x):
return -x
def computeNext():
global carList, map, step, p1, pd, q
map = convertPointToPattern(blockPoints, sizeL, sizeW);
carList.sort(key = compare)
blockMap=initialBlockMap(blockPoints,sizeW,sizeL,Lcar,Wcar)
removeList=[]
for i in range(len(carList)):
car=carList[i]
#print(car.X,car.Y,car.V)
x=car.X
y=car.Y
v2=car.V
for dn in range(Vmax):
if (judgeInMap(x+dn+1,y,sizeL,sizeW)):
#print(x+dn+1,y)
if (blockMap[x+dn+1][y]):
break
else:
break
#speed update
#print(dn)
if(random.random()<pv):
v2=max(v2-1,0)
v2=min(v2,dn)
else:
v2=min(v2+1,Vmax,dn)
#position update
if (x+v2+1>=sizeL):
removeList.append(i)
q=q+1
else:
if (y>WL*0.7):
x = x + v2
dy=round(v2*(WB-WL/2)/(Ld+Lr)+(random.random()-0.5))
if (v2==0): dy=(int)((WB-WL/2)/(Ld+Lr))+1
if (v2<dy) :x=x+dy-v2
v2=max(dy,v2)
if (y>dy):
if (x+v2-dy<sizeL):
if (not blockMap[x+v2-dy][y-dy]):
y=y-dy
x=x-dy
else:
x=x+v2
if (random.random()<pd):
if (y>0):
if (not blockMap[x][y-1]):
y=y-1
p=Point(x,y)
p.V=v2
carList[i]=p
blockMap=addBlock(blockMap, p, Lcar, Wcar)
removeList.sort(key=fushu)
#print('len of carList',len(carList))
for i in removeList:
del carList[i]
for i in range(B):
if (random.random()<pin):
x=0
y=i*Wb+int(Wb/2)+1
if (not blockMap[x][y]):
carList.append(Point(x, y))
return
def updatefig(*args):
global carList,map,step,p1,pd,q
print(step)
if (step==150)or(step==225)or(step==247)or(step==250):
plt.savefig('D:\_'+str(step)+'.png')
for i in range(1):computeNext()
step=step+1
im.set_array(computeMap(carList,map,Lcar,Wcar))
im = plt.imshow(computeMap(carList,map,Lcar,Wcar), cmap = plt.cm.gray,animated=True)
ani = animation.FuncAnimation(fig, updatefig, interval=10)
plt.show()
localPath=cur_file_dir()
print(localPath)
totalStep=3600;
t=np.arange(totalStep)
q_t=np.arange(totalStep)
midu_gap=30
midu=np.linspace(0, 1, midu_gap, endpoint=True)
q_midu=np.linspace(0, 1, midu_gap, endpoint=True)
for i in range(midu_gap):
pin=midu[i];
print(pin)
carList=[]
q=0
percent1=i/midu_gap*100
for step in range(totalStep):
if (step%36==0) :print((percent1+step/3600/midu_gap*100),'%')
if (step==600):
q_midu[i]=q
computeNext()
q_midu[i]=(q-q_midu[i])*6/5
plt.plot(midu,q_midu)
plt.show()
没有合适的资源?快使用搜索试试~ 我知道了~
基于元胞自动机模拟交通道路附Python代码.zip
共12个文件
pyc:4个
py:4个
xml:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 200 浏览量
2023-11-11
09:29:35
上传
评论 1
收藏 17KB ZIP 举报
温馨提示
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 5.作者介绍:某大厂资深算法工程师,从事Matlab算法仿真工作10年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
资源推荐
资源详情
资源评论
收起资源包目录
基于元胞自动机模拟交通道路附Python代码.zip (12个子文件)
基于元胞自动机模拟交通道路附Python代码
funcs.pyc 3KB
cellular
main.py 4KB
point.pyc 2KB
funcs.py 2KB
.idea
workspace.xml 37KB
misc.xml 700B
modules.xml 268B
cellular.iml 533B
animition_exm.py 545B
point.py 707B
__pycache__
point.cpython-35.pyc 1KB
funcs.cpython-35.pyc 3KB
共 12 条
- 1
资源评论
Matlab科研辅导帮
- 粉丝: 2w+
- 资源: 7666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功