Skip to content

Takahiro55555/a-star-maze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

a-star maze

これは何?

a-star アルゴリズムを利用し、最短経路を探索するプログラムです。

csvファイルからマップを読み込みます。 ファイル名やスタート地点、ゴール地点はプログラム実行時にコマンドラインから対話的に設定します。

新たにマップを作成し、読み込ませることも可能です。

Python3.6での動作を確認しています。

ファイル構成

.
├── README.md
├── a_star.py    # AStarクラスの実装
├── maze.py      # メインプログラム
├── node.py      # Nodeクラスの実装
├── status.py    # Statusクラスの実装
├── map.csv      # デフォルトで読みこまれるマップデータ
├── world01.csv  # (1, 1)、(6, 5)をそれぞれスタートとゴールに設定した際、複数経路存在する
└── world02.csv  # (1, 1)、(6, 5)をそれぞれスタートとゴールに設定した際、経路が一つしかない

実行方法

1. リポジトリをCloneする(初回のみ)

$ git clone https://github.com/Takahiro55555/a-star-maze.git
$ cd a-star-maze

2. プログラムを実行

指示に従って入力してください

※)マップの見方と座標

[??]が一つのタイル(床)で、任意の座標が割り当てられています。 基本的に初期マップは以下の2種類のタイルで構成されています。

タイル 説明
[||] 壁、障害物
[ ] 移動可能なタイル(移動コスト:1)

また座標を入力する際、壁を無視します。 左上の座標が(1, 1)で、横がX軸、縦がY軸です。

以下の例では、スタートを左上の(1, 1)、ゴールを右下の(3, 3)に設定しています。

障害物をスタートやゴールに設定しないでください。予期せぬ動作を引き起こします。

$ python3 maze.py
# 読み込むファイル名を入力してください(何も入力しない場合はmap.csvの読み込みを試みます)
file_name: map.csv
size: [8, 8]

[||][||][||][||][||][||][||][||][||][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]
# スタートの位置を空白区切りで入力してください(X, Yの順)
1 1
# ゴールの位置を空白区切りで入力してください(X, Yの順)
3 3
# 使用するヒューリスティクス関数を以下の番号から指定してください
#     0: calc_euclidean_distance
#     1: calc_manhattan_distance
#     2: all_0
1
[以下略]

3. 実行結果の見方

以下の実行結果は、スタート地点の座標を(1, 1)、ゴール地点の座標を(3, 3)に設定したものです。

これにより、各ステップごとの探索の様子を確認することができます。

表示されている各データに関しては以下の表を参考にしてください。

ラベル名 説明
heuristics_name ヒューリスティクス関数名(ソースコード中の関数名と一致)
start スタート地点の座標
goal ゴール地点の座標
round 探索回数(注目ノードが変更される度に更新される)
open_nodes_cost 現在オープンとなっているノードのコスト(実コスト + 予測コスト)を昇順に並べたもの
result 探索の成否(成功時:success、失敗時:failed)
route スタートからゴールまでの最短経路をタイルの(探索失敗時も表示される)

表示されているマップの見方に関しては以下の表を参考にしてください。

タイル 説明
[||] 壁、障害物
[ ] 移動可能なタイル(移動コスト:1)
{SS} スタート地点
{GG} ゴール地点
[@@] スタート地点から注目ノードまでの最短経路を表す
[??] OPEN状態のノードを表し、??の部分はそのノードのコスト(小数点以下切捨)
[XX] CLOSED状態のノードを表す

以下実行例

heuristics_name: calc_manhattan_distance
start: [1, 1]
goal: [3, 3]
round: 1
open_nodes_cost: [4, 4]
[||][||][||][||][||][||][||][||][||][||]
[||]{SS}[ 4][  ][  ][  ][  ][  ][  ][||]
[||][ 4][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ]{GG}[  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]

round: 2
open_nodes_cost: [4, 4, 4]
[||][||][||][||][||][||][||][||][||][||]
[||]{SS}[@@][ 4][  ][  ][  ][  ][  ][||]
[||][ 4][ 4][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ]{GG}[  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]

round: 3
open_nodes_cost: [4, 4, 4, 6]
[||][||][||][||][||][||][||][||][||][||]
[||]{SS}[@@][@@][ 6][  ][  ][  ][  ][||]
[||][ 4][ 4][ 4][  ][  ][  ][  ][  ][||]
[||][  ][  ]{GG}[  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]

round: 4
open_nodes_cost: [4, 4, 6, 6, 6]
[||][||][||][||][||][||][||][||][||][||]
[||]{SS}[@@][@@][ 6][  ][  ][  ][  ][||]
[||][ 4][ 6][@@][ 6][  ][  ][  ][  ][||]
[||][  ][  ]{GG}[  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]

round: 5
open_nodes_cost: [4, 6, 6, 6, 6, 6, 6]
[||][||][||][||][||][||][||][||][||][||]
[||]{SS}[@@][@@][ 6][  ][  ][  ][  ][||]
[||][ 4][ 6][@@][ 6][  ][  ][  ][  ][||]
[||][  ][ 6]{GG}[ 6][  ][  ][  ][  ][||]
[||][  ][  ][ 6][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][  ][  ][  ][  ][  ][  ][  ][  ][||]
[||][||][||][||][||][||][||][||][||][||]

result: success
route: [1, 1], [2, 1], [3, 1], [3, 2], [3, 3],

参考記事

よくわかるA*(A-star)アルゴリズム (Unity2Dのサンプルコードつき)

About

a-starアルゴリズムで経路探索を行うプログラム

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages