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

質問 (解決済み)

[artisocモデル] 渋滞吸収運転
質問者: marshさん , 質問日時: 2017/09/21 22:05
私は今、渋滞吸収運転というものをartisocを用いて検証してみようと考えており、
モデルについての質問をさせていただきたいです。
50台円状に走っている車を一度渋滞させます。
そこで、3台以上止まっている場合、あるIDの車の速度を20%にするというルールを考えています。
おそらくif文を利用すると思われるのですが、いまいちうまく動きません。
どのようにすると、3台以上止まっている場合の条件を与えられるでしょうか?
お分りいただける方、教えていただけると幸いです。



▼解決した回答


文章からでは、あなたが、コード上、どのようなことを停止として定義しているかわかりませんが、
例えば、車の停止条件を判定させ、条件が偽の場合に進むようにしているのならば、
If 停止条件 == True Then
Universe.teishi_sharyo = Universe.teishi_sharyo + 1
Else Universe.teishi_sharyo => 3 Then
Forward(speed*0.8)
Else
Forward(speed)
End
という感じです。
また、そうではなく、車そのものの位置が変化がないことを停止とするならば、
XとYの記憶数を1として、1つ前のステップのXYと現在のステップのXYが同じであれば、停止していると定義します。
その場合、
If My.X == GetHistory(My.X,1) AND My.Y == GetHistory(My.Y,1) Then
Universe.teishi_sharyo = Universe.teishi_sharyo + 1
Else Universe.teishi_sharyo => 3 Then
Forward(speed*0.8)
Else
Forward(speed)
End
となります。

回答者: igaguri さん , 回答日時: 2017/09/22 11:25

▼ 全ての回答


文章からでは、あなたが、コード上、どのようなことを停止として定義しているかわかりませんが、
例えば、車の停止条件を判定させ、条件が偽の場合に進むようにしているのならば、
If 停止条件 == True Then
Universe.teishi_sharyo = Universe.teishi_sharyo + 1
Else Universe.teishi_sharyo => 3 Then
Forward(speed*0.8)
Else
Forward(speed)
End
という感じです。
また、そうではなく、車そのものの位置が変化がないことを停止とするならば、
XとYの記憶数を1として、1つ前のステップのXYと現在のステップのXYが同じであれば、停止していると定義します。
その場合、
If My.X == GetHistory(My.X,1) AND My.Y == GetHistory(My.Y,1) Then
Universe.teishi_sharyo = Universe.teishi_sharyo + 1
Else Universe.teishi_sharyo => 3 Then
Forward(speed*0.8)
Else
Forward(speed)
End
となります。

回答者: igaguri さん , 回答日時: 2017/09/22 11:25



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