C# 遺伝的アルゴリズム学習ノート

C# 遺伝的アルゴリズム学習ノート

次のコードは、C# 遺伝的アルゴリズムを使用して、単純な花の進化シミュレーション プロセスを実装します。

花の個体数は10で、50世代にわたって進化してきました。プログラムを実行すると、継続的な進化を通じて、集団の環境への適応能力が全体的に徐々に向上していることがわかります (適応度の値が減少します)。

C# 遺伝的アルゴリズムの実装コード:

  1. システムの使用;
  2. System.Collections.Generic を使用します。
  3. System.Text を使用します。
  4. 名前空間 GA
  5. {
  6. クラスプログラム
  7. {
  8. 静的void Main(文字列[] 引数)
  9. {
  10. ワールドworld = new World();
  11. ワールドを初期化します。
  12. (int i = 0 ; i <   50 ; i++)
  13. {
  14. ワールドを進化させる();
  15. コンソールに行を書き込む
  16. ワールドを表示();
  17. }
  18. }
  19. }
  20.  
  21. クラスワールド
  22. {
  23. int kMaxFlowers = 11 ;
  24. ランダムRnd = new Random();
  25. パブリックint[] 温度;
  26. パブリックint[] 水;
  27. パブリックint[] 日光;
  28. パブリックint[] 栄養素;
  29. パブリックint[]有益な昆虫;
  30. パブリックint[] 有害な昆虫;
  31. パブリック int 現在の温度;
  32. パブリック int currentWater;
  33. パブリック int 現在の太陽光;
  34. パブリック int 現在の栄養素;
  35. パブリック int currentBeneficialInsect;
  36. パブリック int currentHarmfulInsect;
  37. パブリックワールド()
  38. {
  39. 温度=新しいint[kMaxFlowers];
  40. =新しいint[kMaxFlowers];
  41. 日光=新しいint[kMaxFlowers];
  42. 栄養素=新しいint[kMaxFlowers];
  43. 有益な昆虫=新しいint[kMaxFlowers];
  44. 有害な昆虫=新しいint[kMaxFlowers];
  45. }
  46. /**//// <要約>  
  47. /// 第一世代の花の遺伝子構造を初期化する
  48. /// </要約>  
  49. パブリック void Init()
  50. {
  51. (int i = 1 ; i <   kMaxFlowers ; i++) は、
  52. {
  53. 温度[i] = Rnd.Next(1, 75);
  54. 水[i] = Rnd.Next(1, 75);
  55. 日光[i] = Rnd.Next(1, 75);
  56. 栄養素[i] = Rnd.Next(1, 75);
  57. 有益な昆虫[i] = Rnd.Next(1, 75);
  58. 有害な昆虫[i] = Rnd.Next(1, 75);
  59. }
  60. 現在の温度= Rnd.Next (1, 75);
  61. 現在の水= Rnd.Next (1, 75);
  62. 現在の太陽光= Rnd.Next (1, 75);
  63. currentNutrient = Rnd.Next (1, 75);
  64. currentBeneficialInsect = Rnd.Next (1, 75);
  65. currentHarmfulInsect = Rnd .Next(1, 75);
  66. }
  67. /**//// <要約>  
  68. /// 花のサイズが大きいほど、環境に適応する能力は弱くなり、サイズが小さいほど、環境に適応する能力は強くなります。
  69. /// </要約>  
  70. /// <パラメータ 名前= "花" > </パラメータ>  
  71. /// <戻り値> </戻り値>  
  72. プライベート int フィットネス(int flower)
  73. {
  74. intフィットネス= 0 ;
  75. theFitness = Math.Abs​​ (温度[花] - 現在の温度);
  76. theFitness theFitness = theFitness + Math.Abs​​(water[flower] - currentWater);
  77. theFitness theFitness = theFitness + Math.Abs​​(sunlight[flower] -
  78. 現在の日光);
  79. theFitness theFitness = theFitness + Math.Abs​​(nutrient[flower] -
  80. 現在の栄養素);
  81. theFitness theFitness = theFitness + Math.Abs​​(beneficialInsect[flower] -
  82. 現在の有益な昆虫);
  83. theFitness theFitness = theFitness + Math.Abs​​(harmfulInsect[flower] -
  84. 現在の有害昆虫);
  85. 戻り値(theFitness);
  86. }
  87. /**//// <要約>  
  88. /// 適応性の低い花を排除し、適応性の高い花同士が交配して繁殖し、次世代を生み出すようにします。同時に、突然変異が起こる可能性も一定程度あります。
  89. /// </要約>  
  90. パブリック void Evolve()
  91. {
  92. int[] fitTemperature =新しいint[kMaxFlowers];
  93. int[] fitWater =新しいint[kMaxFlowers];
  94. int[] fitSunlight =新しいint[kMaxFlowers];
  95. int[] fitNutrient =新しいint[kMaxFlowers];
  96. int[] fitBeneficialInsect =新しいint[kMaxFlowers];
  97. int[] fitHarmfulInsect =新しいint[kMaxFlowers];
  98. int[]フィットネス=新しいint[kMaxFlowers];
  99. 整数 i;
  100. 最小フィット= 0 ;
  101. 最小フィットインデックス= 1 ;
  102. ( i = 1 ; i <   kMaxFlowers ; i++) は、
  103. (適合度(i) 最小適合度)の場合
  104. {
  105. leastFit =フィットネス(i);
  106. 最小フィットインデックス= i;
  107. }
  108. 温度[leastFitIndex] = 温度[Rnd.Next(1, 10)];
  109. water[leastFitIndex] = water[Rnd.Next(1, 10)];
  110. 日光[leastFitIndex] = 日光[Rnd.Next(1, 10)];
  111. nutrient[leastFitIndex] = nutrient[Rnd.Next(1, 10)];
  112. 有益な昆虫[leastFitIndex] = 有益な昆虫[Rnd.Next(1, 10)];
  113. 有害昆虫[leastFitIndex] = 有害昆虫[Rnd.Next(1, 10)];
  114. i = 1 ; i <   kMaxFlowers ; i++) は、
  115. {
  116. fitTemperature[i] = 温度[Rnd.Next(1, 10)];
  117. fitWater[i] = water[Rnd.Next(1, 10)];
  118. フィットサンライト[i] = 日光[Rnd.Next(1, 10)];
  119. fitNutrient[i] = nutrient[Rnd.Next(1, 10)];
  120. 有益な昆虫をフィットさせる[i] = 有益な昆虫[Rnd.Next(1, 10)];
  121. 有害昆虫をiに適合させる[Rnd.Next(1, 10)];
  122. }
  123. i = 1 ; i <   kMaxFlowers ; i++) は、
  124. {
  125. 温度[i] = fitTemperature[i];
  126. 水[i] = fitWater[i];
  127. 日光[i] = fitSunlight[i];
  128. 栄養素[i] = fitNutrient[i];
  129. 有益な昆虫[i] = fitBeneficialInsect[i];
  130. 有害な昆虫[i] = 適合する有害昆虫[i];
  131. }
  132. i = 1 ; i <   kMaxFlowers ; i++) は、
  133. {
  134. (Rnd.Next(1, 100) == 1)の場合
  135. 温度[i] = Rnd.Next(1, 75);
  136. (Rnd.Next(1, 100) == 1)の場合
  137. 水[i] = Rnd.Next(1, 75);
  138. (Rnd.Next(1, 100) == 1)の場合
  139. 日光[i] = Rnd.Next(1, 75);
  140. (Rnd.Next(1, 100) == 1)の場合
  141. 栄養素[i] = Rnd.Next(1, 75);
  142. (Rnd.Next(1, 100) == 1)の場合
  143. 有益な昆虫[i] = Rnd.Next(1, 75);
  144. (Rnd.Next(1, 100) == 1)の場合
  145. 有害な昆虫[i] = Rnd.Next(1, 75);
  146. }
  147. }
  148. /**//// <要約>  
  149. /// 集団内の個体の環境への適応性、およびすべての個体の環境への適応性の合計を表示します。
  150. /// </要約>  
  151. パブリック void 表示()
  152. {
  153. 整数合計= 0 ;
  154. (int i = 1 ; i <   kMaxFlowers ; i++) は、
  155. {
  156. intフィットネス=フィットネス(i);
  157. 合計 += 適応度;
  158. Console.WriteLine("No." + i + "のフィットネスは" + フィットネスです);
  159. }
  160. Console.WriteLine("適応度の合計は " + 合計です);
  161. }
  162. }
  163. }

