<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      GeneticSharp 遺傳算法類庫

      GeneticSharp 是什么

      GeneticSharp 是一個C#的遺傳算法類庫, 遺傳算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相對差一截, 稍微有名的是GeneticSharp庫.

      GeneticSharp 的弱點:

      • 不支持多目標優化
      • 沒有實現流行的 NSGA II算法, 缺少擁擠度等計算, 所以解的多樣性要差一些.
      • 對于整數型決策變量, 僅僅支持單個變量, 可以通過浮點數變量來代替, 只要將浮點數變量的小數位數設置為0.
      • 對于浮點型決策變量, 可支持多個變量

      GeneticSharp 默認只支持最大值優化, 如果要支持最小值優化, 決策函數乘-1就可以了.

      NSGAII 算法特點:

      • 種群大小保持一致:在 NSGA-II 中,父代種群和子代種群的大小是相同的。如果初始種群包含?? 個個體,那么在每一代中,子代的數量也將是 ??。
      • 選擇機制:在合并的種群中(父代和子代的組合),算法根據非支配等級和擁擠度距離選擇出 ?? 個個體作為下一代的種群。因此,最終的可行解個數不會超過初始種群的個體數。
      • 多目標優化:盡管最終的可行解個數最多為 ??,但 NSGA-II 的目標是找到多個 Pareto 最優解,最終返回的解可能在目標空間中形成一個 Pareto 前沿。

      概念

      1. 基因 Gene
        一個決策變量就是一個基因.
      2. 染色體 Chromosome, 即遺傳算法中的個體, 這些個體將有可能成為一個個可行解.
        染色體由基因組成, 有多少個決策變量, 就由多少個基因組成.
        GeneticSharp 主要的染色體類型有 FloatingPointChromosome 和 IntegerChromosome, 前者對應浮點數決策變量, 后者對應整數型決策變量.
      3. Fitness 適應度
        遺傳算法就是按照適應度來確定淘汰哪個個體, GeneticSharp 中適應度取值越大, 代表個體越優秀, 實際編程中, 適應度計算就是等同于目標函數.
      4. 約束
        GeneticSharp 沒有專門的約束處理機制, 我們可以通過自定義的 IFitness 接口來間接實現約束, 對于不符合約束條件的情況, 對應的 fitness 取值調到最小, 即這些不符合約束的個體直接被淘汰即可.

      使用C#實現一個簡單遺傳算法

      http://www.rzrgm.cn/friend/p/17472506.html

      示例代碼講解

      https://diegogiacomelli.com.br/function-optimization-with-geneticsharp/

      using System;
      using GeneticSharp;
      
      namespace FunctionOptimizationWithGeneticSharp
      {
      	class MainClass
      	{
      		/// <summary>
      		/// 定義 Fitness 類
      		/// </summary>		
              public class DistinaceFitness : IFitness
              {
                  public double Evaluate(IChromosome c)
                  {
      				var fc = c as FloatingPointChromosome;
      				var values = fc.ToFloatingPoints();
      				var x1 = values[0];
      				var y1 = values[1];
      				var x2 = values[2];
      				var y2 = values[3];
      				
      				//假設有一個約束函數 x1+x2+y1+y2>=5
      				if (x1+x2+y1+y2<5) {
      					//違法約束, 適應度賦值為0 
      					return 0.0 ;
      				}
      				
      				return Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
                  }
              }
              public static void Main(string[] args)
      		{
      			float maxWidth = 998f;
      			float maxHeight = 680f;
      		
      		   //定義染色體個數和取值范圍
      			var chromosome = new FloatingPointChromosome(
      				new double[] { 0, 0, 0, 0 },  //包含4個決策變量, 這里定義每個決策變量的最小值
      				new double[] { maxWidth, maxHeight, maxWidth, maxHeight },  //包含4個決策變量, 這里定義每個決策變量的最大值
      				new int[] { 10, 10, 10, 10 },  //每個決策變量占用bit數, 一般取值為10或64 
      				new int[] { 0, 0, 0, 0 }); //每個決策變量小數部分位數
                  
                 //定義種群規模, 種群規模最小size為2, 否則無法交配.  
      			var population = new Population(50, 100, chromosome);
                  
      			//定義Fitness 
      			var fitness = new DistinaceFitness();
      	 
      			//定義遺傳算法因子
      			var selection = new EliteSelection();
      			var crossover = new UniformCrossover(0.5f);
      			var mutation = new FlipBitMutation();
      
                  //生成遺傳算法對象
      			var ga = new GeneticAlgorithm(
      				population,
      				fitness,
      				selection,
      				crossover,
      				mutation);
      
      			//定義遞歸終止條件
      			var termination = new FitnessStagnationTermination(100);
      			ga.Termination = termination;
      
      
      			Console.WriteLine("Generation: (x1, y1), (x2, y2) = distance");
      			var latestFitness = 0.0;
                  
      			//在算法執行之前, 可以定義每一代運算的回調事件
      			ga.GenerationRan += (sender, e) =>
      			{
      				//通過 ga.BestChromosome 獲取截止當前最好的染色體
      				var bestChromosome = ga.BestChromosome as FloatingPointChromosome;
      				//通過 ga.BestChromosome.Fitness 獲取截止當前最好的適應度, 即目標函數值				
      				var bestFitness = bestChromosome.Fitness.Value;
      				//通過 ga.GenerationsNumber 輸出算法已經迭代了多少代
      
      				if (bestFitness != latestFitness)
      				{
      					latestFitness = bestFitness;
      					var phenotype = bestChromosome.ToFloatingPoints();
      
      					Console.WriteLine(
      						"Generation {0,2}: ({1},{2}),({3},{4}) = {5}",
      						ga.GenerationsNumber,
      						phenotype[0],
      						phenotype[1],
      						phenotype[2],
      						phenotype[3],
      						bestFitness
      					);
      				}
      			};
                  
      			//運行遺傳算法 
      			ga.Start();
      
      			//輸出最終結果
      			var bestChromosome = ga.BestChromosome as FloatingPointChromosome;
      			var phenotype = bestChromosome.ToFloatingPoints();
      			var bestFitness = bestChromosome.Fitness.Value ;
                  Console.WriteLine(
      						"Final Generation {0,2}: ({1},{2}),({3},{4}) = {5}",
      						ga.GenerationsNumber,
      						phenotype[0],
      						phenotype[1],
      						phenotype[2],
      						phenotype[3],
      						bestFitness
      					);			
      
      			Console.ReadKey();
      		}
      	}
      }
      
      posted @ 2025-01-02 21:26  harrychinese  閱讀(227)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩一区二区三区东京热| 成人午夜在线观看日韩| 松溪县| 性色在线视频精品| 日韩人妻少妇一区二区三区| 青青国产揄拍视频| 久久综合97丁香色香蕉| 国产毛片精品av一区二区| 涩欲国产一区二区三区四区| 国产AV一区二区三区| 亚洲中文字幕人成影院| 亚洲成在人线AⅤ中文字幕| 精品超清无码视频在线观看| 高中女无套中出17p| 婷婷色综合视频在线观看| 中文字幕精品亚洲二区| 少妇人妻综合久久中文字幕| 四虎国产精品成人免费久久| 免费观看全黄做爰大片| 九九热视频免费在线播放| 久久国产精品波多野结衣| 一区二区三区不卡国产| 午夜精品福利亚洲国产| 久久香蕉国产线看观看精品yw| 久久国产乱子伦免费精品无码| 亚洲精品福利一区二区三区蜜桃| 农民人伦一区二区三区| 亚洲欧美另类久久久精品播放的| 久久亚洲精品11p| 弥勒县| 成人国产乱对白在线观看| 91精品国产老熟女在线| 国产精品无码成人午夜电影| 精品日本乱一区二区三区| 国产日韩精品视频无码| 国产中文字幕在线一区| 久章草这里只有精品| 好爽毛片一区二区三区四| 同德县| 九九热精品视频在线免费| 亚洲午夜精品久久久久久抢|