GeneticSharp 遗传算法类库

GeneticSharp 是什么

GeneticSharp 是一个C#的遗传算法类库, 遗传算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相对差一截, 稍微有名的是GeneticSharp库.

GeneticSharp 的弱点:

  • 不支持多目标优化
  • 没有实现流行的 NSGA II算法, 缺少拥挤度等计算, 所以解的多样性要差一些.
  • 对于整数型决策变量, 仅仅支持单个变量
  • 对于浮点型决策变量, 可支持多个变量

GeneticSharp 默认只支持最大值优化, 如果要支持最小值优化, 决策函数乘-1就可以了.

概念

  1. 基因 Gene
    一个决策变量就是一个基因.
  2. 染色体 Chromosome, 即遗传算法中的个体
    染色体由基因组成, 有多少个决策变量, 就由多少个基因组成.
    GeneticSharp 主要的染色体类型有 FloatingPointChromosome 和 IntegerChromosome, 前者对应浮点数决策变量, 后者对应整数型决策变量.
  3. Fitness 适应度
    遗传算法就是按照适应度来确定淘汰哪个个体, GeneticSharp 中适应度取值越大, 代表个体越优秀, 实际编程中, 适应度计算就是等同于目标函数.
  4. 约束
    GeneticSharp 没有专门的约束处理机制, 我们可以通过自定义的 IFitness 接口来间接实现约束, 对于不符合约束条件的情况, 对应的 fitness 取值调到最小, 即这些不符合约束的个体直接被淘汰即可.

使用C#实现一个简单遗传算法

https://www.cnblogs.com/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>=5if (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();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ClosedXML实现Excel导入导出

使用ClosedXML实现Excel导入导出 写在开头 游览Dotnet 基金会中的项目时,发现了这个库,Github 链接,它的性能非常好,详细见下图话不多说,直接上代码吧! 导出 后端: public static byte[] Output<T>(List<T> data, string sheetName) {using var workbook = …

离线环境一步部署OCR文字识别程序

前言 百度、阿里等的OCR接口需要联网环境,并且超过免费/试用次数后需要付费。一般政务项目因为信息安全要求都部署在独立内网,有没有离线免费的OCR实现方案?下文基于EasyOCR实现一步部署,可下载直接使用。 EasyOCR EasyOCR支持离线部署,可免费使用(支持Apache-2.0 licens…

昆明理工大学25届MBA复试资料

昆明理工大学25届MBA复试资料介绍 昆明理工大学MBA工商管理考研复试群:679724235 作者:唐维康 QQ1352517362 包含内容 全部内容如下:01、往年面试真题分为了专业知识问答、英语口语、社会类问题、综合面试问题四类,为去年上岸的面试题。02、专业英语词汇05、MBA复试1V1辅导课…

Alexander ——2024年报

Alexander ——2024年报Alexander ——2024年报 小总结 知己知彼,百战不殆。2024下半年找到了自己学习的方向,也认识很多的师傅,深入领域学习,无时不刻不在CTF的路上,逐渐建立一个完整的知识库体系。 今年的成长变化与进步 所学习的知识 Misc大部分编码体制皮亚诺夫曲线,希伯…

2025 多校冲刺省选模拟赛 1

第一次!输输输!2025 多校冲刺省选模拟赛 1 切割蛋糕(cake) 签到题 本质上是求 \(a\) 序列最小满足所有前缀平均值均大于全局平均值的循环位移,考虑 Raney 引理,找到斜率 \(\dfrac{s}{n}\) 所经过截距最小的点,易知没有无解情况。 时间复杂度 \(O(n)\)。 游乐园(park) …

IntelliJ IDEA 2024 安装激活详细使用教程(激活至2026,实测是永久,亲测!)

开发工具推荐:IntelliJ IDEA 2024 安装激活详细使用教程(激活至2026,实际上永久,亲测!)申明:本教程 IntelliJ IDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 !卸载老版本 IDEA 首先,如果小伙伴的…

文件及文件夹的对比工具:Beyond Compare v5.0修改版(无需手动激活)

前言 Beyond Compare是一款文件及文件夹(目录)的对比工具。Beyond Compare不仅可以快速比较出两个目录的不同,还可以比较每个文件的内容,而且可以任意显示比较结果。Beyond Compare程序内建了文件浏览器,方便您对文件、文件夹、压缩包、FTP网站之间的差异比对以及资料同步…

LGV 引理

无。LGV 引理 概述 参考 OI Wiki Lindstrm–Gessel–Viennot lemma,即 LGV 引理,可以用来处理有向无环图上不相交路径计数等问题。 引理定义方阵 \(M\)。结论是: \[\det(M) = \sum_{S:A\to B} (-1)^{sgn(\sigma(S))} \prod_{i=1}^n \omega(S_i) \]其中 \(S:A\to B\) 表示不相…

【python复习随记】

缩进要对多行语句:使用反斜杠\ total = item_one + \item_two + \item_three在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \ total = [item_one, item_two, item_three,item_four, item_five]复数complex a+bj : a实部 b虚部 j虚数单位 字符串 (1)多行字符串:三引号( …

windows11连接蓝牙耳机声音差的解决方案

前期在使用Windows 10时,我的XM3通常是有Hands Free和正常输出两个通道的,走Hands Free通道则会触发通话模式,可以自己调整以适应不同的需求。 但是升级到Windows 11后,发现只剩下了一个耳机输出通道,但是音质直接降为通话音质,多次升降级无果,调整音质选项也没有作用。…

【政策解读】《电力监控系统安全防护规定》今日施行!

《电力监控系统安全防护规定》旨在提升电力监控系统的安全性和可靠性,确保电力系统的安全稳定运行。今日起施行,主要内容: 1、总则:《电力监控系统安全防护规定》旨在强化电力监控系统安全防护,保障电力系统安全稳定运行。规定适用于中国境内的电力监控系统运营者及相关单…

同硕计算机专业考研必备:统考+课程学习资料大放送!

同硕计算机,统考,课程学习,源码资料考研之路,道阻且长。对于计算机专业的学子来说,备考之路更是充满挑战。为了帮助广大考生高效备战,我在此精心整理了一套同硕计算机专业统考及课程学习资料,并免费分享给大家! 一、资料亮点:1. 同硕-计算机专业-统考历年真题,全部免…