SlideShare a Scribd company logo
http://www.kke.co.jp
株式会社 構造計画研究所
〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225
Copyright © 2015 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
03. artisocレシピブック
ダイクストラ法を使って、最短経路を自動的に探索しよう
本ドキュメントについてのご質問、『複雑系勉強会』の
お問合せは、下記までご連絡ください。
(株)構造計画研究所
社会デザイン・マーケティング部
artisocマーケティング担当 玉田
Tel: 052-222-8461
E-mail: tamada@kke.co.jp
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
2
最短経路を探索しよう
マップが複雑になると、歩く経路を指定することは手間がかかります。
ダイクストラ法を使って、自動的に最短経路を探索します。
・歩行モデルの拡張
① 「02. artisocレシピブック」のおさらい
② ダイクストラ法とは?
③ 歩行モデルの拡張
④ Universeで計算ライブラリを初期化
⑤ 複数の歩行者を生成
⑥ 歩行者の行動ルールを変更
⑦ 道路を拡張
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
3
① 「02. artisocレシピブック」のおさらい
「02. artisocレシピブック」で作成した道路に沿って歩くモデル
描画ツールで道路を作成していく方法、歩くモデルの動作原理について学びました。
「02. artisocレシピブック」で作成した歩くモデルの問題点と解決策
道路ネットワークが単純なときは手作業で経路を指定できますが、複雑になると大変面倒です。
そこでダイクストラ法を使って、最短経路を自動的に探索するモデルを作成します。
【Step1】 モデルの定義
• PointエージェントとLinkエージェントを定
義して、描画ツールの前準備をします。
• Personエージェントを定義して、指定し
た経路で移動するアルゴリズムを定義し
ます。
【Step2】 描画ツールで道路を定義
• 背景画像の道路に沿ってマウスクリックし
て、ネットワークを定義します。
【Step3】 動きを確認
• 指定した順番にPointを通ってゴールにた
どり着くことを確認します。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
4
② ダイクストラ法とは?
下図のネットワークで、点0からのコストを算出します。(カッコ内は各リンクのコスト)
点0から各点への最短経路は、矢印の向きをたどることで求めることができます。
ダイクストラ法の詳細については、Wikipediaで調べてみましょう。
0
1
3
2 4
(3)
(2)
(7)
(5)
(6)
(10)
• Point:0に接続するリンク0→1,
0→2を抽出します。
• Point:1, 2のコストを算出します。
0
1
3
2 4
3
7
0
1
3
2 4
3
5
9
15
0
1
3
2 4
3
5
9
14
• Point:1に接続するリンク1→2,
1→3を抽出します。
• Point:2に接続するリンク2→1,
2→4を抽出します。
• Point:2のコストは、0→1→2を通っ
た場合に最少となるので、5に更新
します。
• Point:3, 4のコストを算出します。
• Point:3に接続するリンク3→4を抽
出します。
• Point:4に接続するリンク4→3を抽
出します。
• Point:4のコストは、0→1→3→4を
通った場合に最少となるので、14に
更新します。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
5
③ 歩行モデルの拡張(1)
交差点や端点の間のPointを束ねて、Streetで管理します。
描画ツールで定義したLinkの情報を元に、交差点や端点の間のLinkを束ねて、Streetを生成し
ます。
「Point」と「Link」を拡張します。
「Point」に次の変数を追加します。
変数名: DijkstraValue :実数型
計算値を一時的に格納します。
変数名: ChoiceAgt :エージェント型
最短経路のリンクを一時的に格納します。
変数名: NearAgtSet :エージェント集合型
接続しているPointを格納します。
変数名: StreetAgt :エージェント型
属しているStreetを格納します。
「Link」に次の変数を追加します。
変数名: StreetAgt :エージェント型
計算値を一時的に格納します。
変数名: ReverseLinkAgt :エージェント型
逆方向のLinkを格納します。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
6
③ 歩行モデルの拡張(2)
「Street」と「DijkstraStreet」を追加します。
「Universe」に「Street」エージェントを追加します。
Link情報から「Street」を生成して保持します。
変数名: Points :文字列型
属しているPointのID配列です。
変数名: Cost :実数型
コストを格納します。
変数名: ReverseStreetAgt :エージェント型
逆方向のStreetを格納します。
「Universe」に「DijkstraStreet」エージェントを追加します。
「DijkstraStreet」は、ダイクストラ法の計算結果を一時的に
格納します。
変数名: Route :文字列型
当該経路のPointのID配列です。
変数名: Value :実数型
当該経路のコストを一時的に格納します。
変数名: StreetRoute :文字列型実数型
当該経路のStreetのID配列です。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
7
③ 歩行モデルの拡張(3)
「StreetBackup」、「PointBackup」、「TemporaryStreetAgtSet」の追加
「Universe」に「StreetBackup」エージェントを追加します。
ダイクストラ法で計算する際にStreetが分断されるため、
元の状態をバックアップします。
変数名: StreetAgt :エージェント型
該当するStreetを一時的に保持します。
変数名: Points :文字列型
属しているPointのID配列を一時的に保持します。
変数名: Cost :実数型
コストを一時的に保持します。
変数名: ReverseStreetAgt :エージェント型
逆方向のStreetを一時的に保持します。
「Universe」に「PointBackup」エージェントを追加します。
変数名: PointAgt :エージェント型
該当するStreetを一時的に保持します。
変数名: StreetAgt :エージェント型
属しているStreetを一時的に保持します。
「Universe」に「TemporaryStreetAgtSet」を追加します。
変数名: TemporaryStreetAgtSet :エージェント集合型
計算前に追加したStreetを一時的に保持します。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
8
④ Universeで計算ライブラリを初期化
ダイクストラ計算ライブラリ「dijkstra.inc」を利用します。
ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。
「Univ_Init」で計算ライブラリを初期化します。
include “dijkstra.inc”
Univ_Init{
initialize_dijkstra()
}
・・・計算ライブラリを読み込む
・・・計算ライブラリを初期化する
【ダイクストラ法計算ライブラリの使い方】
• 「dijktstra.inc」は、ダイクストラ法で最短経路を探索するための計算ライブラリです。
• 計算ライブラリを利用するためには、Universeの先頭に「include “dijkstra.inc”」と記述し、「Univ_Init」で、
初期化のための関数「initialize_dijkstra()」を実行してください。
• 最短経路を取得するためには、「@dijkstra([始点のPointのID], [候補地のPointのID配列])」の形式で指
定します。
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
9
⑤ 複数の歩行者を生成
経路に沿って進み、目的地に到着したら新しい経路を設定します。
ツリーの「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 = @dijkstra(My.ID,CStr(nearPointAgt.ID))
personAgt.RouteCount = 1
Else
personAgt.RouteArray = CStr(My.ID)
personAgt.RouteCount = 0
End If
End If
}
・・・Point ID=0から、4人の歩行者を生成する
・・・隣接したPointへの最短経路を取得する
(第2引数は文字列なので注意してください)
・・・隣接したPoinがない場合
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
10
⑥ 歩行者の行動ルールを変更(1)
経路に沿って進み、目的地に到着したら新しい経路を設定します。
新しい経路は2箇所の候補地をランダムで選択し、何れか経路長が短い方を選択します。
ツリーの「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 © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
11
⑥ 歩行者の行動ルールを変更(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 © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
12
⑥ 歩行者の行動ルールを変更(3)
Sub add_new_route(targetPointAgt As Agt)
{
Dim newTargetPointAgt As Agt
Dim newTargetPointAgt2 As Agt
Dim newRoute As String
newRoute = “”
newTargetPointAgt = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point)))
newTargetPointAgt2 = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point)))
If ((targetPointAgt.ID <> newTargetPointAgt.ID) And (targetPointAgt.ID <> newTargetPointAgt2.ID))
And (newTargetPointAgt.ID <> newTargetPointAgt2.ID) Then
newRoute = @dijkstra(targetPointAgt.ID, CStr(newTargetPointAgt.ID) & "," &
CStr(newTargetPointAgt2.ID))
End If
If Len(newRoute) > 0 Then
My.RouteArray = My.RouteArray & "," & newRoute
End If
}
・・・2箇所の候補地をランダムで選択する
・・・2箇所の候補地のうち、経路長の
短い方の経路を返す
・・・2箇所の候補地とも到達できない
場合は””を返す
http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
13
⑦ 道路の拡張
道路を拡張します。
ツリーの「Map」を右クリックして「初期値設定」を選択し、描画ツールを表示します。
道路ネットワークを自由に拡張してください。
03.model

