SlideShare a Scribd company logo
1 of 11
Download to read offline
http://www.kke.co.jp
株式会社 構造計画研究所
〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225
Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
10. artisocレシピブック
A*探索アルゴリズムを使って、最短経路を自動的に探索しよう
本ドキュメントについてのご質問、『複雑系勉強会』の
お問合せは、下記までご連絡ください。
(株)構造計画研究所
社会デザイン・マーケティング部
artisocマーケティング担当 玉田
Tel: 052-222-8461
E-mail: tamada@kke.co.jp
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
2
最短経路を探索しよう
道路ネットワークが巨大になるとダイクストラ法では計算できません。
A*探索アルゴリズムを使って、自動的に最短経路を探索します。
・歩行モデルの拡張
① 「02. artisocレシピブック」のおさらい
② A*探索アルゴリズムとは?
③ 歩行モデルの拡張
④ Universeで計算ライブラリを初期化
⑤ 複数の歩行者を生成
⑥ 歩行者の行動ルールを変更
⑦ 道路を拡張
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
3
① 「02. artisocレシピブック」のおさらい
「02. artisocレシピブック」で作成した道路に沿って歩くモデル
描画ツールで道路を作成していく方法、歩くモデルの動作原理について学びました。
「02. artisocレシピブック」で作成した歩くモデルの問題点と解決策
道路ネットワークが単純なときは手作業で経路を指定できますが、複雑になると大変面倒です。
そこでA*探索アルゴリズムを使って、最短経路を自動的に探索するモデルを作成します。
【Step1】 モデルの定義
• PointエージェントとLinkエージェントを定
義して、描画ツールの前準備をします。
• Personエージェントを定義して、指定し
た経路で移動するアルゴリズムを定義し
ます。
【Step2】 描画ツールで道路を定義
• 背景画像の道路に沿ってマウスクリックし
て、ネットワークを定義します。
【Step3】 動きを確認
• 指定した順番にPointを通ってゴールにた
どり着くことを確認します。
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
4
② A*探索アルゴリズムとは?
ダイクストラ法とA*探索アルゴリズムの違い
ダイクストラ法: スタートノードから全てのノードへの最短経路を求めます。
A*探索: ゴールまでの推定値(直線距離など)を元にして、スタートから
ゴールに近いと思われる点から順次探索していきます。
A*探索アルゴリズムの手順
① スタートノードから順次経路を探索していく際に、推定距離を用いてゴー
ルまでの距離が短くできそうなノードから優先的に探索していきます。
② 具体的には、ノードnについて、スタートからノードnまでの距離g(n)と、ノー
ドnからゴールまでの推定距離h(n)を計算し、その和であるf(n)を随時更
新していきます。
f(n) = g(n) + h(n)
③ f(n)が近いノードから優先的にその先への探索を実行していきます。
④ h(n)には直線距離などが用いられます。
⑤ 最短経路を求めるには、h(n)が、f(n)の更新に用いられる真のリンク間移
動コストと比べて、必ず同じか短くなるよう設定する必要があります(幹
線道路考慮時などはこの点に要注意)。
A*探索アルゴリズムの詳細については、Wikipediaで調べてみましょう。
s
g
n
g(n)
h(n)
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
5
③ 歩行モデルの拡張
「Point」を拡張します。
「Point」に次の変数を追加します。
変数名: NearAgtSet :エージェント集合型
接続しているPointを格納します。
変数名: ParentPointAgt:エージェント型
親のPointを一時的に格納します。
変数名: g :実数型
gの値を一時的に格納します。
変数名: f :実数型
fの値を一時的に格納します。
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
6
④ Universeで計算ライブラリを初期化
A*探索アルゴリズム計算ライブラリ「a_star.inc」を利用します。
ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。
「Univ_Init」で計算ライブラリを初期化します。
include “a_star.inc”
Univ_Init{
set_near_point()
}
・・・計算ライブラリを読み込む
・・・リンクするPointを格納する
【A*探索アルゴリズム計算ライブラリの使い方】
• 「a_star.inc」は、ダイクストラ法で最短経路を探索するための計算ライブラリです。
• 計算ライブラリを利用するためには、Universeの先頭に「include “a_star.inc”」と記述し、「Univ_Init」で、リ
ンクするPointを格納するための関数「set_near_point()」を実行してください。
• 最短経路を取得するためには、「@a_star ([始点のPoint], [目的地のPoint])」の形式で指定します。
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
7
⑤ 複数の歩行者を生成
経路に沿って進み、目的地に到着したら新しい経路を設定します。
ツリーの「Point」を右クリックして、「ルールエディタ」を選択します。
Agt_Init{
Dim personAgt As Agt
Dim nearPointAgt As Agt
If My.ID == 0 And GetCountStep() < 5 Then
personAgt = CreateAgt(Universe.Map.Person)
personAgt.X = My.X
personAgt.Y = My.Y
If CountAgtSet(My.NearAgtSet) > 0 Then
nearPointAgt = GetAgt(My.NearAgtSet, Cint(Rnd() * CountAgtSet(My.NearAgtSet)))
personAgt.RouteArray = @a_star(My.UniqueID,nearPointAgt)
personAgt.RouteCount = 1
Else
personAgt.RouteArray = CStr(My.ID)
personAgt.RouteCount = 0
End If
End If
}
・・・Point ID=0から、4人の歩行者を生成する
・・・隣接したPointへの最短経路を取得する
・・・隣接したPointがない場合
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
8
⑥ 歩行者の行動ルールを変更(1)
経路に沿って進み、目的地に到着したら新しい経路を設定します。
ツリーの「Person」を右クリックして、「ルールエディタ」を選択します。
Agt_Init {
}
Agt_Step {
Dim targetPointAgt As Agt
Dim distance As Double
If My.RouteCount < CountToken(My.RouteArray) Then
targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount)))
distance = Pursue(targetPointAgt, 1)
・・・経路に沿って進む
・・・Pursue関数で、
targetPointAgtの方向に進む
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
9
⑥ 歩行者の行動ルールを変更(2)
If distance > 0 Then
My.RouteCount = My.RouteCount + 1
If CountToken(My.RouteArray) > My.RouteCount Then
targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount)))
Pursue(targetPointAgt, distance)
Else
add_new_route(targetPointAgt)
End If
End If
Else
targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount-1)))
add_new_route(targetPointAgt)
End If
}
・・・Pointに到着したとき
・・・余剰分、次のPointへ向かう
・・・目的地に到着したので、
新しい経路を設定する
・・・新しい経路を設定する
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
10
⑥ 歩行者の行動ルールを変更(3)
Sub add_new_route(targetPointAgt As Agt)
{
Dim newTargetPointAgt As Agt
Dim newRoute As String
newRoute = “”
newTargetPointAgt = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point)))
If targetPointAgt.ID <> newTargetPointAgt.ID Then
newRoute = @a_star(targetPointAgt, newTargetPointAgt)
End If
If Len(newRoute) > 0 Then
My.RouteArray = My.RouteArray & "," & newRoute
End If
}
・・・候補地をランダムに選択する
http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
11
⑦ 道路の拡張
道路を拡張します。
ツリーの「Map」を右クリックして「初期値設定」を選択し、描画ツールを表示します。
道路ネットワークを自由に拡張してください。
10.model

