2026/04/18

ひたすらコーディング

連日コーディングに明け暮れてます。最近はCopilotだけではなくGeminiも以前と比べやり取りが増えてます。そもそもどちらもAIなんですが、それぞれの企業の味が出てるって事なのかは分かりませんが、どちらも同じネット上の情報を元にしているにしては結構違いがある。

ああっ、前にGeminiに移行を考えてChromeへの乗り換えも検討した時に垂直タブ未対応で断念したChromeに確か最近垂直タブが実装されたようだけど、まだ試してないな。今はそんな余裕が無いってのもありますけどね。

モデル学習が壁にぶち当たってる感が半端なくて、まあそりゃ昨年8月辺りからだから、下手すれば1年経ってしまいそうな危機感で色々とやってきてました。で、たどり着いたのが今の作業です。ここまで基本3つの学習モデルに予想を託してきました。

  • 新馬戦用走破タイム予測
  • 通常用走破タイム予測
  • 順位予測(上記走破タイムを使用)

しかし、ここ最近ってか昨年8月から行っている作業ではRMSE 1.4の壁どころか1.45辺りにも壁が出来た感じがしてたんですよ。そこでまあ色々と試してきました。ここ最近はUbuntuでの学習とかね。でも、それも良い結果は得られず初心に帰った訳じゃないけど、そもそものAutoMLの使い方の改善。いや、実際にはML.NETのバージョンアップ関連での改善なのか改悪なのかは不明だけどRMSE 1.38とかは幻と化した。CopilotにもAutoMLの使い方の改善を相談したり、Geminiにも同様に相談した。

そんな中でGeminiがそもそも走破タイムの予測自体がAI的(AutoML)に限界まで改善はしての結果だから予測を変えた方が良いのでは?って提案をしてきたんです。それが相対タイム。その実装でひたすらコーディングしてるんですが、ここ数日、厳密には水曜日辺りからその学習用CSV出力をまず取り掛かって一応これまで同様にCKの有無で2種類。で、その過程でこれまでの走破タイム予測モデルの学習用CSV出力を参考にちょっと変えれば出来る話なのでと思いながら、でも、これってこれまで2~3時間掛かる処理だったけど、これも最適化しておいてからマネして作る方が無難と判断。巨大化した機械学習用のクラスを分割して

internal class MLTime : IDisposable

としてたクラスを

public partial class MLTime : IDisposable

として、追加するクラスを

public partial class MLTime

としながらプロパティやメソッドをそちらに分けて書く。なんとなく、自分的に分かりやすくする為に元々"MLTime.cs"ってファイル名だったので、追加のクラスのファイル名は"MLTime.SouhaCKCsv.cs"とする事で同じクラスだと認識しやすくしてみた。

で、Copilotに振り回され木曜夜は0時過ぎまで、昨夜はってか今朝方3時までやっても上手く動かず、今朝も朝からやって、いや、ほぼマジでCopilotに切れて文句言いながら修正させてたどり着いたのが15分ちょっとで2004年から2024年までの21年分出力が可能になった^^ まあ、先日もフルセットアップが改善して1時間掛からなくなったりしてたので期待はしてたけど、今朝やっとコンパイルエラーとか諸々なくなり走らせてみると終了予想が2,000分以上とかで、Copilotに「やっと走ってるっていうより、老人が歩いてるよ」って言いながらたどり着けた結果です。

自分自身はあまり理解してないけど、新たなC#の技法(いや、単に自分が知らないだけなんだが)は

// CK 用:列インデックス → SCSrc の PropertyInfo
private bool _ckMapInitialized;
private Action<SCSrc, int>[] _ckSetters;

を定義しておいて

    private string ColumnToProperty(string col)
    {
        // 例: "D2428C1" → "D2428Chaku1"
        //     "J01T3"   → "J01TChaku3"
        //     "KT5"     → "KTChaku5"

        // 数字部分を抽出(末尾の数字が着順)
        int len = col.Length;
        int pos = len - 1;

        // 末尾の数字を探す
        while (pos >= 0 && char.IsDigit(col[pos]))
            pos--;

        // col = prefix + number
        string prefix = col.Substring(0, pos + 1);   // 例: "D2428C"
        string numStr = col.Substring(pos + 1);      // 例: "1"

        // prefix の末尾が 'C' なら削除(D2428C → D2428)
        if (prefix.EndsWith("C"))
            prefix = prefix.Substring(0, prefix.Length - 1);

        // プロパティ名は prefix + "Chaku" + number
        return prefix + "Chaku" + numStr;
    }