More Related Content

What's hot

スタートアップ立ち上げマニュアル
スタートアップ立ち上げマニュアルスタートアップ立ち上げマニュアル
スタートアップ立ち上げマニュアル
Takaya Shinozuka
 
ChatGPTの ビジネス活用とセキュリティ
ChatGPTのビジネス活用とセキュリティChatGPTのビジネス活用とセキュリティ
ChatGPTの ビジネス活用とセキュリティ
Daisuke Masubuchi
 
情報アーキテクチャ入門
情報アーキテクチャ入門情報アーキテクチャ入門
情報アーキテクチャ入門
Manami Nakamura
 
位置情報にまつわるデータ補間技術
位置情報にまつわるデータ補間技術位置情報にまつわるデータ補間技術
位置情報にまつわるデータ補間技術
Hiroaki Sengoku
 
アクセンチュア株式会社採用案内 2022/03
アクセンチュア株式会社採用案内 2022/03アクセンチュア株式会社採用案内 2022/03
アクセンチュア株式会社採用案内 2022/03
Accenture Japan
 
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
schoowebcampus
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
nishio
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
 
Image interpolation
Image interpolationImage interpolation
Image interpolation
KokuiSai
 
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
Takashi J OZAKI
 
仕事よりな自己紹介
仕事よりな自己紹介仕事よりな自己紹介
仕事よりな自己紹介
yagi eng
 
株式会社ディレクタス サービス紹介資料
株式会社ディレクタス サービス紹介資料株式会社ディレクタス サービス紹介資料
株式会社ディレクタス サービス紹介資料
Directus Inc.(ディレクタス)
 
マーケティング・戦略・組織視点のBIGDATA活用について
マーケティング・戦略・組織視点のBIGDATA活用についてマーケティング・戦略・組織視点のBIGDATA活用について
マーケティング・戦略・組織視点のBIGDATA活用について
Recruit Technologies
 
深層強化学習と実装例
深層強化学習と実装例深層強化学習と実装例
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
Koji Fukuoka
 
オントロジーとは?
オントロジーとは?オントロジーとは?
オントロジーとは?
Kouji Kozaki
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
Katsuhiro Morishita
 
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose EstimationDLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
harmonylab
 
SIGNATE 産業技術総合研究所 衛星画像分析コンテスト 2位入賞モデルの工夫点
SIGNATE産業技術総合研究所 衛星画像分析コンテスト2位入賞モデルの工夫点SIGNATE産業技術総合研究所 衛星画像分析コンテスト2位入賞モデルの工夫点
SIGNATE 産業技術総合研究所 衛星画像分析コンテスト 2位入賞モデルの工夫点
Ken'ichi Matsui
 
k-means(k-平均法)
k-means(k-平均法)k-means(k-平均法)
k-means(k-平均法)
Yuta Tomomatsu
 

What's hot (20)

スタートアップ立ち上げマニュアル
スタートアップ立ち上げマニュアルスタートアップ立ち上げマニュアル
スタートアップ立ち上げマニュアル
 
ChatGPTの ビジネス活用とセキュリティ
ChatGPTのビジネス活用とセキュリティChatGPTのビジネス活用とセキュリティ
ChatGPTの ビジネス活用とセキュリティ
 
情報アーキテクチャ入門
情報アーキテクチャ入門情報アーキテクチャ入門
情報アーキテクチャ入門
 
位置情報にまつわるデータ補間技術
位置情報にまつわるデータ補間技術位置情報にまつわるデータ補間技術
位置情報にまつわるデータ補間技術
 
