ベンチマーク

手法を比べるには、同じ問題で測る必要があります。MAPF の研究では Moving AI Lab が配布するマップとシナリオが事実上の標準になっています。

大規模ベンチマークは同梱していません

配布条件とリポジトリのサイズを考え、Moving AI のマップ・シナリオはここに含めていません。 配布元から取得して、シミュレータへ読み込んでください。

Moving AI Lab — MAPF Benchmarks

読み込める形式

形式内容状態
.mapMoving AI のマップ。. G S が通行可パーサ実装済み
.scenMoving AI のシナリオ。開始・目標の対と最適経路長パーサ実装済み
独自 JSON本サイトのシナリオ形式。マップ・エージェント・タスク・ルール・seed を含むシミュレータで import / export 可

.map / .scen のパーサは実装済みですが、 シミュレータ UI からのファイル読み込みは JSON のみ対応です。 Moving AI ファイルの UI 読み込みは今後の課題です。

独自 JSON の形式

{
  "formatVersion": 1,
  "id": "example",
  "name": "例",
  "kind": "one-shot-mapf",
  "width": 4, "height": 1,
  "map": ["...."],
  "agents": [
    { "id": "a1", "start": [0, 0], "goal": [3, 0] },
    { "id": "a2", "start": [3, 0], "goal": [0, 0] }
  ],
  "rules": {
    "goalBehavior": "stay",
    "forbidEdgeSwap": true,
    "forbidFollowing": false,
    "allowDiagonal": false
  },
  "seed": 1
}

map は 1 行 1 文字列で、. が通行可、それ以外が壁です。 ルールを既定から変えた場合はrules に保存されるため、 後から見ても前提が分かります。

組み込みのテストケース

シミュレータには小さなプリセットを用意しています。挙動の確認と、説明用の最小例です。

名前ねらい
Open Grid壁のない 12×12。基本動作の確認用。
Narrow Corridor幅 1 の通路。正面衝突が必ず起きる。回廊対称性の説明に使う。
Rooms4 部屋を狭い出入口でつないだ配置。ボトルネックが分散する。
Cross十字路。中央で 4 方向が競合する。
Warehouse棚を並べた倉庫風。MAPD の説明に使う想定の骨格。
Random Obstaclesseed で決まるランダム障害物。同じ seed なら同じ配置になる。
Swap Conflict1 本道で 2 体が入れ替わる最小例。退避用のくぼみが 1 つだけある。個別に計画すると edge-swap conflict が起きるが、待避すれば解ける。
Bottleneck1 マスの隘路を多数のエージェントが通る。優先順位の影響が見える。
TAPF: 匿名(1 チーム)4 体が 1 チーム。どの target へ誰が行ってもよい。チームが 1 つなので匿名 MAPF と同じ。
TAPF: 割当が効く例1 チーム 2 体。並び順どおりに割り当てると経路が交差するが、入れ替えれば真っすぐ行ける。解いた結果の割当が並び順と違うことを確かめる用。
TAPF: 2 チーム2 チーム × 2 体。チーム内では交換可能、チームをまたいだ交換は不可。両チームとも並び順とは違う割当が最適になる。
MAPD: well-formed通路の上下に pickup / delivery、左右の袋小路に parking。Definition 1 の 3 条件を満たす。
MAPD: well-formed でない例退避できる場所がエージェント数より少ない。条件 (b) を満たさないので TP の保証の対象外。
MAPD: タスクの奪い合いが効く例遠い agent が取ったタスクを、あとで空いた近い agent が奪えると得をする。TP と TPTS の差が出る。
MAPD: 退避しないと詰まる例配達地点が通路の途中にある。手が空いた agent をそこへ置いたままにすると後続を塞ぐ。endpoint 規律の有無で差が出る。
MAPD: capacity 21 体の agent が同時に 2 件まで運べる。capacity を 1 に戻したコピーと経路・TTD を比較できる。
MG-MAPD: multi-goal1 件の task が pickup 後に 2 つの delivery goal を順に訪れる。

シミュレータで試す →