上記はC#遺伝的アルゴリズムの学習ノートです

<<:  C# モザイク アルゴリズムの実装

>>:  C# のデータ構造とアルゴリズムにおけるツリーの役割を紹介します

ブログ    
ブログ    
ブログ    

推薦する

貪欲アルゴリズム: K回の反転後の配列の合計を最大化する

[[355496]]多くのレコーディング仲間が、昨日のトピック「貪欲アルゴリズム:ジャンピングゲーム...

この10ステップを理解すれば、8歳の子供でもディープラーニングを理解できる

テクノロジーについて何も知らない人の目には、人工知能とは何でしょうか?これが『流転地球』に出てくるA...

この式がブロックされると、AI IQはゼロになります

[[214770]]この記事はQuantum School(WeChat:quantumschool...

科学者たちは一連のAI映画評価ツールを開発しました。撮影が始まる前に評価を与えることができます。

海外メディアの報道によると、映画の評価は大きな問題である。すべての映画の予告編の最後にそれらを見るこ...

GenAI の投資が 2024 年にデータセンターにどのような変化をもたらすか

私たちは、日常の習慣から抜け出し、長い間待ち望まれていた自分自身を変えるために、ちょっとしたモチベー...

シャンダイノベーション研究所とソゴウ研究者:自然言語処理の応用

【TechWeb Report】6月26日、山大創新研究所検索テーマ研究所研究員の賈文傑氏と捜狗自然...

DeepMindは、一般のプログラマーに匹敵するAlphaCodeをリリースしました。同日、OpenAIが数学オリンピックで優勝しました。

カールしすぎ!中国が春節を祝っている間、2つの有名なAI研究機関であるDeepMindとOpenAI...

人工知能は企業の調達戦略にどのように適合するのでしょうか?

どの大企業にとっても、調達は日々の業務において重要な役割を果たします。 [[317585]]企業は調...

「最強の7Bモデル」論文が発表され、ラマ2の13Bバージョンを超える方法が明らかになった

「欧州OpenAI」の「最強の7Bオープンソースモデル」であるMistralは、最近、数え切れないほ...

電子顧客サービスの管理不足は問題を解決することはできず、トラブルを増やすだけです

カスタマーサービスに電話すると、ロボットはプログラムに従ってプロンプトを出すだけで、ユーザーが望む情...

レノボグループが従業員の払い戻しの内部監査を実施できるようRPAロボットを導入

数万人の従業員を抱える大企業にとって、従業員の払い戻しに関する内部監査の難しさは想像に難くありません...

実証済みのROIを備えた機械学習アプリケーション

モノのインターネット (IoT) は、接続デバイスの数の急増により、10 年以上にわたって着実に成長...

AI に役立つ 7 つの優れたオープンソース ツール

ビジネスニーズを予測するには、AI を活用し、研究開発を新たなレベルに引き上げる必要があります。この...

トレンドにおける危険とチャンス: 生成 AI の黄金期をどう捉えるか?

ChatGPTは今年9月末に音声チャットと画像認識機能を追加しました。テキスト駆動型と比較して、C...