アクセンチュア株式会社採用案内 2022/03
アクセンチュア株式会社採用案内 2022/03アクセンチュア株式会社採用案内 2022/03
アクセンチュア株式会社採用案内 2022/03
 
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
分析のリアルがここに!現場で使えるデータ分析(1限目) 先生:吉永 恵一
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
Image interpolation
Image interpolationImage interpolation
Image interpolation
 
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
計量時系列分析の立場からビジネスの現場のデータを見てみよう - 30th Tokyo Webmining
 
仕事よりな自己紹介
仕事よりな自己紹介仕事よりな自己紹介
仕事よりな自己紹介
 
株式会社ディレクタス サービス紹介資料
株式会社ディレクタス サービス紹介資料株式会社ディレクタス サービス紹介資料
株式会社ディレクタス サービス紹介資料
 
マーケティング・戦略・組織視点のBIGDATA活用について
マーケティング・戦略・組織視点のBIGDATA活用についてマーケティング・戦略・組織視点のBIGDATA活用について
マーケティング・戦略・組織視点のBIGDATA活用について
 
深層強化学習と実装例
深層強化学習と実装例深層強化学習と実装例
深層強化学習と実装例
 
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
生成AI(ChatGPTなど)を使って実用性を高めるデザインシンキング(思考)入門
 
オントロジーとは?
オントロジーとは?オントロジーとは?
オントロジーとは?
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
 
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose EstimationDLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
DLゼミ: Ego-Body Pose Estimation via Ego-Head Pose Estimation
 
SIGNATE 産業技術総合研究所 衛星画像分析コンテスト 2位入賞モデルの工夫点
SIGNATE産業技術総合研究所 衛星画像分析コンテスト2位入賞モデルの工夫点SIGNATE産業技術総合研究所 衛星画像分析コンテスト2位入賞モデルの工夫点
SIGNATE 産業技術総合研究所 衛星画像分析コンテスト 2位入賞モデルの工夫点
 
k-means(k-平均法)
k-means(k-平均法)k-means(k-平均法)
k-means(k-平均法)
 

Similar to 03. artisocレシピブック ダイクストラ法を使って、最短経路を自動的に探索しよう

10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
Masaki Tamada
 
08. artisocレシピブック ダイクストラ法を高速化しよう
08. artisocレシピブック ダイクストラ法を高速化しよう08. artisocレシピブック ダイクストラ法を高速化しよう
08. artisocレシピブック ダイクストラ法を高速化しよう
Masaki Tamada
 
09. artisocレシピブック 3Dモデルを作成しよう
09. artisocレシピブック 3Dモデルを作成しよう09. artisocレシピブック 3Dモデルを作成しよう
09. artisocレシピブック 3Dモデルを作成しよう
Masaki Tamada
 
07. artisocレシピブック ポテンシャル法を高速化しよう
07. artisocレシピブック ポテンシャル法を高速化しよう07. artisocレシピブック ポテンシャル法を高速化しよう
07. artisocレシピブック ポテンシャル法を高速化しよう
Masaki Tamada
 
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
schoowebcampus
 
SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料
Tomoki Saito
 
Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)
Daiji Hirata
 
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
nagix
 
エンタプライズ領域のアジャイル開発の課題 - FIT2020
エンタプライズ領域のアジャイル開発の課題 - FIT2020エンタプライズ領域のアジャイル開発の課題 - FIT2020
エンタプライズ領域のアジャイル開発の課題 - FIT2020
Yusuke Suzuki
 
TPNet: Trajectory Proposal Network for Motion Prediction
TPNet: Trajectory Proposal Network for Motion Prediction TPNet: Trajectory Proposal Network for Motion Prediction
TPNet: Trajectory Proposal Network for Motion Prediction
Yuma Shinohara
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
openrtm
 
つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料
Koichi Hikawa
 
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
Daiji Hirata
 
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
ssuserf1df9a
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Recruit Technologies
 
C++ in Embedded Systems
C++ in Embedded SystemsC++ in Embedded Systems
C++ in Embedded Systems
kikairoya
 
