A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunrise2 高级黑马   /  2014-8-12 14:56  /  620 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5.     class Gens
  6.     {
  7.         private static List<List<int>> Populations = new List<List<int>>(0);

  8.         private static List<Children> TargetGenePool = new List<Children>(0);

  9.         private static int GenLength = 8;

  10.         private static int MaxPopSize = 1000;

  11.         private static Random rdm = new Random(1);

  12.         private static int[] Data = new int[] {1,2,3,4,5,6,7,8,9};

  13.         private static string BestChromsome = string.Empty;

  14.         static void Main()
  15.         {
  16.             InitialPop();
  17.             EvaluateFitness(Populations);
  18.             
  19.            TargetGenePool = TargetGenePool.Distinct().ToList();
  20.            EvaluateDistance(TargetGenePool);
  21.            int value = TargetGenePool.Min(a=>a.DistanceOffSet);
  22.            List<Children> TempValue =  TargetGenePool.FindAll(a=>a.DistanceOffSet==value);
  23.             foreach (var Item in TempValue)
  24.             {
  25.                 StringBuilder sb =new StringBuilder();
  26.                 foreach (var unite in Item.Chromsome)
  27.                 {
  28.                     sb.Append(unite);
  29.                 }
  30.                 if (BestChromsome != sb.ToString())
  31.                 {
  32.                     BestChromsome = sb.ToString();
  33.                     System.Diagnostics.Trace.WriteLine("最佳基因:" + BestChromsome);
  34.                 }
  35.                
  36.             }
  37.             
  38.         }

  39.         static void EvaluateDistance(List<Children> ChromsomeList)
  40.         {
  41.             foreach(var chromsome in ChromsomeList)
  42.             {
  43.                 List<int> values = new List<int>(0);
  44.                 for (int Index = 0; Index < chromsome.Chromsome.Count;Index++)
  45.                 {
  46.                     if(chromsome.Chromsome[Index]!=0)
  47.                     {
  48.                         values.Add(Data[Index]);
  49.                     }
  50.                 }

  51.                 int distance = 0;
  52.                 for (int i = values.Count-1; i >0; i--)
  53.                 {

  54.                     if(i-1>=0)
  55.                     {
  56.                         distance += (values[i] - values[i - 1]);
  57.                     }
  58.                      
  59.                 }
  60.                 chromsome.DistanceOffSet = distance;
  61.             }
  62.          
  63.          
  64.         }

  65.         static void EvaluateFitness(List<List<int>> Pop)
  66.         {
  67.             foreach (var ItemCollection in Pop)
  68.             {
  69.                 double fitness = 0.0;
  70.                 double Sum = 0;
  71.                 for (int Index = 0; Index < ItemCollection.Count;Index++)
  72.                 {
  73.                     if (ItemCollection[Index] != 0)
  74.                     {
  75.                         double Value = Data[Index];
  76.                         Sum += Value;
  77.                     }
  78.                 }
  79.                  
  80.                 if (Sum == 10)
  81.                 {
  82.                     fitness = 1.0;
  83.                     Children child = new Children();
  84.                     child.Fitness = fitness;
  85.                     child.Chromsome = ItemCollection;
  86.                     TargetGenePool.Add(child);
  87.                 }
  88.                  
  89.             }
  90.         }

  91.         static void InitialPop()
  92.         {
  93.             int PopSize = 0;
  94.             while (PopSize < MaxPopSize)
  95.             {
  96.                 List<int> gen = new List<int>(0);
  97.                 int currentlength = 0;
  98.                 while (currentlength <= GenLength)
  99.                 {
  100.                     gen.Add(CreateUnite());
  101.                     currentlength++;
  102.                 }
  103.                 Populations.Add(gen);
  104.                 PopSize++;
  105.             }
  106.         }

  107.         static int CreateUnite()
  108.         {
  109.             return rdm.Next(0,2);
  110.         }

  111.     }

  112.    
  113.     class Children
  114.     {
  115.         /// <summary>
  116.         /// 基因序列
  117.         /// </summary>
  118.         private List<int> chromsome= new List<int>(0);
  119.         public List<int> Chromsome
  120.         {
  121.             get
  122.             {
  123.                 return chromsome;
  124.             }
  125.             set
  126.             {
  127.                 chromsome = value;
  128.             }
  129.         }

  130.         

  131.         /// <summary>
  132.         /// 适应度
  133.         /// </summary>
  134.         private double fitness;
  135.         public double Fitness
  136.         {
  137.             get
  138.             {
  139.                 return fitness;
  140.             }
  141.             set
  142.             {
  143.                 fitness = value;
  144.             }
  145.         }

  146.         /// <summary>
  147.         /// 路径差
  148.         /// </summary>
  149.         private int distanceoffset;
  150.         public int DistanceOffSet
  151.         {
  152.             get
  153.             {
  154.                 return distanceoffset;
  155.             }
  156.             set
  157.             {
  158.                 distanceoffset = value;
  159.             }
  160.          
  161.         }
  162.      
  163.     }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马