Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)