■ はじめに

前回、仕様書と僕の頭で混ざっていた強化学習と模倣学習をChatGPTさんの力を借りて分離しました。

今回こそは、都市型マップの自動生成に進みたいと思います。

目標とするのは、

①ロジックでマップを自動生成する
②100枚程度自動生成したら、それで強化学習。
③エージェントの宅配結果からマップ難易度調整
 (A,B,C,受のA*結果調整、信号・道の数等)

です。ちょっと、シムシティ寄りですかね。

ちなみに、今回の目標は①のみになります。。
②③は次回以降の課題です。




■意外な伏兵、交差点

交差点をマップに合わせて表現しようとすると、

・南北と東西に走る道の交差する点にできる
・横断歩道がかかっている
・信号が道を挟んで対向に設置

しかし、実際に仕様書をこの様に書くと、道の交点に横断歩道を書いてしまい信号がどこを示すか分かりづらいです。

こんな感じ↓

■■・・◆◆◆◆・・■■
・・・②####・・・・
・・・①####②①・・
◆◆##◆◆◆◆##◆◆
◆◆##◆◆◆◆##◆◆
◆◆##◆◆◆◆##◆◆
◆◆##◆◆◆◆##◆◆
・・①②####①・・・
・・・・####②・・・
■■・・◆◆◆◆・・■■

マップ例に従うとこうなります↓

■■・②####・・■■
・・・・◆◆◆◆・・・・
・①・・◆◆◆◆・・・①
##◆◆◆◆◆◆◆◆##
##◆◆◆◆◆◆◆◆##
##◆◆◆◆◆◆◆◆##
##◆◆◆◆◆◆◆◆##
①・・・◆◆◆◆・・①・
・・・・◆◆◆◆・・・・
■■・・####②・・■■

ここで、
◆ = 道
# = 横断歩道
①② = 信号
とします。

道と横断歩道の場所がオフセットしています。
このオフセットの表現が、さりげなく難しいです。
言葉を探して見ますが、適正な言い方が見つかりません。

という事で、交差点の場所を直接指定します。

=========================================

・縦貫通道路と横貫通道路は、4×4コマの道(◆)
 で交わり、交わった4×4の左上を(row,col)として
 以下の位置を示す

・横断歩道は次の位置にある

 左上(row ,col-4)-右下(row+3,col-3)
 左上(row,col+6)-右下(row+3,col+7)
 左上(row-4,col)-右下(row-3,col+3)
 左上(row+6,col)-右下(row+7,col+3)

・次の4箇所に信号「①」を設置する

 (row-1,col-3) (row+4,col-4)
 (row-1,col+7) (row+4,col+6)

・次の4箇所に信号「②」を設置する

 (row-4,col-1) (row-3,col+4)
 (row+6,col-1) (row+7,col+4)

=========================================

ここまで、指定するとなんとかイメージ通りにする事が出来ます。

■人を配置してエージェントの動きを確認

マップ自動生成が力技ながら出来たので、人配置と回避信号ストップ等を入れてみました。

(GitHubリンクは、このままGoogleの検索窓)
github.com/logicmaker256-prog/Automatic_Map_Generation/blob/main/auto_map.py

正常には動作するのですが、見た目の変化がないので(細く見ると変化はあるが…)、同じ様なマップばかりで面白くありません。

マップに変化を持たせたいところです。

■結果:

マップ自動生成の仕様書がコチラ
(GitHubリンクは、このままGoogleの検索窓)
github.com/logicmaker256-prog/Automatic_Map_Generation/blob/main/auto_map.txt

今回のマップ生成については仕様書の下に追加仕様として入っています。

今回の宅配問題を検討し始めた頃は、まさかマップ生成をやる事になるとは、予想もしていなかったことです。

この後マップ学習をやっていきますが、同じ様な事になりそうです。

困ったもんだ。

■ 今回の学び:

今回の学びは、若干不本意ながら

「言葉でうまく表現できないならば、座標で示す」

ですかね。これのおかげでイメージ通りの交差点を生成できました。

ではなぜ不本意かというと、これに頼り過ぎると仕様書が座標指定だらけになります。

こうなると、可読性が凄く悪くなってバグを作る原因になるからです。

座標指定は、最後の手段にして、先ずは正しい言葉を探すことをオススメします。

■まとめ

今回は、マップ生成の基礎の『キ。』

なので、
「マップを自動で作ったよ。マップはあんまり変わらんけどね」
です。

このままでは、見た目良くないし、難易度の変更も難しいです。

次回はマップにもう少し変化をつけたいと思います。