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)
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
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