More Related Content

What's hot

06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう
06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう
06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しようMasaki Tamada
 
かんたんベジェ曲線
かんたんベジェ曲線かんたんベジェ曲線
かんたんベジェ曲線Yu(u)ki IWABUCHI
 
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示-
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示- 人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示-
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示- Atsushi Hashimoto
 
配送ルート最適化の為のAI開発の今と未来
配送ルート最適化の為のAI開発の今と未来配送ルート最適化の為のAI開発の今と未来
配送ルート最適化の為のAI開発の今と未来Yosuke Takada
 
Autodesk Infraworksで地理院地図を実務で使い倒そう
Autodesk Infraworksで地理院地図を実務で使い倒そうAutodesk Infraworksで地理院地図を実務で使い倒そう
Autodesk Infraworksで地理院地図を実務で使い倒そうOsamu Inoue
 
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会t-moritsugu
 

What's hot (7)

06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう
06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう
06. artisocレシピブック ポテンシャル法を使って、買い回り行動を再現しよう
 
かんたんベジェ曲線
かんたんベジェ曲線かんたんベジェ曲線
かんたんベジェ曲線
 
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示-
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示- 人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示-
人の行動をモデル化して予測する -調理作業支援を題材とした行動予測と情報提示-
 
配送ルート最適化の為のAI開発の今と未来
配送ルート最適化の為のAI開発の今と未来配送ルート最適化の為のAI開発の今と未来
配送ルート最適化の為のAI開発の今と未来
 
