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# のデータ構造とアルゴリズムにおけるツリーの役割を紹介します

ブログ    
ブログ    
ブログ    

推薦する

2021年に注目すべき5つのRPAトレンド

RPA ツールの使用はここ数年で急増しています。今年のパンデミックにより、組織は、特に RPA が最...

...

海外メディア:人間はますます余暇を持ち、AIは資本主義を排除する

ベストセラー作家のバーナード・マー氏はフォーブス誌に「人工知能はいかにして資本主義を殺すか」と題する...

機械学習は株式市場を正確に予測できるのでしょうか?

株式市場が始まって以来、人々はシステムを悪用し、市場に勝とうとしてきました。長年にわたり、人々は何千...

「激怒」するビッグモデルがレコメンデーションシステムと衝突したとき

ChatGPTに代表される大規模モデル技術の急速な発展により、レコメンデーションシステムは革命的な変...

...

2018年、中国とアメリカのインターネット大手によるAIチップ戦争で、BATはFANGに挑戦できるのか?

AI時代に注目すべき新たな変化は、テクノロジー大手がAIチップを独自に開発し始めたことだ。これは一...

AIは「GitHub危機」を乗り越えられるか?

機械学習は現在、この分野の急速な発展を妨げるいくつかの危機に直面しています。これらの危機は、より広範...

...

カーネルCF: 推薦システムのための最適リコール戦略

著者 | 王昊レビュー | Chonglouレコメンデーションシステムは誕生以来、特にインターネット...

普通のプログラマーはどうやって AI を活用するのでしょうか?

[[199775]]現在、人工知能はますます人気が高まっている分野となっています。普通のプログラマ...

人気の古い写真が動いたり歌ったり、Weishi はワンクリックで AI ビデオ特殊効果を実装

[[386434]]紙から携帯電話まで、このチームはワンクリックでますます楽しい特殊効果を実現してい...

今回はホーキングの言うことを聞かなかった!人工知能が人間に取って代わる、これが科学が進む道だ

科学の分野では、人類の科学技術の発展のスピードは実に速く、人工知能と比較すると、すでに基本的に活用で...

...

...