これはまあ特になんじゃなく単に今回のASでの定義してる名前を処理しやすくする為とかでCopilotに言われて入れたけど、実際の使い方は

    private void ReadCkStats(DateTime kaisaibi, string jouCD, byte rno, long ketto, ref SCSrc scSrc)
    {
        _cmdSTCK.Parameters["@KAISAI"].Value = kaisaibi;
        _cmdSTCK.Parameters["@JOUCODE"].Value = jouCD;
        _cmdSTCK.Parameters["@RACENO"].Value = rno;
        _cmdSTCK.Parameters["@KETTO"].Value = ketto;

        using var rd = _cmdSTCK.ExecuteReader();
        if (!rd.Read())
            return;

        // ★ 最初の1回だけ setter delegate を作る
        if (!_ckMapInitialized)
        {
            int count = rd.FieldCount;
            _ckSetters = new Action<SCSrc, int>[count];

            var scType = typeof(SCSrc);

            for (int i = 4; i < count; i++)
            {
                string col = rd.GetName(i);
                string propName = ColumnToProperty(col);
                var prop = scType.GetProperty(propName);
                if (prop == null)
                    continue;

                // setter メソッドを取得
                var setMethod = prop.GetSetMethod();
                if (setMethod == null)
                    continue;

                // ★ setter をコンパイル済み delegate に変換
                var setter = (Action<SCSrc, int>)Delegate.CreateDelegate(
                    typeof(Action<SCSrc, int>),
                    null,
                    setMethod,
                    throwOnBindFailure: false
                );

                if (setter != null)
                {
                    _ckSetters[i] = setter;
                }
                else
                {
                    // short プロパティ用のラッパー
                    if (prop.PropertyType == typeof(short))
                    {
                        _ckSetters[i] = (sc, v) => prop.SetValue(sc, (short)v);
                    }
                    else
                    {
                        _ckSetters[i] = (sc, v) => prop.SetValue(sc, v);
                    }
                }
            }

            _ckMapInitialized = true;
        }

        // ★ 以降は delegate 呼び出しだけ(超高速)
        for (int i = 4; i < rd.FieldCount; i++)
        {
            var setter = _ckSetters[i];
            if (setter == null)
                continue;

            int value =
                rd.IsDBNull(i) ? 0 :
                rd.GetFieldType(i) == typeof(int) ? rd.GetInt32(i) :
                rd.GetInt16(i);

            setter(scSrc, value);
        }
    }

こんな感じらしい。これ見てもあまり理解してない自分が情けないけど^^;

2026/04/12

第86回桜花賞

ひたすらコード書いてる週末でした。今回はちょっと、まあ、Ubuntuで学習的な寄り道もありましたが、ここまで殆どノータッチだったAutoMLにメスを入れました(笑) で、先程24時間×5をスタートしたので金曜日の仕事から帰宅した時には終わっている筈です。ちょっと期待している反面、どうもML.NETが新しくなった事による攻めの甘さがあるとかなんとか^^; それが以前はRMSE 1.4未満が出たりしたのに最近出ない原因なのでは?って辺りもなんですが、Model Builderに負けてばかりも微妙だしなAutoMLって事も踏まえての挑戦かなぁ。

それ以外にもここまでほぼ放置状態だった、本来のさらだのレース詳細表示の標準モードで搭載済みなものを詳細モードにもって事で、その作業もしてます。しかし、ここで問題は詳細モード的には使うフォントを"MS Gothic UI 12"にすると想定通りの表示が出来るけど、実際にはバランス的にも微妙になるんですよ。ああっ、今回ちと触って分かったオプションでフォントを変える部分のバグってか、コーディングミス(?)的な部分にも手を加えたので、オプションで変えればしっかり反映はされます。でも、その為にトータル的にアプリの見栄えがってのがあるので、今後の課題として対処して行く事にはします。