Autodesk Infraworksで地理院地図を実務で使い倒そう
Autodesk Infraworksで地理院地図を実務で使い倒そうAutodesk Infraworksで地理院地図を実務で使い倒そう
Autodesk Infraworksで地理院地図を実務で使い倒そう
 
Code iq interpretation_futatsugi
Code iq interpretation_futatsugiCode iq interpretation_futatsugi
Code iq interpretation_futatsugi
 
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会
 

Similar to 10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう

SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料Tomoki Saito
 
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一schoowebcampus
 
SORACOMサービスを利用してフルスケールIoT
SORACOMサービスを利用してフルスケールIoTSORACOMサービスを利用してフルスケールIoT
SORACOMサービスを利用してフルスケールIoTHaruka Yamashita
 
つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料Koichi Hikawa
 
HPA交流会2019春
HPA交流会2019春HPA交流会2019春
HPA交流会2019春HirakuTOIDA
 
Si2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライドSi2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライドRobotics Engineer
 
SORACOM S+Cameraを利用して在庫チェックをやってみた
SORACOM S+Cameraを利用して在庫チェックをやってみたSORACOM S+Cameraを利用して在庫チェックをやってみた
SORACOM S+Cameraを利用して在庫チェックをやってみたTakanori Suzuki
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現AdvancedTechNight
 
AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。Shogo Matsuda
 
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~Takashi Ohmoto
 
道東 x IoT ハッカソン 2018 / 開発技術資料
道東 x IoT ハッカソン 2018 / 開発技術資料道東 x IoT ハッカソン 2018 / 開発技術資料
道東 x IoT ハッカソン 2018 / 開発技術資料Kohei MATSUSHITA
 
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.moteki1
 
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.moteki1
 
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法SORACOM,INC
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Recruit Technologies
 
ドライブレコーダの動画を使った道路情報の自動差分抽出
ドライブレコーダの動画を使った道路情報の自動差分抽出ドライブレコーダの動画を使った道路情報の自動差分抽出
ドライブレコーダの動画を使った道路情報の自動差分抽出Tetsutaro Watanabe
 
清田軌道工業会社紹介資料230728.pdf
清田軌道工業会社紹介資料230728.pdf清田軌道工業会社紹介資料230728.pdf
清田軌道工業会社紹介資料230728.pdfymoteki
 

Similar to 10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう (19)

SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料
 
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
 
SORACOMサービスを利用してフルスケールIoT
SORACOMサービスを利用してフルスケールIoTSORACOMサービスを利用してフルスケールIoT
SORACOMサービスを利用してフルスケールIoT
 
11 shibuya
11 shibuya11 shibuya
11 shibuya
 
つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料
 
HPA交流会2019春
HPA交流会2019春HPA交流会2019春
HPA交流会2019春
 
Si2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライドSi2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライド
 
SORACOM S+Cameraを利用して在庫チェックをやってみた
SORACOM S+Cameraを利用して在庫チェックをやってみたSORACOM S+Cameraを利用して在庫チェックをやってみた
SORACOM S+Cameraを利用して在庫チェックをやってみた
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
 
AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。
 
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~
ウェアラブル時代到来! ~先行企業の活用事例と今後の展望~
 
道東 x IoT ハッカソン 2018 / 開発技術資料
道東 x IoT ハッカソン 2018 / 開発技術資料道東 x IoT ハッカソン 2018 / 開発技術資料
道東 x IoT ハッカソン 2018 / 開発技術資料
 
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
 
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
清田軌道工業会社説明資料_Kiyota Railway Engineering Co., Ltd.
 
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
Cloud Developers Circle #7 | IoT にありがちな失敗パターンと回避する方法
 
20190330 fukudalab introduction
20190330 fukudalab introduction20190330 fukudalab introduction
20190330 fukudalab introduction
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
 
ドライブレコーダの動画を使った道路情報の自動差分抽出
ドライブレコーダの動画を使った道路情報の自動差分抽出ドライブレコーダの動画を使った道路情報の自動差分抽出
ドライブレコーダの動画を使った道路情報の自動差分抽出
 
