ボートレースAIを安全に動かすため、途中失敗でもデータを残さない仕組みを作りました

ボートレースAI開発

ここまでの開発で、ボートレース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へ進めるかを判断していきます。

前回:ボートレースAIのテスト結果と本番成績を分ける仕組みを作りました

コメント

タイトルとURLをコピーしました