JAWSUG 20210128
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128
陽平 山口
 
2014 07 23 豊橋IT勉強会
2014 07 23 豊橋IT勉強会2014 07 23 豊橋IT勉強会
2014 07 23 豊橋IT勉強会
Tom Hayakawa
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithms
cyberagent
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現AdvancedTechNight
 

Similar to 03. artisocレシピブック ダイクストラ法を使って、最短経路を自動的に探索しよう (20)

10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
10. artisocレシピブック a star探索アルゴリズムを使って、最短経路を自動的に探索しよう
 
08. artisocレシピブック ダイクストラ法を高速化しよう
08. artisocレシピブック ダイクストラ法を高速化しよう08. artisocレシピブック ダイクストラ法を高速化しよう
08. artisocレシピブック ダイクストラ法を高速化しよう
 
09. artisocレシピブック 3Dモデルを作成しよう
09. artisocレシピブック 3Dモデルを作成しよう09. artisocレシピブック 3Dモデルを作成しよう
09. artisocレシピブック 3Dモデルを作成しよう
 
07. artisocレシピブック ポテンシャル法を高速化しよう
07. artisocレシピブック ポテンシャル法を高速化しよう07. artisocレシピブック ポテンシャル法を高速化しよう
07. artisocレシピブック ポテンシャル法を高速化しよう
 
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
Google Maps APIを使って、自分好みの地図を作ろう 先生:川村 健一
 
SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料SIGSPATIAL 2020 参加報告資料
SIGSPATIAL 2020 参加報告資料
 
Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)
 
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
Mini Tokyo 3D − 交通デジタルツインとデジタルトランスフォーメーションの世界
 
エンタプライズ領域のアジャイル開発の課題 - FIT2020
エンタプライズ領域のアジャイル開発の課題 - FIT2020エンタプライズ領域のアジャイル開発の課題 - FIT2020
エンタプライズ領域のアジャイル開発の課題 - FIT2020
 
TPNet: Trajectory Proposal Network for Motion Prediction
TPNet: Trajectory Proposal Network for Motion Prediction TPNet: Trajectory Proposal Network for Motion Prediction
TPNet: Trajectory Proposal Network for Motion Prediction
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
 
つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料つくばチャレンジ2023シンポジウム 発表資料
つくばチャレンジ2023シンポジウム 発表資料
 
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
 
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
会社紹介・説明資料(カジュアル面談資料)_20230404.pdf
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
 
C++ in Embedded Systems
C++ in Embedded SystemsC++ in Embedded Systems
C++ in Embedded Systems
 
JAWSUG 20210128
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128
 
2014 07 23 豊橋IT勉強会
2014 07 23 豊橋IT勉強会2014 07 23 豊橋IT勉強会
2014 07 23 豊橋IT勉強会
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithms
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
 

More from Masaki Tamada

artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
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
 
第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)

artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
 
【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の教材】飛ぶ鳥モデルからボイドモデルへ
 
第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会
 
第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会
 

Recently uploaded

Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 

Recently uploaded (6)

Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 