清田軌道工業会社紹介資料230728.pdf
清田軌道工業会社紹介資料230728.pdf清田軌道工業会社紹介資料230728.pdf
清田軌道工業会社紹介資料230728.pdf
 

More from Masaki Tamada

【MASの教材】ホタルの光
【MASの教材】ホタルの光【MASの教材】ホタルの光
【MASの教材】ホタルの光Masaki Tamada
 
【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」Masaki Tamada
 
【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトンMasaki Tamada
 
【MASの教材】病気の流行
【MASの教材】病気の流行【MASの教材】病気の流行
【MASの教材】病気の流行Masaki Tamada
 
【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れMasaki Tamada
 
【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるようにMasaki Tamada
 
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへMasaki Tamada
 
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうMasaki Tamada
 
第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会Masaki Tamada
 
第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会Masaki Tamada
 

More from Masaki Tamada (10)

【MASの教材】ホタルの光
【MASの教材】ホタルの光【MASの教材】ホタルの光
【MASの教材】ホタルの光
 
【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」
 
【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン
 
【MASの教材】病気の流行
【MASの教材】病気の流行【MASの教材】病気の流行
【MASの教材】病気の流行
 
【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ
 
【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように
 
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
 
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
 
第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会
 
第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会
 

10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう

  • 1. http://www.kke.co.jp 株式会社 構造計画研究所 〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225 Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 10. artisocレシピブック A*探索アルゴリズムを使って、最短経路を自動的に探索しよう 本ドキュメントについてのご質問、『複雑系勉強会』の お問合せは、下記までご連絡ください。 (株)構造計画研究所 社会デザイン・マーケティング部 artisocマーケティング担当 玉田 Tel: 052-222-8461 E-mail: tamada@kke.co.jp
  • 2. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 2 最短経路を探索しよう 道路ネットワークが巨大になるとダイクストラ法では計算できません。 A*探索アルゴリズムを使って、自動的に最短経路を探索します。 ・歩行モデルの拡張 ① 「02. artisocレシピブック」のおさらい ② A*探索アルゴリズムとは? ③ 歩行モデルの拡張 ④ Universeで計算ライブラリを初期化 ⑤ 複数の歩行者を生成 ⑥ 歩行者の行動ルールを変更 ⑦ 道路を拡張
  • 3. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 3 ① 「02. artisocレシピブック」のおさらい 「02. artisocレシピブック」で作成した道路に沿って歩くモデル 描画ツールで道路を作成していく方法、歩くモデルの動作原理について学びました。 「02. artisocレシピブック」で作成した歩くモデルの問題点と解決策 道路ネットワークが単純なときは手作業で経路を指定できますが、複雑になると大変面倒です。 そこでA*探索アルゴリズムを使って、最短経路を自動的に探索するモデルを作成します。 【Step1】 モデルの定義 • PointエージェントとLinkエージェントを定 義して、描画ツールの前準備をします。 • Personエージェントを定義して、指定し た経路で移動するアルゴリズムを定義し ます。 【Step2】 描画ツールで道路を定義 • 背景画像の道路に沿ってマウスクリックし て、ネットワークを定義します。 【Step3】 動きを確認 • 指定した順番にPointを通ってゴールにた どり着くことを確認します。
  • 4. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 4 ② A*探索アルゴリズムとは? ダイクストラ法とA*探索アルゴリズムの違い ダイクストラ法: スタートノードから全てのノードへの最短経路を求めます。 A*探索: ゴールまでの推定値(直線距離など)を元にして、スタートから ゴールに近いと思われる点から順次探索していきます。 A*探索アルゴリズムの手順 ① スタートノードから順次経路を探索していく際に、推定距離を用いてゴー ルまでの距離が短くできそうなノードから優先的に探索していきます。 ② 具体的には、ノードnについて、スタートからノードnまでの距離g(n)と、ノー ドnからゴールまでの推定距離h(n)を計算し、その和であるf(n)を随時更 新していきます。 f(n) = g(n) + h(n) ③ f(n)が近いノードから優先的にその先への探索を実行していきます。 ④ h(n)には直線距離などが用いられます。 ⑤ 最短経路を求めるには、h(n)が、f(n)の更新に用いられる真のリンク間移 動コストと比べて、必ず同じか短くなるよう設定する必要があります(幹 線道路考慮時などはこの点に要注意)。 A*探索アルゴリズムの詳細については、Wikipediaで調べてみましょう。 s g n g(n) h(n)
  • 5. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 5 ③ 歩行モデルの拡張 「Point」を拡張します。 「Point」に次の変数を追加します。 変数名: NearAgtSet :エージェント集合型 接続しているPointを格納します。 変数名: ParentPointAgt:エージェント型 親のPointを一時的に格納します。 変数名: g :実数型 gの値を一時的に格納します。 変数名: f :実数型 fの値を一時的に格納します。
  • 6. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 6 ④ Universeで計算ライブラリを初期化 A*探索アルゴリズム計算ライブラリ「a_star.inc」を利用します。 ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。 「Univ_Init」で計算ライブラリを初期化します。 include “a_star.inc” Univ_Init{ set_near_point() } ・・・計算ライブラリを読み込む ・・・リンクするPointを格納する 【A*探索アルゴリズム計算ライブラリの使い方】 • 「a_star.inc」は、ダイクストラ法で最短経路を探索するための計算ライブラリです。 • 計算ライブラリを利用するためには、Universeの先頭に「include “a_star.inc”」と記述し、「Univ_Init」で、リ ンクするPointを格納するための関数「set_near_point()」を実行してください。 • 最短経路を取得するためには、「@a_star ([始点のPoint], [目的地のPoint])」の形式で指定します。
  • 7. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 7 ⑤ 複数の歩行者を生成 経路に沿って進み、目的地に到着したら新しい経路を設定します。 ツリーの「Point」を右クリックして、「ルールエディタ」を選択します。 Agt_Init{ Dim personAgt As Agt Dim nearPointAgt As Agt If My.ID == 0 And GetCountStep() < 5 Then personAgt = CreateAgt(Universe.Map.Person) personAgt.X = My.X personAgt.Y = My.Y If CountAgtSet(My.NearAgtSet) > 0 Then nearPointAgt = GetAgt(My.NearAgtSet, Cint(Rnd() * CountAgtSet(My.NearAgtSet))) personAgt.RouteArray = @a_star(My.UniqueID,nearPointAgt) personAgt.RouteCount = 1 Else personAgt.RouteArray = CStr(My.ID) personAgt.RouteCount = 0 End If End If } ・・・Point ID=0から、4人の歩行者を生成する ・・・隣接したPointへの最短経路を取得する ・・・隣接したPointがない場合
  • 8. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 8 ⑥ 歩行者の行動ルールを変更(1) 経路に沿って進み、目的地に到着したら新しい経路を設定します。 ツリーの「Person」を右クリックして、「ルールエディタ」を選択します。 Agt_Init { } Agt_Step { Dim targetPointAgt As Agt Dim distance As Double If My.RouteCount < CountToken(My.RouteArray) Then targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) distance = Pursue(targetPointAgt, 1) ・・・経路に沿って進む ・・・Pursue関数で、 targetPointAgtの方向に進む
  • 9. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 9 ⑥ 歩行者の行動ルールを変更(2) If distance > 0 Then My.RouteCount = My.RouteCount + 1 If CountToken(My.RouteArray) > My.RouteCount Then targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) Pursue(targetPointAgt, distance) Else add_new_route(targetPointAgt) End If End If Else targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount-1))) add_new_route(targetPointAgt) End If } ・・・Pointに到着したとき ・・・余剰分、次のPointへ向かう ・・・目的地に到着したので、 新しい経路を設定する ・・・新しい経路を設定する
  • 10. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 10 ⑥ 歩行者の行動ルールを変更(3) Sub add_new_route(targetPointAgt As Agt) { Dim newTargetPointAgt As Agt Dim newRoute As String newRoute = “” newTargetPointAgt = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point))) If targetPointAgt.ID <> newTargetPointAgt.ID Then newRoute = @a_star(targetPointAgt, newTargetPointAgt) End If If Len(newRoute) > 0 Then My.RouteArray = My.RouteArray & "," & newRoute End If } ・・・候補地をランダムに選択する
  • 11. http://www.kke.co.jpCopyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 11 ⑦ 道路の拡張 道路を拡張します。 ツリーの「Map」を右クリックして「初期値設定」を選択し、描画ツールを表示します。 道路ネットワークを自由に拡張してください。 10.model