示例#1
0
def run_view():
    '''此方法为单步运行测试方法,带图像显示'''
    time_logo=0

    Data.FX_R = 8
    Data.FX_P = math.pow(Data.FX_R, 2) / 2

    Data.FX_S_V = 0
    Data.FX_S_R = 15


    # allPeople = InitPeolple.creatPeople()  # 产生随机行人
    # allPeople=InitPeolple.creatPeople_force_normal()
    allPeople=InitPeolple.creatPeople_force_fix()
    # allPeople=InitPeolple.creatPeople_force_random()
    # allPeople=InitPeolple.creatAppointPeo()#产生指定行人
    # allPeople=InitPeolple.creatAreaPeople()
    # print(len(allPeople))
    # allWall = InitPeolple.creatWall()  # 创建墙壁
    # allExit = InitPeolple.creatExit()  # 创建出口
    DrawFirst.drawPeople(allPeople)
    # time.sleep(100)
    result_time=[]
    result_rote=[]
    result_all=[]
    while Data.flag:#循环开始
        if Data.FX_S_R<21:
            count_R_O_V()
        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)#行人移动


        a_p=0
        b_p = 0
        for p in allPeople:
            if Data.FX_R**2<((p.x-Data.FX_M)**2 +(p.x-Data.FX_M)**2)<Data.FX_S_R**2:
                a_p=a_p+1
                if p.isInGrend==2:
                    b_p=b_p+1
        result_time.append(time_logo)
        if a_p==0:
            result_rote.append(0)
        else:
            result_rote.append(b_p/a_p)
        DrawFirst.drawPeople(allPeople)
        time_logo = time_logo + 1
        # print(time_logo,"\033[4;32;40mxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\033[0m")
        # if time_logo==15:
        #     Data.flag=False
        print(time_logo)
    result_all.append(result_time)
    result_all.append(result_rote)
    print(result_all)
示例#2
0
def run_insert(case_s, density, radius, radius_ob, radius_v, force, force_type,
               peo_view, steps):
    '''此方法为运行方法,带参数接受和返回,不带图像显示'''
    Data.flag = True
    time_logo = 0

    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 = density
    Data.PEOPLE_NUMBER = Data.count_PEOPLE_NUMBER(density)

    Data.FX_SIGMA_2 = radius  # 危险源大小
    Data.FX_R = Data.count_FX_R(radius)  # 影响范围半径
    Data.FX_P = Data.count_FX_P(radius)  # 系数 p越大 高斯函数的圆形越大

    Data.FX_S_SIGMA_2 = radius_ob
    Data.FX_S_R = Data.count_FX_S_R(radius_ob)
    Data.FX_S_P = Data.count_FX_S_P(radius_ob)

    Data.FX_S_V = radius_v

    Data.PEOPLE_FORCE = force

    if force_type == 0:  # fix
        allPeople = InitPeolple.creatPeople_force_fix()
    else:  #random
        allPeople = InitPeolple.creatPeople_force_random()

    Data.PEOPLE_FAN_R = peo_view
    while Data.flag:  #循环开始
        if Data.FX_S_R < 21:
            count_R_O_V(time_logo)
        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)  #行人移动
        if len(allPeople) == 0:
            Data.flag = False
        time_logo = time_logo + 1
    # print(time_logo)
    # print("\033[4;32;40mxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\033[0m")

    return time_logo
示例#3
0
def run_insert(par_density,par_case,par_r_c,par_r_o,par_v,par_force):
    '''此方法为运行方法,带参数接受和返回,不带图像显示'''
    Data.flag=True
    time_logo=0
    if par_case==1:#危险源位置设置
        Data.FX_N=19
    elif par_case==2:
        Data.FX_N = 15
    elif par_case==3:
        Data.FX_N = 10
    Data.PEOPLE_DENSYTY=par_density
    Data.PEOPLE_NUMBER=int(Data.ROOM_N * Data.ROOM_M * par_density)
    Data.FX_R =par_r_c   # 影响范围半径
    Data.FX_P = math.pow(par_r_c, 2) / 2 # 系数 p越大 高斯函数的圆形越大
    Data.FX_S_R=par_r_o
    Data.FX_S_P=math.pow(par_r_o, 2) / 2
    Data.FX_S_V=par_v
    Data.PEOPLE_FORCE=par_force
    allPeople = InitPeolple.creatPeople_force_fix()

    result_time = []
    result_rote = []
    result_all = []

    while Data.flag:#循环开始
        if Data.FX_S_R<21:
            count_R_O_V()
        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)#行人移动
        if len(allPeople)==0:
            Data.flag=False
        a_p = 0
        b_p = 0
        for p in allPeople:
            if Data.FX_R ** 2 < ((p.x - Data.FX_M) ** 2 + (p.x - Data.FX_M) ** 2) < Data.FX_S_R ** 2:
                a_p = a_p + 1
                if p.isInGrend == 2:
                    b_p = b_p + 1
        result_time.append(time_logo)
        if a_p == 0:
            result_rote.append(0)
        else:
            result_rote.append(b_p / a_p)
        time_logo = time_logo + 1
    result_all.append(result_time)
    result_all.append(result_rote)
    return result_all