
ãå ¬åŒããŒã¿ã«ç¡ããªãéç®ãããééé äœãšçå·®ãã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ã³ãŒããŒãšããåºå®ã®èšæž¬ãã€ã³ããããããªããïŒã
å é 銬ã®åºæºééã¿ã€ã ïŒå ¬åŒã®ã¬ãŒã¹ã©ããïŒkol_sei1ïŒã环ç©å ç®ããŠããã°ã200må»ã¿ã§100%æ£ç¢ºã«å²ãåºããã
åã³ãŒããŒã«ãããé ãæéïŒã¿ã€ã ã©ã°ïŒïŒã³ãŒããŒééé äœã®éåã®é·ããšãååŸã®éЬãšã®è»éè·é¢ïŒéŠ¬èº«å·®ïŒãã幟äœåŠçã«éç®ã§ããã
ãŽãŒã«ã®ééã¿ã€ã ïŒèµ°ç Žã¿ã€ã ãšçå·®ïŒ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話ãž]