ここまでの開発で、ボートレースAIは自動で対象レースを選び、指定時刻に予想し、PURCHASE / SKIPを保存できるようになりました。
さらに前回は、テスト結果と正式成績を混ぜないために、campaignとSHADOWという仕組みも追加しました。
次に取り組んだのは、もし処理の途中で失敗しても、中途半端なデータを残さないことです。
正式運用用の処理経路を作り直した
正式Forward Testに向けて、新しく正式運用用のexecutorを用意しました。
executorは、AI予想から判定結果の保存までを実際に動かす本体部分です。
対象レースを選ぶ
↓
指定時刻に起動
↓
campaignを確認
↓
AI予想
↓
PURCHASE / SKIP判定
↓
結果をDBへ保存
一番怖いのは「半分だけ保存される」こと
途中エラーが起きると、「実行記録だけある」「判定だけない」といった状態になる可能性があります。
そこで今回は、これらをまとめて1回の処理として保存するようにしました。
途中で失敗したら全部なかったことにする
今回使っているのが、データベースのtransactionという仕組みです。
全部正常に保存できた
→ 保存を確定
途中で1つでも失敗した
→ その処理で保存したものを全部取り消す
成功したら全部保存、失敗したら全部戻すようにしています。
わざとエラーを起こして確認
Temp DBを使い、保存途中の4か所で意図的にエラーを発生させました。
結果は4ケースすべてで、partial row = 0となりました。
つまり、途中で失敗しても、一部のデータだけ残ることはありませんでした。
SHADOWの結果は正式成績に入れない
AI予想
↓
PURCHASE / SKIP保存
↓
SHADOWとして記録
↓
正式KPIには入れない
プログラム自体も固定
正式運用に向けて、どのプログラムで動かしたか分からなくならないように、プログラムのSHA-256も固定しました。
これは、「この時点では、このプログラムを使っていました」と確認できる指紋のようなものです。
現在は自然起動待ち
Stage 5.8をSHADOW用として再登録しました。設定は毎日06:35 JST、RunAtLoad=false、KeepAlive=falseです。
登録後に手動起動やkickstartはしていません。
次は8月23日の自然起動で、SHADOWとして正しく保存され、正式成績に混ざっていないかを確認します。
まとめ
今回の開発では、予想精度を上げる変更はしていません。
取り組んだのは、途中で失敗しても、データを壊さないための仕組み作りです。
次はSHADOW状態での自然運転を確認し、正式Forward Testへ進めるかを判断していきます。


コメント