前置きが長くなりましたが、今日のメインも独自に予想。当然学習モデルがもう一つだし、自力しかないのでね(笑)

当たり前に穴予想ですけど、
当たると嬉しいなぁ!

2026/04/05

Ubuntuで学習

ここの所挑んでいた学習なんですが、Ubuntu環境下でのWindowsとは違うメモリマネージメント下での学習でのメモリ不足問題の回避でしたが、やっと一旦検証とか出来るものが出たので検証してみました。

3,151R 1点 芝(1,486R) ダート(1,545R) 障害(120R) 8頭以下(188R) 9~12頭(720R) 13頭以上(2,243R) 多点
単勝 20.95%
(80.71%)
18.71%
(82.03%)
23.11%
(80.58%)
20.83%
(66.00%)
25.00%
(65.32%)
23.33%
(87.74%)
19.84%
(79.74%)
46.49%
(72.85%)
複勝 48.94%
(85.99%)
47.24%
(87.95%)
50.16%
(84.13%)
54.17%
(85.67%)
52.66%
(76.38%)
57.08%
(90.76%)
46.01%
(85.26%)
83.31%
(81.61%)
枠連 10.78%
(85.15%)
9.67%
(88.39%)
11.36%
(81.39%)
16.16%
(100.30%)
--
(--)
12.64%
(86.40%)
9.54%
(79.66%)
22.34%
(72.40%)
馬連 7.68%
(67.57%)
6.93%
(69.15%)
8.03%
(65.18%)
12.50%
(78.67%)
16.49%
(85.74%)
10.00%
(79.90%)
6.20%
(62.09%)
16.92%
(68.25%)
ワイド 18.15%
(77.88%)
16.89%
(76.44%)
19.16%
(80.88%)
20.83%
(57.08%)
31.91%
(73.62%)
23.19%
(83.11%)
15.38%
(76.56%)
35.67%
(78.09%)
馬単 4.32%
(72.10%)
3.84%
(78.01%)
4.72%
(67.37%)
5.00%
(59.75%)
9.04%
(71.33%)
5.00%
(94.58%)
3.70%
(64.94%)
16.92%
(65.51%)
三連複 4.00%
(76.14%)
3.97%
(68.48%)
3.88%
(84.87%)
5.83%
(58.50%)
14.36%
(76.86%)
5.00%
(65.65%)
2.81%
(79.44%)
11.08%
(72.28%)
三連単 0.95%
(58.76%)
0.87%
(32.33%)
0.97%
(85.77%)
1.67%
(38.33%)
4.79%
(96.44%)
0.97%
(86.32%)
0.62%
(46.75%)
11.08%
(66.05%)
総合 50.27%
(75.41%)
48.92%
(72.53%)
51.13%
(78.76%)
55.83%
(67.32%)
56.38%
(77.96%)
57.92%
(84.31%)
47.30%
(71.81%)
83.78%
(69.09%)

これはRMSE 1.4148なんですが、微妙なものですね。ただ、何故かは不明ですが、これまでのダート寄りってのが随分と改善されて芝も以前よりは良くなった気がします。

何にしても、まだまだ探究は必要な感じですね^^;

第70回 大阪杯

 相変わらずAIと戯れてます(笑) 行き詰まり感のある機械学習での改善策を模索してるんですが、これも当然簡単な話ではないです。 Windowsのだばだばなメモリー管理を避ける為にUbuntuに環境を移しての実現に挑んでるんですが、ここ数日色々とやらされてます。

最近の詐欺の手口じゃないけど、AIはもっともらしい話をして間違った事を案内します。それを人間が指摘して修正させるんです。

うわ~! Win5間に合わなかったorz これも仕方ないかとは思うが

独自に予想してたらWin5の時間過ぎてたのは自分のミスですね。
こんなんで行きました。

2026/04/04

AIとのやり取り

他の方達がどの程度AIを利用しているのかは知りませんが、自分はどうだろ? 最近PCに向かって動画視聴してる時は除いて8割程度の時間はAIとの会話だと思う。いや、別にボッチだとかそんな事ではなくてね、コード書く時にとか、まあ、色々とこれまで単にグーグル先生に質問的な話ではなくて、普通に「こんな感じに書いたコードを最適化するにはどうすれば良いの?」とか言いながら自分の書いたコードを貼り付けるとその改善案を示してくれる。