03. artisocレシピブック ダイクストラ法を使って、最短経路を自動的に探索しよう

  • 1. http://www.kke.co.jp 株式会社 構造計画研究所 〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225 Copyright © 2015 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 03. artisocレシピブック ダイクストラ法を使って、最短経路を自動的に探索しよう 本ドキュメントについてのご質問、『複雑系勉強会』の お問合せは、下記までご連絡ください。 (株)構造計画研究所 社会デザイン・マーケティング部 artisocマーケティング担当 玉田 Tel: 052-222-8461 E-mail: tamada@kke.co.jp
  • 2. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 2 最短経路を探索しよう マップが複雑になると、歩く経路を指定することは手間がかかります。 ダイクストラ法を使って、自動的に最短経路を探索します。 ・歩行モデルの拡張 ① 「02. artisocレシピブック」のおさらい ② ダイクストラ法とは? ③ 歩行モデルの拡張 ④ Universeで計算ライブラリを初期化 ⑤ 複数の歩行者を生成 ⑥ 歩行者の行動ルールを変更 ⑦ 道路を拡張
  • 3. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 3 ① 「02. artisocレシピブック」のおさらい 「02. artisocレシピブック」で作成した道路に沿って歩くモデル 描画ツールで道路を作成していく方法、歩くモデルの動作原理について学びました。 「02. artisocレシピブック」で作成した歩くモデルの問題点と解決策 道路ネットワークが単純なときは手作業で経路を指定できますが、複雑になると大変面倒です。 そこでダイクストラ法を使って、最短経路を自動的に探索するモデルを作成します。 【Step1】 モデルの定義 • PointエージェントとLinkエージェントを定 義して、描画ツールの前準備をします。 • Personエージェントを定義して、指定し た経路で移動するアルゴリズムを定義し ます。 【Step2】 描画ツールで道路を定義 • 背景画像の道路に沿ってマウスクリックし て、ネットワークを定義します。 【Step3】 動きを確認 • 指定した順番にPointを通ってゴールにた どり着くことを確認します。
  • 4. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 4 ② ダイクストラ法とは? 下図のネットワークで、点0からのコストを算出します。(カッコ内は各リンクのコスト) 点0から各点への最短経路は、矢印の向きをたどることで求めることができます。 ダイクストラ法の詳細については、Wikipediaで調べてみましょう。 0 1 3 2 4 (3) (2) (7) (5) (6) (10) • Point:0に接続するリンク0→1, 0→2を抽出します。 • Point:1, 2のコストを算出します。 0 1 3 2 4 3 7 0 1 3 2 4 3 5 9 15 0 1 3 2 4 3 5 9 14 • Point:1に接続するリンク1→2, 1→3を抽出します。 • Point:2に接続するリンク2→1, 2→4を抽出します。 • Point:2のコストは、0→1→2を通っ た場合に最少となるので、5に更新 します。 • Point:3, 4のコストを算出します。 • Point:3に接続するリンク3→4を抽 出します。 • Point:4に接続するリンク4→3を抽 出します。 • Point:4のコストは、0→1→3→4を 通った場合に最少となるので、14に 更新します。
  • 5. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 5 ③ 歩行モデルの拡張(1) 交差点や端点の間のPointを束ねて、Streetで管理します。 描画ツールで定義したLinkの情報を元に、交差点や端点の間のLinkを束ねて、Streetを生成し ます。 「Point」と「Link」を拡張します。 「Point」に次の変数を追加します。 変数名: DijkstraValue :実数型 計算値を一時的に格納します。 変数名: ChoiceAgt :エージェント型 最短経路のリンクを一時的に格納します。 変数名: NearAgtSet :エージェント集合型 接続しているPointを格納します。 変数名: StreetAgt :エージェント型 属しているStreetを格納します。 「Link」に次の変数を追加します。 変数名: StreetAgt :エージェント型 計算値を一時的に格納します。 変数名: ReverseLinkAgt :エージェント型 逆方向のLinkを格納します。
  • 6. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 6 ③ 歩行モデルの拡張(2) 「Street」と「DijkstraStreet」を追加します。 「Universe」に「Street」エージェントを追加します。 Link情報から「Street」を生成して保持します。 変数名: Points :文字列型 属しているPointのID配列です。 変数名: Cost :実数型 コストを格納します。 変数名: ReverseStreetAgt :エージェント型 逆方向のStreetを格納します。 「Universe」に「DijkstraStreet」エージェントを追加します。 「DijkstraStreet」は、ダイクストラ法の計算結果を一時的に 格納します。 変数名: Route :文字列型 当該経路のPointのID配列です。 変数名: Value :実数型 当該経路のコストを一時的に格納します。 変数名: StreetRoute :文字列型実数型 当該経路のStreetのID配列です。
  • 7. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 7 ③ 歩行モデルの拡張(3) 「StreetBackup」、「PointBackup」、「TemporaryStreetAgtSet」の追加 「Universe」に「StreetBackup」エージェントを追加します。 ダイクストラ法で計算する際にStreetが分断されるため、 元の状態をバックアップします。 変数名: StreetAgt :エージェント型 該当するStreetを一時的に保持します。 変数名: Points :文字列型 属しているPointのID配列を一時的に保持します。 変数名: Cost :実数型 コストを一時的に保持します。 変数名: ReverseStreetAgt :エージェント型 逆方向のStreetを一時的に保持します。 「Universe」に「PointBackup」エージェントを追加します。 変数名: PointAgt :エージェント型 該当するStreetを一時的に保持します。 変数名: StreetAgt :エージェント型 属しているStreetを一時的に保持します。 「Universe」に「TemporaryStreetAgtSet」を追加します。 変数名: TemporaryStreetAgtSet :エージェント集合型 計算前に追加したStreetを一時的に保持します。
  • 8. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 8 ④ Universeで計算ライブラリを初期化 ダイクストラ計算ライブラリ「dijkstra.inc」を利用します。 ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。 「Univ_Init」で計算ライブラリを初期化します。 include “dijkstra.inc” Univ_Init{ initialize_dijkstra() } ・・・計算ライブラリを読み込む ・・・計算ライブラリを初期化する 【ダイクストラ法計算ライブラリの使い方】 • 「dijktstra.inc」は、ダイクストラ法で最短経路を探索するための計算ライブラリです。 • 計算ライブラリを利用するためには、Universeの先頭に「include “dijkstra.inc”」と記述し、「Univ_Init」で、 初期化のための関数「initialize_dijkstra()」を実行してください。 • 最短経路を取得するためには、「@dijkstra([始点のPointのID], [候補地のPointのID配列])」の形式で指 定します。
  • 9. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 9 ⑤ 複数の歩行者を生成 経路に沿って進み、目的地に到着したら新しい経路を設定します。 ツリーの「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 = @dijkstra(My.ID,CStr(nearPointAgt.ID)) personAgt.RouteCount = 1 Else personAgt.RouteArray = CStr(My.ID) personAgt.RouteCount = 0 End If End If } ・・・Point ID=0から、4人の歩行者を生成する ・・・隣接したPointへの最短経路を取得する (第2引数は文字列なので注意してください) ・・・隣接したPoinがない場合
  • 10. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 10 ⑥ 歩行者の行動ルールを変更(1) 経路に沿って進み、目的地に到着したら新しい経路を設定します。 新しい経路は2箇所の候補地をランダムで選択し、何れか経路長が短い方を選択します。 ツリーの「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の方向に進む
  • 11. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 11 ⑥ 歩行者の行動ルールを変更(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へ向かう ・・・目的地に到着したので、 新しい経路を設定する ・・・新しい経路を設定する
  • 12. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 12 ⑥ 歩行者の行動ルールを変更(3) Sub add_new_route(targetPointAgt As Agt) { Dim newTargetPointAgt As Agt Dim newTargetPointAgt2 As Agt Dim newRoute As String newRoute = “” newTargetPointAgt = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point))) newTargetPointAgt2 = Universe.Map.Point(CInt(Rnd() * CountAgt(Universe.Map.Point))) If ((targetPointAgt.ID <> newTargetPointAgt.ID) And (targetPointAgt.ID <> newTargetPointAgt2.ID)) And (newTargetPointAgt.ID <> newTargetPointAgt2.ID) Then newRoute = @dijkstra(targetPointAgt.ID, CStr(newTargetPointAgt.ID) & "," & CStr(newTargetPointAgt2.ID)) End If If Len(newRoute) > 0 Then My.RouteArray = My.RouteArray & "," & newRoute End If } ・・・2箇所の候補地をランダムで選択する ・・・2箇所の候補地のうち、経路長の 短い方の経路を返す ・・・2箇所の候補地とも到達できない 場合は””を返す
  • 13. http://www.kke.co.jpCopyright © 2004 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 13 ⑦ 道路の拡張 道路を拡張します。 ツリーの「Map」を右クリックして「初期値設定」を選択し、描画ツールを表示します。 道路ネットワークを自由に拡張してください。 03.model