def step(self): "ここで関数を用いる" "まず,周囲の位置情報を確認する" #pass #周囲のエージェントとの距離の確認 plt.scatter(self.iti[0], self.iti[1]) if self.katikan == 1: self.a = math.pi/2 else: self.a = -1*math.pi/2 agents = syudan #print(agents) num_hito = num_agents kabe = kabes num_kabe = num_kabes fa = self.syuui(num_hito,agents) # print("まえのself.a",self.a) self.a = kakudo_kai(fa, self.a) print("あとのself.a", self.a) #print("self.aは",self.a) kabe_f = self.kabe_f(num_kabe, kabe) hito_f = self.syuui_f(num_hito,agents) dvdt =( self.sokudo() + kabe_f + hito_f )/2 dvdt[0] = round(dvdt[0], 3) * math.cos(self.a) dvdt[1] = round(dvdt[1], 3) * math.sin(self.a) self.vi = self.vi + dvdt print("これは動く前のself.iti",self.iti) self.iti = self.iti + self.vi print("new_itiは",self.iti)
def step(self): "imという関数について,1座標を追加" im_x_sita.append(self.iti[0]) im_y_sita.append(self.iti[1]) #1ステップごとに価値観を変更,目的方向は垂直に上 self.a = math.pi/2 agents = syudan num_hito = num_agents kabe = kabes num_kabe = num_kabes fa, syu_num , syuui_agents= self.syuui(num_hito,agents) self.a = kakudo_kai(fa, self.a) self.vdes = 1.3 self.vdes = self.vdes * np.array([math.cos(self.a), math.sin(self.a)]) print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num,syuui_agents) print("syu_agents",syuui_agents) V_nomi = self.sokudo() dvdt = (V_nomi + hito_f + self.douro_f() ) /100 print("self.douro_f()",self.douro_f()) print("hito_f",hito_f) dvdt_new = dvdt print("dvdt_new", dvdt_new) print("self.vdes",self.vdes) print("これは動く前のself.vi", self.vi) maeno_vi = self.vi self.vi = self.vi + dvdt_new dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) tan_theta = math.tan(self.a) #if dvdt[1] <= 0 : # dvdt[1] = 0 #else: #54 tan_theta = dvdt[0]/dvdt[1] if round(dvdt[0], 2) != 0: print("横方向に動いた!!!!!!!!!!") tan_the_p_siya = (tan_theta + math.tan(self.siyakaku))/ (1 - (tan_theta * math.tan(self.siyakaku))) if tan_the_p_siya <= 0 : tan_the_p_siya = (-1)* tan_the_p_siya self.tan_siya = tan_the_p_siya for i in range(num_agents): if self.iti[0]==syudan[i,0] and self.iti[1]==syudan[i,1]: syudan[i] += self.vi #print("これはdtdsv", dvdt) print("これは辺が後のself.vi",self.vi) print("これは動く前のself.iti",self.iti) self.iti = self.iti + self.vi print("new_itiは",self.iti) if np.linalg.norm(self.vi) - np.linalg.norm(maeno_vi) >= 0.8: print("これは予測できない変化が発生しました") #print("これは辺が前のself.vi",maeno_vi) #print("これは辺が後のself.vi",self.vi) print("v_nomi",V_nomi)
def step(self): "ここで関数を用いる" "まず,周囲の位置情報を確認する" print( "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!うえのエージェントは存在しています!!!!!!!!!!!!!!!") im_x_sita.append(self.iti[0]) im_y_sita.append(self.iti[1]) self.a = math.pi / 2 agents = syudan #print(agents) num_hito = num_agents kabe = kabes num_kabe = num_kabes fa, syu_num = self.syuui(num_hito, agents) self.a = kakudo_kai(fa, self.a) #kabe_f = self.kabe_f(num_kabe, kabes) print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num, agents) #print("self.vdes", self.vdes) #2で割ったことにより1ステップごとのdvdtは0.5秒となる V_nomi = self.sokudo() dvdt = (V_nomi + hito_f + self.douro_f()) / 2 print("self.douro_f()", self.douro_f()) print("hito_f", hito_f) dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) dvdt_new = dvdt * np.array([math.cos(self.a), math.sin(self.a)]) print("dvdt_new", dvdt_new) print("self.vdes", self.vdes) print("これは動く前のself.vi", self.vi) maeno_vi = self.vi self.vi = self.vi + dvdt_new for i in range(num_agents): if self.iti[0] == syudan[i, 0] and self.iti[1] == syudan[i, 1]: syudan[i] += self.vi #print("これはdtdsv", dvdt) print("これは辺が後のself.vi", self.vi) print("これは動く前のself.iti", self.iti) self.iti = self.iti + self.vi print("new_itiは", self.iti) if np.linalg.norm(self.vi) - np.linalg.norm(maeno_vi) >= 0.8: print("これは予測できない変化が発生しました") #print("これは辺が前のself.vi",maeno_vi) #print("これは辺が後のself.vi",self.vi) print("v_nomi", V_nomi)
def step(self): "ここで関数を用いる" "まず,周囲の位置情報を確認する" #self.vdes = [0,1.3] im_x_sita.append(self.iti[0]) im_y_sita.append(self.iti[1]) self.a = math.pi/2 unko = self.a agents = syudan #print(agents) num_hito = num_agents kabe = kabes num_kabe = num_kabes fa, syu_num , syuui_agents= self.syuui(num_hito,agents) self.a = kakudo_kai(fa, self.a) self.vdes = 1.3 self.vdes = self.vdes * np.array([math.cos(self.a), math.sin(self.a)]) #kabe_f = self.kabe_f(num_kabe, kabes) print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num,syuui_agents) print("syu_agents",syuui_agents) #print("self.vdes", self.vdes) #2で割ったことにより1ステップごとのdvdtは0.5秒となる V_nomi = self.sokudo() dvdt = (V_nomi + hito_f + self.douro_f() ) /8 print("self.douro_f()",self.douro_f()) print("hito_f",hito_f) #dvdt[0] = round(dvdt[0], 3) #dvdt[1] = round(dvdt[1], 3) #if dvdt[1] <= 0 : # dvdt[1] = 0 dvdt_new = dvdt print("dvdt_new", dvdt_new) print("self.vdes",self.vdes) print("これは動く前のself.vi", self.vi) maeno_vi = self.vi self.vi = self.vi + dvdt_new dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) tan_theta = 0 if dvdt[1] <= 0 : dvdt[1] = 0 else: tan_theta = dvdt[0]/dvdt[1] if round(dvdt[0], 2) != 0: print("横方向に動いた!!!!!!!!!!") tan_the_p_siya = (tan_theta + math.tan(self.siyakaku))/ (1 - (tan_theta * math.tan(self.siyakaku))) if tan_the_p_siya <= 0 : tan_the_p_siya = (-1)* tan_the_p_siya self.tan_siya = tan_the_p_siya for i in range(num_agents): if self.iti[0]==syudan[i,0] and self.iti[1]==syudan[i,1]: syudan[i] += self.vi #print("これはdtdsv", dvdt) print("これは辺が後のself.vi",self.vi) print("これは動く前のself.iti",self.iti) self.iti = self.iti + self.vi print("new_itiは",self.iti) if np.linalg.norm(self.vi) - np.linalg.norm(maeno_vi) >= 0.8: print("これは予測できない変化が発生しました") #print("これは辺が前のself.vi",maeno_vi) #print("これは辺が後のself.vi",self.vi) print("v_nomi",V_nomi)
def step(self): "ここで関数を用いる" "まず,周囲の位置情報を確認する" #pass #周囲のエージェントとの距離の確認 #im.append(plt.scatter(self.iti[0], self.iti[1])) #plt.scatter(self.iti[0], self.iti[1]) im_x.append(self.iti[0]) im_y.append(self.iti[1]) self.a = math.pi / 2 agents = syudan #print(agents) num_hito = num_agents kabe = kabes num_kabe = num_kabes fa, syu_num = self.syuui(num_hito, agents) #if syu_num == 0: #print("この人には周囲の人がいないので周囲の接触力は考えなくてもよい") #print("まえのself.a",self.a) maeno_a = self.a self.a = kakudo_kai(fa, self.a) #if maeno_a != self.a : #print("このエージェントは移動時に角度が変化した") #else : #print("このエージェントは移動時に角度が変化しなかった") #print("あとのself.a", self.a) #print("self.aのかた",type(self.a)) #print("self.aは",self.a) #kabe_f = self.kabe_f(num_kabe, kabes) print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num, agents) #print("hito_fについて", hito_f) #v_des = fa/0.5 #print("self.vdes", self.vdes) #2で割ったことにより1ステップごとのdvdtは0.5秒となる V_nomi = self.sokudo() dvdt = (V_nomi + hito_f + self.douro_f()) / 2 print("self.douro_f()", self.douro_f()) print("hito_f", hito_f) dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) #dvdt_matome = ((dvdt[0]**2)+(dvdt[1]**2))**0.5 #dvdt_matome = np.linalg.norm(dvdt) #print("dvdt_matome", dvdt_matome) dvdt_new = dvdt * np.array([math.cos(self.a), math.sin(self.a)]) print("dvdt_new", dvdt_new) #dvdt[0] = dvdt_matome * math.cos(self.a) #dvdt[1] = dvdt_matome * math.sin(self.a) print("self.vdes", self.vdes) print("これは動く前のself.vi", self.vi) maeno_vi = self.vi self.vi = self.vi + dvdt_new #print("これはdtdsv", dvdt) print("これは辺が後のself.vi", self.vi) print("これは動く前のself.iti", self.iti) self.iti = self.iti + self.vi print("new_itiは", self.iti) if np.linalg.norm(self.vi) - np.linalg.norm(maeno_vi) >= 0.8: print("これは予測できない変化が発生しました") #print("これは辺が前のself.vi",maeno_vi) #print("これは辺が後のself.vi",self.vi) print("v_nomi", V_nomi)
def step(self): "imという関数について,1座標を追加" im_x_sita.append(self.iti[0]) im_y_sita.append(self.iti[1]) #1ステップごとに価値観を変更,目的方向は垂直に上 self.a = math.pi / 2 agents = syudan num_hito = num_agents kabe = kabes num_kabe = num_kabes kabe_hani = kabe_han fa, syu_num, syuui_agents = self.syuui(num_hito, agents) fa_kabe = self.kabe_fa(fa, kabe, kabe_hani) if fa_kabe <= fa: fa = fa_kabe maeno_a = self.a self.a = kakudo_kai(fa, self.a) for i in range(num_agents): if self.iti[0] + self.vi[0] == syudan[ i, 0] and self.iti[1] + self.vi[1] == syudan[i, 1]: syudan[i] -= self.vi if round(maeno_a) != round(self.a): print("前の角度は", math.degrees(maeno_a)) print("変化しました角度変化しました角度", math.degrees(self.a)) self.vdes = 1.3 vdes_kouho = fa / 0.5 if vdes_kouho <= self.vdes: self.vdes = vdes_kouho self.vdes = self.vdes * np.array([math.cos(self.a), math.sin(self.a)]) #壁との接触力 print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num, syuui_agents) print("syu_agents", syuui_agents) V_nomi = self.sokudo() douro_f = self.douro_f() dvdt = (V_nomi + hito_f + douro_f) / 10 print("self.douro_f()", self.douro_f()) print("hito_f", hito_f) if douro_f[0] != 0 or douro_f[1] != 0: print("道路の接触力が働いた", douro_f) if hito_f[0] != 0 and hito_f[1] != 0: print("人の接触力がすごいあっった!!!!!") dvdt_new = dvdt print("dvdt_new", dvdt_new) print("self.vdes", self.vdes) print("これは動く前のself.vi", self.vi) maeno_vi = self.vi self.vi = self.vi + dvdt_new dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) tan_theta = math.tan(self.a) #if dvdt[1] <= 0 : # dvdt[1] = 0 #else: #54 tan_theta = dvdt[0]/dvdt[1] if round(dvdt[0], 2) != 0: print("横方向に動いた!!!!!!!!!!") tan_the_p_siya = (tan_theta + math.tan(self.siyakaku)) / ( 1 - (tan_theta * math.tan(self.siyakaku))) if tan_the_p_siya <= 0: tan_the_p_siya = (-1) * tan_the_p_siya self.tan_siya = tan_the_p_siya for i in range(num_agents): if self.iti[0] == syudan[i, 0] and self.iti[1] == syudan[i, 1]: syudan[i] += (self.vi * 2) #print("これはdtdsv", dvdt) print("これは辺が後のself.vi", self.vi) print("これは動く前のself.iti", self.iti) self.iti = self.iti + self.vi print("new_itiは", self.iti) if np.linalg.norm(self.vi) - np.linalg.norm(maeno_vi) >= 0.8: print("これは予測できない変化が発生しました") #print("これは辺が前のself.vi",maeno_vi) #print("これは辺が後のself.vi",self.vi) print("v_nomi", V_nomi)
def step(self): "ここで関数を用いる" "まず,周囲の位置情報を確認する" #pass #周囲のエージェントとの距離の確認 plt.scatter(self.iti[0], self.iti[1]) if self.katikan == 1: self.a = math.pi / 2 else: self.a = -1 * math.pi / 2 agents = syudan #print(agents) num_hito = num_agents kabe = kabes num_kabe = num_kabes fa, syu_num = self.syuui(num_hito, agents) # print("まえのself.a", self.a) self.a = kakudo_kai(fa, self.a) print("あとのself.a", self.a) print("self.aのかた", type(self.a)) #print("self.aは",self.a) #kabe_f = self.kabe_f(num_kabe, kabes) print("Unique_ID", self.unique_id) hito_f = self.syuui_f(syu_num, agents) print("hito_fについて", hito_f) #v_des = fa/0.5 #self.vdes = [v_des*math.cos(self.a), v_des*math.sin(self.a)] print("self.vdes", self.vdes) dvdt = self.sokudo() + hito_f + self.douro_f() dvdt[0] = round(dvdt[0], 3) dvdt[1] = round(dvdt[1], 3) dvdt_matome = ((dvdt[0]**2) + (dvdt[1]**2))**0.5 dvdt[0] = dvdt_matome * math.cos(self.a) dvdt[1] = dvdt_matome * math.sin(self.a) print("これは動く前のself.vi", self.vi) self.vi = self.vi + dvdt print("これはdtdsv", dvdt) print("これは辺が後のself.vi", self.vi) print("これは動く前のself.iti", self.iti) self.iti = self.iti + self.vi print("new_itiは", self.iti)