でもね、これがチョイチョイ罠で数時間嵌るのも日常茶飯事な訳です(笑) なので更に時間が掛かってるのってのが現状かもね。ただ、明らかにやり方、思考方法、色々と影響され変わってきてますね。それでも、常に正誤判定は人間である自分に責任はあるので大変です。

この所ってか、まあ既に昨年夏からだから9か月は路頭に迷ってます。自分の分かる範囲での最善方法の模索。結局無駄になりそうなここ最近のモデルの学習。抜け出せれば良いのですが、AIにチョイチョイ騙されて無駄な時間(?)をってか、まあ、全くの無駄ではないけど、この方法もダメだなと再確認させられたりですね。

2026/04/02

Microsoft Rewards 28回目

前回2月14日からなので48日目。ただ、既に数日前に交換可能だったけど、Microsoftが在庫切れとかで交換が出来なかった。にしても、今回はちょっと日数が掛かりました。ちょっとサボったからだと思うけど、別に焦らずに継続します。amazonギフトへの交換も5,425ptが600円と必要ポイントが増加してる気がします。まあ、amazonギフトも7千円超えて来たのでそろそろ何かに使おうかなぁとは思ってます😉

2026/03/30

先週はAutoMLで

ML.NETの6.0Previewが出て対応したので、新バージョンでの動作確認とその出来栄えチェックを兼ねて24時間×5をやってたんですが、最適RMSEは1.4609と全然期待できるものではないのですが、一応2025年の1年間で検証してみる事にしました。

3,151R 1点 芝(1,486R) ダート(1545R) 障害(120R) 8頭以下(188R) 9~12頭(720R) 13頭以上(2243R) 多点
単勝 21.29%
(86.71%)
18.84%
(82.89%)
23.30%
(91.75%)
25.83%
(69.08%)
34.04%
(108.72%)
23.47%
(86.49%)
19.53%
(84.94%)
47.54%
(81.87%)
複勝 48.81%
(86.39%)
44.89%
(82.44%)
51.91%
(90.32%)
57.50%
(84.75%)
56.38%
(80.16%)
55.69%
(86.68%)
45.97%
(86.82%)
83.47%
(83.52%)
枠連 10.39%
(85.93%)
9.35%
(91.08%)
10.95%
(77.15%)
15.15%
(152.12%)
--
(--)
10.97%
(54.35%)
9.59%
(90.94%)
25.59%
(85.72%)
馬連 7.30%
(74.31%)
6.33%
(72.32%)
8.03%
(70.59%)
10.00%
(146.75%)
17.55%
(61.12%)
8.19%
(52.74%)
6.15%
(82.34%)
18.88%
(82.01%)
ワイド 17.96%
(85.90%)
16.15%
(75.34%)
19.74%
(96.36%)
17.50%
(82.17%)
30.85%
(57.71%)
21.39%
(62.85%)
15.78%
(95.67%)
36.94%
(83.52%)
馬単 4.19%
(71.31%)
3.63%
(63.65%)
4.60%
(79.62%)
5.83%
(59.17%)
10.11%
(66.06%)
3.89%
(54.56%)
3.79%
(77.12%)
18.88%
(80.51%)
三連複 4.00%
(79.03%)
3.36%
(61.46%)
4.53%
(97.32%)
5.00%
(61.17%)
11.17%
(49.63%)
4.17%
(59.60%)
3.34%
(87.74%)
11.96%
(86.57%)
三連単 0.98%
(73.50%)
0.61%
(18.85%)
1.23%
(119.19%)
2.50%
(162.00%)
5.32%
(91.12%)
0.69%
(140.54%)
0.71%
(50.50%)
11.96%
(89.68%)
総合 50.11%
(80.31%)
46.30%
(68.05%)
53.01%
(90.36%)
60.00%
(101.03%)
59.57%
(73.50%)
56.39%
(74.72%)
47.30%
(82.01%)
84.23%
(86.36%)

