■ はじめに
前回、人配置と回避アルゴリズムのデバッグでブログの公開も危うかったと言う話しをしました。
まさかブログ公開予定日にバグがみつかる事件があったり、そのバグが全く取れんかったり大変でした。
今回は、
①配送先パターンを替えて届ける
②信号を動かす
ことをやります。
ここまで行くとひとまずロジックが完成しますので、張り切ってまいりましょう。
■ 配送順序を変えるには…
宅配でありそうな話として、
「この荷物、重いから早めに渡してしまおう」作戦使います。
実際は、こんな事はないと思いますが数式化すると、
【重さのペナルティ】×【持ち運び距離】
ここで、始めと終わりは「受」固定
配送先はA,B,Cの3つなので、組合せは、
受→A→B→C→受 受→A→C→B→受
受→B→A→C→受 受→B→C→A→受
受→C→A→B→受 受→C→B→A→受
の6つ。
たいした数ではないので、全数組合せチェックを行います。
更にこの距離はマップ依存なのでマップを読み込み次第、A*で距離決定して後はこれを使い回すことで、計算量を減らします。
A*は計算コストが高いので、地味に効く手です。
■信号を動かすと、マップも変えたくなる件
信号は、特に工夫が必要無いし、実装もそんなに大変でないはず。
…そう考えていた事が私にもありました。
ここにもしっかりバグがいました。
赤信号で信号待ちをしている時、
◆◆##◆◆
◆◆##◆◆
◆◆▲#◆◆←エージェントがここ
・・・・・・
と、信号機とエージェントが重なって、横断歩道にはみ出している様に見えます。
これに対してコードで対策する手もありますが、いらん縛りを入れるよりはと思い切ってマップを変えました。
◆◆##◆◆
◆◆##◆◆
◆◆##◆◆
・・▲・・・←信号をズラしました
相変わらず、信号に重なりますが、横断歩道前で待っている様になりました。
将来的に信号の種類や数が増えることを考えると、コードを直すより、マップ側を直したほうが将来拡張しやすいですね。
■結果:
今回入れた配送ルートを変えるルーチンと信号動作を入れた仕様はこうなりました。
いつものようにGoogleの検索窓などに、以下のアドレスを入れてね。
github.com/logicmaker256-prog/delivery_logic/blob/main/delivery_logic.txt
手違いで学習の項が入りましたが、今回は未実装です。
この仕様をChatGPTさんに渡して、コーディングして貰いました。
ChatGPTさんの確認コード↓
github.com/logicmaker256-prog/delivery_logic/blob/main/delivery_logic.py
ChatGPTさんに渡しやすい様にアスキーマップの出力になってます。
そろそろGifアニメにした方がいいですかね?
■ 今回の学び:
今回の学びは、ズバリ!
「そのバグ、コードで直しますか?仕様でなおしますか?」
ですね。
もちろん、エラーとかバグの修正の基本はコードで直すですが選択肢の1つとして憶えておくのも大事ですね。
■まとめ
今回の実装でようやく教師データを作れました。やっと学習に入れます。
「全部ロジックで出来たら学習はいらないのでは?」
と思った人、鋭い!
このコードと仕様で満足して、
「次、何作ろうかな?」
でも十分だとは思いますが、
「これ使って、模倣学習をやってみたい」
とか、
「ゴミをばらまいて、エージェントか次いでに掃除する様にしたい」
とか思う人、もう少しお付き合い下さい😊
と言うわけで次回から学習編になります。
