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

ブログ    
ブログ    
ブログ    

推薦する

なぜドローンが5Gの商用利用の第一選択肢なのでしょうか?その理由はこの3点です!

近年、私たちの生活におけるドローンの応用はますます一般的になっています。当初は軍事分野でしたが、その...

...

人類は人工知能のせいで滅びるのか?ホーキング博士の最後の論文にヒントがあるかもしれない

[[251536]] 「完全な人工知能の開発は人類の終焉を意味するかもしれない...人工知能は自ら進...

ビジネスリーダーがAIを導入する際に指針となる5つの基本原則

たとえば、私が 25 年以上携わってきた市場調査業界を考えてみましょう。 AI は、さまざまな方法で...

人気は過ぎ去り、ユーザーの関心は低下しました。データによると、ChatGPTのトラフィックは6月に初めて減少しました。

7月6日、ChatGPTの人気が衰えの兆しを見せていると報じられた。分析会社Similarwebの...

2020 年の産業用 IoT ソリューション トップ 10

IoT については誰もが知っていますが、そのサブセットである産業用 IoT は、製造および産業プロ...

Unity が開発者向け AI ソフトウェア マーケットプレイス AI Hub を立ち上げ、株価が 15% 上昇

6月28日、Unityは開発者向けAIソフトウェアマーケット「AI Hub」を正式に立ち上げ、AIソ...

北京、宜荘市の111の道路で初の自動運転試験を開始

本日、北京市は有人自動運転試験を正式に開始した。北京経済技術開発区は40平方キロメートルのエリアを自...

35 歳の技術者が管理職に転身するにはどうすればいいでしょうか?アリババの上級アルゴリズム専門家が10の考えを明かす

[[313295]] 35歳前後というのはエンジニアにとって珍しい年齢です。技術者は、純粋に技術的な...

調査:ブラジルのAIスタートアップの50%以上がサンパウロ州に拠点を置く

ブラジルの新たな調査によると、人工知能関連の製品やサービスの開発に注力している企業の半数以上がサンパ...

人工知能の最初のグループが解雇された

全世界を置き換えると叫んだ人工知能は、ついに失業という苦境に陥った。スウェーデンのオンライン銀行であ...

...

...

コード生成のためのツリーベースのTransformerアーキテクチャ

導入:コード生成は、プログラマーの生産性を大幅に向上させる可能性を秘めた重要な AI 問題です。自然...