2025/05/11

まだまだ続く辛い道のり

やっと!ああっ、前回書き込みから1週間ですが、ひたすらコード書きorz いっぱい勉強させて頂きました。通常版用CSVデータ出力を仕上げる際、一気に書き上げるも見た事のないエラーでCopilotに質問すると、メソッドが大き過ぎたりするとなりますよって事でシェイプアップ(笑) その際、クラスのメンバーに名前をプログラム的にアクセスする方法を教えてもらいました。

  1. public void SetUmaBareiSexBlinker(int umaNo, byte barei, byte sex, byte blinker)
  2. {
  3. // プロパティ名を動的に生成
  4. string[] suffixes = { "Barei", "Sex", "Blinkers" };
  5. byte[] values = { barei, sex, blinker };
  6.  
  7. foreach (var (suffix, value) in suffixes.Zip(values))
  8. {
  9. string propertyName = $"Uma{umaNo}{suffix}";
  10. PropertyInfo prop = typeof(MSouhaCKSrc).GetProperty(propertyName);
  11.  
  12. if (prop != null && prop.PropertyType == typeof(byte))
  13. {
  14. prop.SetValue(this, value);
  15. }
  16. }
  17. }

こんな感じでクラスのメソッドに書いておけば、メンバーに簡単に値がセット出来る様になるので楽でした。この例は全てが同じ型の場合ですが型が違う場合は

  1. public void SetUmaPrev<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27>
  2. (int umaNo, int mae, T1 jouCD, T2 tuki, T3 kai, T4 nichi, T5 trackCD, T6 course,
  3. T7 Kyori, T8 waku, T9 tousu, T10 tenko, T11 baba, T12 barei,
  4. T13 sex, T14 kinryo, T15 blinker, T16 kishu, T17 juni,
  5. T18 corner1, T19 corner2, T20 corner3, T21 corner4, T22 ato4, T23 ato3,
  6. T24 date, T25 chakuSa, T26 timeSa, T27 souha
  7. )
  8. {
  9. var properties = new (string suffix, object value)[]
  10. {
  11. ("PrevJouCD", jouCD),
  12. ("PrevTuki", tuki),
  13. ("PrevKai", kai),
  14. ("PrevNichi", nichi),
  15. ("PrevTrackCD", trackCD),
  16. ("PrevCourse", course),
  17. ("PrevKyori", Kyori),
  18. ("PrevWaku", waku),
  19. ("PrevTousu", tousu),
  20. ("PrevTenko", tenko),
  21. ("PrevBaba", baba),
  22. ("PrevBarei", barei),
  23. ("PrevSex", sex),
  24. ("PrevKinryo", kinryo),
  25. ("PrevBlinkers", blinker),
  26. ("PrevKishu", kishu),
  27. ("PrevJuni", juni),
  28. ("Prev1Corner", corner1),
  29. ("Prev2Corner", corner2),
  30. ("Prev3Corner", corner3),
  31. ("Prev4Corner", corner4),
  32. ("PrevAto4Furlong", ato4),
  33. ("PrevAto3Furlong", ato3),
  34. ("PrevDate", date),
  35. ("PrevChakusa",chakuSa),
  36. ("PrevTimeSa", timeSa),
  37. ("PrevSouha", souha)
  38. };
  39.  
  40. foreach (var (suffix, value) in properties)
  41. {
  42. string propertyName = $"Uma{umaNo}{suffix}{mae}";
  43. PropertyInfo prop = typeof(MSouhaCKSrc).GetProperty(propertyName);
  44.  
  45. if (prop != null && prop.PropertyType.IsAssignableFrom(value.GetType()))
  46. {
  47. prop.SetValue(this, value);
  48. }
  49. else
  50. {
  51. Debug.WriteLine($"プロパティ {propertyName} の型が一致しません。");
  52. }
  53. }
  54. }

こんな感じにすれば行けるらしい😉 で、まあ、無事にCSVデータ出力は...1回大体3~4時間なんですが、1回目出力後にバグ発見して再度出力しなおして大体4時間程度。そのデータをPythonのTensorFlowで学習させる為にPythonでのコーディングとデバッグ。新馬戦用とは別次元のコードの長さ(4,019ステップ)ですが、無事に訓練スタートまでこぎつけました。流石にデータの大きさ(CSVデータファイルは1.5GB程度)からepochsは50でスタートしました。これ、40分/epochなのでそれでも33時間掛かるので明日の22時過ぎまで掛かります。もし、500epochsとかやると14日弱。順位で確か2,000epochsとかやってますが、これだと...ギャ~!55.5日ですorz ダメだ、終わってる! ちょっと最低限の学習である程度の成果が見込める所で一旦勝負掛けてPCを最新にして...夢だなwww

0 件のコメント:

コメントを投稿