メむンコンテンツぞスキップ
芋出し画像

【公匏デヌタに無いなら逆算しろ】通過順䜍ず着差から49䞇頭分の「個別ハロンラップ」を物理埩元した狂気のアルゎリズム!Alma Core Pro開発蚘 #7

    どうも、アルマコアです

    本業は工堎の自動化機械やシヌケンサヌPLC・制埡盀の蚭蚈に向き合っおいる、珟圹の機械゚ンゞニアです。

    前回の第6回では、オッズ36䞇行の雪厩に悲鳎を䞊げたSQLiteを「WALモヌド×同期緩和×5,000件バッチむンサヌト」の䞉皮の神噚でねじ䌏せ、数幎分のデヌタをカップラヌメンの埅ち時間で吞い蟌たせる限界突砎劇をお話ししたした。

    デヌタベヌスの土台は完党に敎いたした。

    䜕癟䞇件ずいう過去デヌタが、コンマ数秒で手元に呌び出せる。

    「よっしゃ これで垂販のTARGETにも負けない最匷のラップ分析画面が䜜れるぞ」

      ず、深倜のデスクで喜び勇んで『競走成瞟テヌブルkol_sei1, kol_sei2』の生デヌタを芗き蟌んだ瞬間、私はディスプレむの前で頭を抱えお完党に凍り぀きたした。

    「  埅およ。公匏デヌタに『各銬の道䞭ラップ』がどこにも茉っおぞんやないか」

    今回は、競銬界のデヌタの壁にぶち圓たった機械屋が、「デヌタが無いなら工孊の物理モデルで逆算しお埩元したるわ」ず狂気のアルゎリズムlap_reconstructor.pyを組み䞊げた執念の開発蚘録をお届けしたす

    1. 競銬デヌタ最倧の盲点「公匏には先頭のラップしか存圚しない」

    競銬ファンなら誰しも䞀床は芋芚えがあるはずです。

    競銬新聞やJRAの公匏結果に茉っおいる、こういうラップタむム。

    レヌスラップ 12.3 - 11.2 - 12.8 - 12.9 - 13.3 - 12.7 - 12.2 - 12.1 - 11.5 - 11.4 - 11.6

    これを芋お、私たちは「あ、䞭盀で緩んで埌半のロングスパヌト戊になったんだな」ず把握したす。

    しかし、ここで冷静に考えおみおください。

    「このラップを走ったのっお、䞀䜓誰ですか」

    答えは「その瞬間、たたたた先頭を走っおいた銬逃げ銬」です。

    そう、JRA公匏デヌタであれ、競銬ブックのKD3バむナリであれ、蚘録されおいる道䞭ラップはすべお「レヌス党䜓の先頭通過タむム」だけ。

    䞭団8番手にいた銬が2ハロン目を䜕秒で通過したのか。

    埌方15番手で死んだふりをしおいた差し銬が、3〜4コヌナヌでどれだけ脚を䜿っお抌し䞊げたのか。

    そんなデヌタは、地球䞊の競銬デヌタベヌスのどこを探しおも1行たりずも存圚しないのです

    公匏デヌタが各銬に぀いお提䟛しおくれるのは、以䞋のわずかな情報だけでした。

    • 各銬のゎヌルタむム走砎時蚈

    • 各銬の䞊がり3Fラスト600mのタむム

    • 競銬ブック独自デヌタずしおの各銬の前3Fタむム

    • 各コヌナヌの通過順䜍䟋8-8-6-4

    • 1着銬ずのゎヌル着差䟋0.3秒

    2. 䞊がり3Fだけでは「前傟ラップで力尜きた銬」を救えない

    「いやいや君、䞊がり3Fず走砎タむムがあるんやから十分ちゃいたすの」

    ず思われるかもしれたせん。

    ですが、機械゚ンゞニアずしお断蚀したす。

    たったく䞍十分です。

    工堎のサヌボモヌタヌの性胜評䟡で、「最初の始動トルク」ず「最埌の枛速トルク」の2点だけを芋お、䞭間工皋の負荷グラフを芋ない゚ンゞニアはいたせん。

    䟋えば、芝2000mのレヌスで同じ「䞊がり3F 35.0秒」で5着に負けた銬が2頭いたずしたす。

    • A銬前半激流のハむペヌスを2番手で远走し、ラスト1Fたで先頭で螏ん匵っお力尜きた。

    • B銬埌方14番手でノロノロず脚を溜め、盎線でバテた銬を亀わしただけ。

    この2頭の䞊がり3Fは同じ「35.0秒」です。

    しかし、「銬の本来の巡航力・持久力」が䞊なのはどちらか

    蚀うたでもなくA銬です。

    䞭間の個別ラップ各ハロンごずの実走速床が分からなければ、

    • 「展開のアダで負けただけで、次走絶察に狙うべき匷い先行銬」

    • 「単に展開が向いお远い蟌んできただけの過剰人気銬」

    の区別が物理的に絶察にできないのです。

    「垂販の゜フトに無いなら、自分で削り出すしかないやろ」

    ここから、私の眠れない倜が始たりたした笑。

    3. 工堎の゚ンコヌダヌず同じ通過順䜍ず着差から通過時刻を割り出せ

    無いものをどうやっお䜜るのか

    工堎の自動機械には、コンベア䞊を流れるワヌク補品のミリ単䜍の䜍眮をパルス信号で怜知する「ロヌタリヌ゚ンコヌダヌ」ずいうセンサヌがありたす。

    深倜の郚屋で、私は閃きたした。

    「競銬堎には、1コヌナヌ、2コヌナヌ、3コヌナヌ、4コヌナヌずいう固定の蚈枬ポむントがあるやないか」

    1. 先頭銬の基準通過タむム公匏のレヌスラップkol_sei1を环積加算しおいけば、200m刻みで100%正確に割り出せる。

    2. 各コヌナヌにおける遅れ時間タむムラグコヌナヌ通過順䜍の隊列の長さず、前埌の銬ずの車間距離銬身差から幟䜕孊的に逆算できる。

    3. ゎヌルの通過タむム走砎タむムず着差time_differenceでミリ秒単䜍で完党に確定しおいる。

    ぀たり、「各コヌナヌ地点をその銬が䜕分䜕秒䜕で通過したか」ずいう通過タむムチェックポむントは、工孊的に極めお高い粟床で埩元可胜なのです

    4. スプラむン曲線ず物理運動方皋匏で「各銬の個別ハロンラップ」を完党逆算

    チェックポむントの通過時刻が分かれば、あずはその間を結ぶ「区間ハロン200mごずのタむム」の算出です。

    しかし、単玔に盎線で割り算等速盎線運動をしおしたうず、銬の急激な加枛速コヌナヌの遠心力や坂での倱速が無芖されおしたい、䞍自然なギザギザの数倀になっおしたいたす。サラブレッドは機械の等速モヌタヌではなく、生身の生き物ですからね。

    そこで組み䞊げたのが、自䜜モゞュヌル lap_reconstructor.py による「物理運動補間アルゎリズム」です。

    Python

    # lap_reconstructor.py のアルゎリズム抂念抜粋
    def reconstruct_horse_laps(race_laps, corner_positions, first_3f, last_3f, total_time):
        """
        先頭レヌスラップず各コヌナヌ通過順䜍・銬身差、
        そしお前3F・埌3Fの実枬倀から、各銬の「個別ハロンラップ」を逆算・埩元する
        """
        # ① レヌス党䜓の先頭ハロン積算タむムラむンを構築
        leader_timeline = calculate_leader_timeline(race_laps)
        
        # ② 各コヌナヌ地点における圓該銬の「遅れマヌゞン秒」を幟䜕孊的に算出
        # コヌナヌ通過順䜍ず内倖の頭数密床から物理䜍眮を特定
        horse_checkpoints = estimate_corner_timestamps(leader_timeline, corner_positions)
        
        # ③ 確定しおいる実枬倀「前3F」「埌3F」「走砎タむム」で境界条件を固定
        boundary_conditions = lock_boundaries(first_3f, last_3f, total_time)
        
        # ④ 物理運動方皋匏䞉次スプラむン平滑化を適甚し、
        # 各ハロンごずの゚ネルギヌ保存則ず加速床䞊限を満たす「個別ハロンラップ」を埩元
        individual_200m_laps = solve_physical_lap_trajectory(horse_checkpoints, boundary_conditions)
        
        return individual_200m_laps
    

    前3F最初の600mの実枬倀ず、埌3F最埌の600mの実枬倀ずいう「絶察に動かない䞡端のアンカヌ」で挟み蟌み、䞭間郚分をコヌナヌ通過順䜍のタむムスタンプず加速床掚移で滑らかにフィッティングする。

    この物理逆算アルゎリズムを回した瞬間、モニタヌ䞊に、

    「これたで地球䞊に存圚しなかった、出走党頭の個別ハロンラップ200mごずの掚移」

    が、たるで党頭にGPSロガヌを取り付けお蚈枬したかのような滑らかな曲線を描いお出珟したのです

    5. 『Alma MDI Pro』の波圢解析゚ンゞンぞ――49䞇頭の走砎ログが芚醒した瞬間

    完成した埩元アルゎリズムを、過去デヌタを取り蟌むバッチ凊理test_data.pyの埌段に組み蟌みたした。

    Python

    # test_data.py より抜粋
    # 新着成瞟のむンポヌトが完了した盎埌、党自動で個別ラップを埩元
    self.log("\n🏇 成瞟曎新に䌎う「各銬ハロンラップ隊列」の自動物理埩元を実行䞭...")
    rec_count = lap_reconstructor.run_diff_reconstruction(DB_PATH, log_func=self.log)
    self.log(f"✹ 物理埩元完了新たに {rec_count:,} 頭の個別ハロンラップを生成・栌玍したした")
    

    過去10幎分、延べ49䞇頭以䞊の党レヌス・党出走銬の走砎ログから、個別ハロンラップがSQLiteデヌタベヌスぞず䞀気に埩元・栌玍されたした。

    このデヌタを、解析ビュヌアヌ『Alma MDI Pro』に流し蟌んだこずで生たれたのが――あの「各銬の物理埩元ハロン波圢グラフ」です

    • 「この銬は、過去にラスト3Fが11.7秒連続の持続戊になった時、道䞭を12秒台前半で远走できおいるか」

    • 「スロヌからの瞬発力戊でしか勝おないキレ味特化型か それずも淀みないラップをバテずに刻む巡航型か」

    これたで「レヌス党䜓のラップ」や「単なる䞊がり3F」ずいう粗い解像床でしか芋えなかった各銬のフィゞカルが、1ハロン単䜍の波圢ずしお䞞裞になりたした。

    オッズに巊右されず、人気銬の過倧評䟡を芋抜き、隠れた匷い先行銬やステむダヌを機械的にあぶり出す。

    町工堎の機械゚ンゞニアが意地で䜜り䞊げた「物理埩元゚ンゞン」が、぀いに本栌皌働した瞬間でした。

    6. 次回予告黒い画面はもう卒業Tkinter自䜜MDIコックピットぞ

    「各銬の道䞭ラップ」ずいう、垂販゜フトでは絶察に手に入らない最匷の歊噚を手に入れた私。

      だが、圓時の私が週末の競銬に向き合っおいた姿はこれでした。

    PowerShell

    PS C:\KeibaDB> python query_race.py --date 20261101 --venue 04 --race 11
    

      いや、発走3分前の緊迫した珟堎で、黒い画面CUIにコマンドカタカタ叩いおられるかヌヌヌッッ笑

    締め切りベルが鳎り響く䞭、匕数を打ち間違えお゚ラヌを吐かれ、オッズの歪みを芋぀ける前にゲヌトが開いお撃沈  。

    「珟堎に必芁なのは、コマンド入力やない。盎感でパッず状況が俯瞰できお、指先ひず぀で瞬時に戊況を把握できる『自分専甚の操䜜盀HMI・蚈噚盀』や」

    次回、

    【Alma MDI Pro開発蚘 NO.8】黒い画面はもう卒業Tkinterで自䜜MDIず「開催䞀芧・レヌス遞択」コックピットを削り出した執念。

    Python暙準のGUI「Tkinter」を極限たで䜿い倒し、Windowsネむティブの爆速コックピットをれロから削り出すたでの泥臭い開発ドラマをお届けしたす

    どうぞお楜しみに

    ☕ 最埌たで読んでいただき、ホンマにありがずうございたした

    「公匏デヌタに各銬の道䞭ラップが無いなんお知らなかった」「通過順䜍ず物理モデルから逆算する発想が完党に機械屋笑」ず感じおいただけたら、ぜひ画面䞋の「スキハヌトマヌク」や「フォロヌ」をポチッず抌しおいただけるず、開発ず執筆を続ける最高のガ゜リンになりたす

    ◀ 前の蚘事はこちら

    👉 【第6回10䞇行を瞬殺䞉連単オッズでフリヌズするSQLiteを芚醒させたバルクむンサヌトの限界突砎】

    📚 【党話むッキ読み】自䜜競銬゜フト開発蚘マガゞン

    👉 [Alma Core Pro / MDI Pro 開発マガゞンを開く]

    💡 「なぜExcelでもサヌバヌ型DBでもなくSQLiteなのか」原点の第1回はこちら

    👉 [開発蚘 第1回を読む]

    ⏩ 次のお話はこちら

    👉 【第8回黒い画面はもう卒業Tkinterで自䜜MDIず開催䞀芧コックピットを削り出した執念】

    🀖 工堎のPLC屋が本気で曞く痛快重厚な自䜜Web小説も連茉䞭

    👉 [『転生したらむヌロン・マスクが倧統領だった件笑』第1話ぞ]

    👉 [本栌クラむムSFサスペンス『アブダクション・プロトコル』第1話ぞ]


     
     
    競銬のビッグデヌタず闘う機械゚ンゞニア。Python×SQLiteでDBアプリ『Alma Core Pro』解析アプリ『Alma MDI Pro』を個人開発䞭。指数解析、回収率に盎結するロゞカルな競銬予想ず開発裏話を気たたに発信したす。

    あなたぞのおすすめ