ああっ、今の時期は新馬戦無いので通常用です。相変わらずのダート寄りなモデルですね。しかし、今更気が付いたけど、ダートや13頭以上のレース数がカンマ編集されてないや^^;

まあ、たった5回ではなんともなのかなぁ。一日PCを休ませたから今週もやるしかないかな。

2026/03/29

第56回高松宮記念

この所、色んな事して滅茶苦茶忙しかった。色んな事ってアプリの作業なんだけど、昨日からはWin5のリファインがようやく片付いたのでPlaywrightに久しぶりに挑んでたんですが、やはり一筋縄では行かない。今回はGeminiにお願いしてたんですが、Copilot同様にあたかも知ってるふりして堂々と教えるコードは全くってか、素人の自分では分からない部分も知ってる感じにコードを示してくれるけど、根本的にうまく行かない。そんなんで時間を浪費されたのでアップがギリギリになりました。

独自に予想してみました。

さて、Playwrightを続ける前に、ちとバグあるっぽいのでそれ潰さなきゃです。

追記 2026.3.29 23:08
Playwrightではやはりというか、GeminiでもCopilotでも的確なコードは示してくれないし、アプリが肥満化して困る。試しに入れてたコードは有効化してなかったけど、単にNuGetでPlaywrightのパッケージを入れているだけで太るらしいので断念して削除しました。

2026/03/25

Microsoft ML Version 6.0.0-preview.26160.2

NuGetチェックしてて、System.Data.SQLite Version 2.0.3が出たとの事でアップデートしようとした時に、ふとここ最近はプレビューとかチェック外してた事に気が付き、プレビューも含めたらML.NET Version 6.0.0-preview.26160.2がある事に気が付き入れました。

ML.NETが新たなpreviewなら当然一通りの確認しなきゃなので昨夜から新たなML.NETでの学習を始めてました。ここまで既に21時間程度やった所だと、相変わらず演算とメモリのエラーは出ます。まあ、取敢えず通常用で1時間×5回にしてるのでしばらくは掛かると。

ただ、取り立てて何がって部分はさほど気にする必要はない程度かな^^;

2026/03/21

Gemini恐るべし

日々AIが進化しているとは思ってますが、今回のアプリを開発し始めてしばらくしてから投票機能等も実装しようとWebView2とか諸々調べて、WebView2では入金とかまではどうにか出来る様にコード書いたけど、馬券の入力と投票は断念して他のアプリを利用させてもらう事にしてました。さらだ64でWinUI3での開発している時にPlaywrightの事をしり、ちょっと試したんですがイマイチ把握出来ずに放置(笑)

先日の一件からCopilotよりもGeminiが優れた部分があるのも把握してたので、ちょっと試しに問い合わせると普通に回答してきた。ただ、現在は手に余る程の作業があり、先に1つずつ片付けてから取り掛かろうかと思います。

いや、今UbuntuでVS Code使ってPythonのコード書いてる時にもAIの進化を感じました😉

VMware Workstation Pro(For Windows) 25H2u1

しばらくVMwareから遠ざかってました。まあ、特に必要にならなかったのと、それ以外で忙しい日々(笑) で、まあ、最新版をダウンロードしてインストールかなぁとVMwareに行くと...いやね、ニュースでなんとなく買収されたっての読んだ記憶もあるけど、Broadcom Incへのログインとか求められ、入れないのでパスワードの再設定に進んでどうにかで、ダウンロードしました。

でまあ、インストールもしてって...今回の事情なんですが、別に久しぶりにLinuxで遊ぼうとかではないんです。苦戦しているモデルの学習ですが、本日72時間学習の2度目の最中の帰宅だったのですが、OSごと吹っ飛ばされてましたorz 1回目の72時間学習よりも1日目で超えていたので期待してたのに、帰宅するとPCが再起動してました。理由はちょっと不明ですが、やっていたのはModel Builderの72時間学習です。32時間程度後にこの学習がパーになりました。

そこで原因の可能としてOSのメモリ管理とかがって話からWindowsは弱いのでLinuxでって話になり、その準備です。

