MAS コミュニティ
artisoc質問用掲示板(アーカイブ)
  
質問掲示板は移転しました。新掲示板はこちら

質問  (回答受付中)

[artisocモデル] 片側一車線の交差点の交通流モデルについて
質問者: ryuheiさん , 質問日時: 2019/07/16 13:59
車が前方車両を認識して、赤信号で前方車と衝突することなく、停止と出発をさせたいのですが、車エージェントが動いてくれません。
どうか、教えてください。
よろしくお願い致します。

Agt_Init{

}

Agt_Step{

Dim aroundSignals As AgtSet
Dim tmpSignal As Agt
Dim frontSignal As Agt
Dim isSignal As Boolean
Dim isTmpFlag As Boolean
Dim distance As Double
Dim minDistance As Double
Dim CarminDistance As Double
Dim SignalminDistance As Double
Dim 進距離 As Double


Dim tmpCar As Agt
Dim aroundCars As AgtSet
Dim isCarFront As Boolean
Dim istmpcar As Agt
Dim frontCar As Agt

isCarFront = False
distance=1000
minDistance = 10

//100m以内の車を取得
MakeOneAgtSetAroundPosition(aroundCars,Universe.マップ, My.X,My.Y ,0,10,Universe.マップ.車)

//100m以内の車から前方車を見つける
For Each tmpCar In aroundCars

isTmpFlag = False
//自分の向いてる方向から、該当しない車(違うライン、後ろの車)を見つけ、フラグをオフ
If (My.方向 == 1) And (tmpCar.方向 == 1) And (My.X == tmpCar.X) And (My.Y >= tmpCar.Y) Then
isTmpFlag = True
End If
If (My.方向 == 2) And (tmpCar.方向 == 2) And (My.Y == tmpCar.Y) And (My.X<= tmpCar.X) Then
isTmpFlag = True
End If
If (My.方向 == 3) And (tmpCar.方向 == 3) And (My.X == tmpCar.X) And (My.Y <= tmpCar.Y) Then
isTmpFlag = True
End If
If (My.方向 == 4) And (tmpCar.方向 == 4) And (My.Y == tmpCar.Y) And (My.X >= tmpCar.X) Then
isTmpFlag = True
End If

//該当する車で近いと思われるものがあれば、前方車として登録
If isTmpFlag == True Then
distance = Abs( (My.X - tmpCar.X ) + (My.Y - tmpCar.Y ) )
If distance < minDistance Then
isCarFront = True
CarminDistance = distance
frontCar = tmpCar
End If
End If

Next tmpCar


distance=10000
minDistance=10
isSignal= False
//100m以内の信号を取得
MakeOneAgtSetAroundPosition(aroundSignals,Universe.マップ, My.X,My.Y ,0,10,Universe.マップ.信号)
//100m以内の車から前方車を見つける
For Each tmpSignal In aroundSignals
isTmpFlag = False

//自分の向いてる方向から、該当しない信号(違うライン、後ろの信号)を見つけ、フラグをオフ
If (My.方向 == 1) And (My.X == tmpSignal.X) And (My.Y >= tmpSignal.Y) Then
isTmpFlag = True
End If
If (My.方向 == 2) And (My.Y == tmpSignal.Y) And (My.X <= tmpSignal.X) Then
isTmpFlag = True
End If
If (My.方向 == 3) And (My.X == tmpSignal.X) And (My.Y <= tmpSignal.Y) Then
isTmpFlag = True
End If
If (My.方向 == 4) And (My.Y == tmpSignal.Y) And (My.X >= tmpSignal.X) Then
isTmpFlag = True
End If

//該当する信号で近いと思われるものがあれば、信号として登録
If isTmpFlag == True Then
distance = Abs( (My.X - tmpSignal.X ) + (My.Y - tmpSignal.Y ) )
If distance < minDistance Then
isSignal = True
SignalminDistance = distance
frontSignal = tmpSignal
End If
End If

Next tmpSignal



//信号が赤であれば
If isSignal == True Then

if isCarFront == True Then

if CarminDistance>SignalminDistance Then

if frontSignal.現在色 == Color_Red Then

if SignalminDistance<=1 Then
my.chang=0
else
my.chang=1
end if

else
my.chang=1
end if

else
if CarminDistance<=1 Then
my.chang=0
else
my.chang=1
end if
end if

else
if frontSignal.現在色 == Color_Red Then
if minDistance<=1 Then
my.chang=0
else
my.chang=1
end if
else
my.chang=1
end if
end if

else
if isCarFront == True Then
if CarminDistance <= 1 Then
my.chang=0
else
my.chang=1
end if
else
my.chang=1
end if
end if



if my.chang==1 then
進距離=my.chang
my.速度=進距離

if my.方向==1 then
my.Y = my.Y-進距離
else if
my.方向==2 then
my.X=my.X+進距離
else if
my.方向==3 then
my.Y=my.Y+進距離
else if
my.方向==4 then
my.X=my.X-進距離

else
if my.方向==1 then
my.Y = my.Y
else if
my.方向==2 then
my.X=my.X
else if
my.方向==3 then
my.Y=my.Y
else if
my.方向==4 then
my.X=my.X
end if
end if
end if
end if
end if
end if
end if
end if
end if



▼ 全ての回答


まだ回答はありません。


Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
( 会社情報 情報セキュリティ・個人情報について )