示例#1
0
import Data, InitPeolple, DrawFirst, Rule, Income
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
import time

init = InitPeolple.InitPeople()
draw = DrawFirst.draw()
# move=Rule.PeopleMove()
income = Income.outDirection()
# allPeople=init.creatPeople()
allPeople = init.creatAppointPeo()
allWall = init.creatWall()
allExit = init.creatExit()
# while Data.flag:

# for p in allPeople:
#     income.outDirection(p,allPeople)
#     direction=max(p.allInComeBySort.items(),key=lambda  x:x[1])[0]
#     print('direction ==',direction)
while Data.flag:
    for p in allPeople:
        income.outDirection(p, allPeople)

        direction = max(p.allInComeBySort.items(), key=lambda x: x[1])[0]

        Rule.chickOverAround(p, allPeople)
        Rule.PeopleMove(p, direction)
        # print(p.grendIncome)
        # print(p.isInGrend)
        print(p.allInComeBySort)
示例#2
0
def run_f(case_s, P, R, steps):
    resultData = []  #返回总列表
    if case_s == 0:  #危险源位置设置
        Data.FX_N = 19
    elif case_s == 1:
        Data.FX_N = 15
    elif case_s == 2:
        Data.FX_N = 10
    elif case_s == 3:
        Data.FX_N = 5
    elif case_s == 4:
        Data.FX_N = 2
    Data.PEOPLE_DENSYTY = P  #行人密度
    Data.PEOPLE_NUMBER = int(Data.ROOM_N * Data.ROOM_M *
                             Data.PEOPLE_DENSYTY)  #行人数量
    Data.FX_SIGMA_2 = R  #危险源大小
    Data.FX_R = 2 * np.sqrt(Data.FX_SIGMA_2)  # 影响范围半径
    Data.FX_P = 2 * Data.FX_SIGMA_2  # 系数 p越大 高斯函数的圆形越大

    init = InitPeolple.InitPeople()  #实例化 产生行人类
    # draw = DrawFirst.draw()#实例化 画图类
    # income = Income.outDirection()
    allPeople = init.creatPeople()  #产生随机行人
    # allPeople=init.creatAppointPeo()#产生指定行人
    allWall = init.creatWall()  #创建墙壁
    allExit = init.creatExit()  #创建出口

    T = []  #疏散时间
    S = []  #剩余行人
    V = []  #行人速度
    Q = []  #出口流量
    Q.append(0)  #将出口流量[0]设为0 Q列表少一个数

    evac_time = 0  #疏散时间

    while Data.flag:  #循环开始
        move_on_num = 0  #本次时间步移动的行人
        move_off_num = 0  #本次时间步静止的行人
        vector = 0  #本次时间步行人速度
        for p in allPeople:  #遍历行人
            Income.outDirection(p, allPeople)  #计算收益
            direction = max(p.allInComeBySort.items(),
                            key=lambda x: x[1])[0]  #获取方向
            if direction == 5:  #如果行人静止
                move_off_num = move_off_num + 1  #计数器+1
            else:
                move_on_num = move_on_num + 1  #计数器+1
            Rule.chickOverAround(p, allPeople)  #检测是否到达出口
            Rule.PeopleMove(p, direction)  #行人移动

        # draw.drawPeople(allPeople)#绘制行人
        # print(evac_time,"---",len(allPeople),"---",move_on_num/len(allPeople))

        if len(allPeople) == 0:  #如果行人全部疏散完毕
            vector = 1  #速度设为1
            Data.flag = False  #循环标志--停止
        else:
            vector = move_on_num / len(allPeople)  #行人速度=移动的行人/总行人
        if vector > 1:  #如果行人速度>1
            vector = 1.0  #设置为1

        T.append(evac_time)  #将疏散时间添加到T
        S.append(len(allPeople))  #将剩余行人添加到S
        V.append(vector)  #将行人速度添加到V

        evac_time = evac_time + 1  #疏散时间+1

    for i in range(len(S) - 1):  #遍历行人
        quar = S[i] - S[i + 1]  #出口流量=上一步的行人总数-下一步的行人总数
        Q.append(quar)  #将出口流量添加到Q
    '''将各种参数添加到返回列表'''
    resultData.append(case_s)
    resultData.append(P)
    resultData.append(R)
    resultData.append(steps)
    resultData.append(T)
    resultData.append(S)
    resultData.append(V)
    resultData.append(Q)

    return resultData