最後に利用してたVMware Workstation Player バージョン17.?とかだったと思うけど、少し前にPro版も無料で利用可能になった話はしってたけど、Linuxさわる理由があまりなかったりしたので、OS吹っ飛ばされてのクリーンインストール後には入れてなかったんです。Playerとの違いなのかもだけど、見た感じが随分とまた変わったと思う。

入れたのはUbuntu 24.04です。

また無駄な時間にならない事を祈りながら作業進めます。

2026/03/15

軍配はCopilotだな(笑)

もう少しで終わる所でエラーが出た。Copilotに指摘するとすんなり自分の非を認めた。そうだよね、元々動いてるコードを元に最適化の相談して示されたコードにしてエラーが出る。これは確実にAI側の落ち度ですね。ただね、現状のAIは普通に嘘をつきます(笑) それを見抜いて修正させるのは人間ですね。

Geminiの方がもう少し研ぎ澄まされたコードで提示してくれます。なんだろ?Copilotはもう少し、意図的に人間味を出してる(笑)のかな? 今回もかなりの時間と労力費やして、やっと何とかなレベルに来たので、次期バージョンとしてリリースする予定です。

余りにもCopilotが人間ぽくミスするので、慎重にならざるを得ないけど、多分今回の苦労して行った、まあ、厳密にはAIにお願いしてやり遂げてはいますが、そのミスを指摘して修正させたのは自分だけど、大体50%程度の時間でフルセットアップが可能になりました。
直前のテストでは最後に近い部分でのエラーでした。更に修正後に似たような問題があったので修正して再トライ。ふと、その昔、フルセットアップに14時間とか掛かってた頃のデバックを思い出しました。10時間走らせてエラーが出て、またってのは本当に辛い作業でした。それに比べたら、全然(笑) ただ、その昔のは自分のミスで、今回のはAIがなのはちょっとだけ、でも、そのコードを自分が全部自力で書き直したと考えたら、楽させてもらったなぁっとね。

ここまでリトライしてると、多分JV-Linkのキャッシュなんかも効いてるのでキャッシュクリアしてやってみないと実測としては不向きな記録になるけど、フルセットアップに1時間掛からなくなりました(笑)

2026/03/14

Gemini

結局普段は相変わらずCopilotメインで助けてもらってます。Edgeに慣れ過ぎてChromeに移行するのは無理だったのが最大の理由なんですけど。いや、垂直タブが思いのほか便利で今更水平タブには戻れないです。

ただ、Copilotにはいくつか欠点がある。文字数制限があり、長いコードを見せて相談するのに限界があったり、でも、確か分割して見せて出来た事があったかもですが、Geminiはこれが多分無い。で、昨夜かなりの量のコードについて相談させてもらったんだが、途中で回答が止まったorz 多分無料版の回数制限に掛かった様です。

世の中、無料で多くのサービスが提供されていますが、確かに本来は利益が得られなければサービスは成り立たないのは当然だとは思います。自分もアプリを無料で公開してますが、これはこれで評価されたりを得てアプリの魅力が足りないと判断出来たり(笑) OpenAIのChatGPTの存在は知ってはいるけど、利用料金的な情報が当初から流れてたので一度も試した事がない。

いや、かなりのアドバイスを受けたので、残りは自力でってのも当然アリだけど、流石はAIってか今回のアドバイスの中で、コードのミスを的確に指摘してくれたりは本当にありがたい事で、多分自分ではほぼ見つけられないかも。

この後、日付が変わったから再開する予定ですが、昨夜の続きが出来るか不安。でも、まずは久しぶりのWindows Updateした。ってのも、AutoML使って24時間×10回学習が今朝終わった。

しかし、最適RMSEは1.4581止まりorz  やはりModel Builderで再度学習が必要かなぁ。

追記 2026.3.14 17:44
あくまでも自分の感触的な話として、Geminiは結構正確にコードを提示してくるのに対し、Copilotはざっくりなコードを提示する。で、まあ、こちらがそのコードの間違いを指摘すると素直に助入れる感じですね。では、どちらが良いのかと言えばGeminiの様に正確なコード。でも、実は今回もGeminiは実行まで至らず、ってのも回答制限からか先に進めなくて、今朝からCopilotに説明してCopilotで完了に近づいてます。現在、今回の修正版でのフルセットアップしてるので、その結果待ちかな(笑)