C# GeneticSharp包
可以直接从nuget安装GeneticSharp包
GeneticSharp 遗传算法类库
GeneticSharp 是什么
GeneticSharp 是一个C#的遗传算法类库, 遗传算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相对差一截, 稍微有名的是GeneticSharp库.
GeneticSharp 的弱点:
- 不支持多目标优化
- 没有实现流行的 NSGA II算法, 缺少拥挤度等计算, 所以解的多样性要差一些.
- 对于整数型决策变量, 仅仅支持单个变量, 可以通过浮点数变量来代替, 只要将浮点数变量的小数位数设置为0.
- 对于浮点型决策变量, 可支持多个变量
GeneticSharp 默认只支持最大值优化, 如果要支持最小值优化, 决策函数乘-1就可以了.
NSGAII 算法特点:
- 种群大小保持一致:在 NSGA-II 中,父代种群和子代种群的大小是相同的。如果初始种群包含𝑁 个个体,那么在每一代中,子代的数量也将是 𝑁。
- 选择机制:在合并的种群中(父代和子代的组合),算法根据非支配等级和拥挤度距离选择出 𝑁 个个体作为下一代的种群。因此,最终的可行解个数不会超过初始种群的个体数。
- 多目标优化:尽管最终的可行解个数最多为 𝑁,但 NSGA-II 的目标是找到多个 Pareto 最优解,最终返回的解可能在目标空间中形成一个 Pareto 前沿。
概念
- 基因 Gene
一个决策变量就是一个基因. - 染色体 Chromosome, 即遗传算法中的个体, 这些个体将有可能成为一个个可行解.
染色体由基因组成, 有多少个决策变量, 就由多少个基因组成.
GeneticSharp 主要的染色体类型有 FloatingPointChromosome 和 IntegerChromosome, 前者对应浮点数决策变量, 后者对应整数型决策变量. - Fitness 适应度
遗传算法就是按照适应度来确定淘汰哪个个体, GeneticSharp 中适应度取值越大, 代表个体越优秀, 实际编程中, 适应度计算就是等同于目标函数. - 约束
GeneticSharp 没有专门的约束处理机制, 我们可以通过自定义的 IFitness 接口来间接实现约束, 对于不符合约束条件的情况, 对应的 fitness 取值调到最小, 即这些不符合约束的个体直接被淘汰即可.
使用C#实现一个简单遗传算法
使用C#实现遗传算法 - 宁静致远. - 博客园
示例代码讲解
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();}}
}
相关文章:
C# GeneticSharp包
可以直接从nuget安装GeneticSharp包 GeneticSharp 遗传算法类库 GeneticSharp 是什么 GeneticSharp 是一个C#的遗传算法类库, 遗传算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相对差一截, 稍微有名的是GeneticSharp库. GeneticSharp 的弱点: 不支持多目标优化没…...
Leetcode做题记录----3
1474、删除链表M个节点之后的N个节点 思路: 1、两个循环解决问题 第一个循环移动M个位置,第二个循环确定移动N个位置后的,然后将M位置的节点的next指向,N位置后的节点即可 2、注意边界条件和判空处理 代码实现: pub…...
React(二):JSX语法解析+综合案例
事件绑定 this绑定方式 问题:在事件执行后,需获取当前类的对象中相关属性,此时需要this——当打印时,发现this为undefined,这又是为啥? 假设有一个btnClick函数,但它并不是我们主动调用的,而是…...
Gitee重新远程连接仓库(Linux)
Gitee重新远程连接仓库(Linux) 因为虚拟机重新安装了一回,所以需要重新和远程仓库连接,在网上找了很久没有找到相关操作,自己实操成功,记录下本博客,帮助有需要的人 确保新虚拟机安装Git 在新虚…...
Vitis HLS中的Array Partition与Array Reshape详解
Vitis HLS中的Array Partition与Array Reshape详解 引言 在高层次综合(HLS)设计中,数组是最常用的数据结构之一,但默认情况下,HLS会将数组映射到单个BRAM块,这会限制并行访问能力,成为性能瓶颈。为了克服这一限制&am…...
Centos离线安装openssl
文章目录 Centos离线安装openssl1. openssl是什么?2. openssl下载地址3. openssl-devel安装4. 安装结果验证5. 版本查看 Centos离线安装openssl 1. openssl是什么? OpenSSL 是一个开源的、跨平台的 加密工具库 和 命令行工具集,广泛用于实现…...
protobuf安装
安装 github官方链接 https://github.com/protocolbuffers/protobuf/ 以protobuf21为例 https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip windows 解压好文件夹后,使用cmake,vs,qt creator等工具打开该项目,进行编译,编译需…...
《基于超高频RFID的图书馆管理系统的设计与实现》开题报告
一、研究背景与意义 1.研究背景 随着信息化时代的到来,运用计算机科学技术实现图书馆的管理工作已成为优势。更加科学地管理图书馆会大大提高工作效率。我国的图书管理体系发展经历了三个阶段:传统图书管理模式、现代图书管理模式以及基于无线射频识别&…...
小程序渲染之谜:如何解决“加载中...”不消失的 Bug(glass-easel)
🎉 小程序渲染之谜:如何解决“加载中…”不消失的 Bug 🎉 引言 在小程序开发中,渲染问题总能让人抓狂。😫 这次,我遇到了一个奇怪的 bug:产品详情页的内容已经正常显示,但页面却一…...
在 React 中使用 Web Components 的实践操作
前言 在现代前端开发中,React 和 Web Components 都是广泛使用且备受欢迎的技术。React 是一个用于构建用户界面的 JavaScript 库,提供了组件化的开发方式和高效的状态管理,而 Web Components 是一套原生的浏览器技术标准,允许开…...
网络原理之HTTPS(如果想知道网络原理中有关HTTPS的知识,那么只看这一篇就足够了!)
前言:随着互联网安全问题日益严重,HTTPS已成为保障数据传输安全的标准协议,通过加密技术和身份验证,HTTPS有效防止数据窃取、篡改和中间人攻击,确保通信双方的安全和信任。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要…...
五子棋小游戏-简单开发版
一、需求分析 开发一个基于 Pygame 库的五子棋小游戏,允许两名玩家在棋盘上轮流落子,当有一方达成五子连珠时游戏结束,显示获胜信息,并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 : 显示一个 15x15 的五子棋…...
node-sass替换成Dart-sass(全是坑)
改了好久,人都改傻了,我是用的node:14.21.3,vue:2.5.2,webpack": "^3.12.0" 还好最后成功了,不然还准备要升级webpack版本试试,但/deep/换成::v-deep,人要死…...
2025中国科技大学少年班/创新试点班·初试备考测试卷(数学)
本卷考查内容:高中课程内容及拓展。 本卷考查形式:书面作答(客观题18小题解答题4题)。 卷首语:中科大少年班、创新班每年大规模招录在数理成绩优异的中学学生。其中初试数学题在高考基础上略有拓展,难度又低…...
即时通讯平台测试报告
1.项目概述 项目名称:即时通讯平台 版本号:V1.0.0 测试周期:2025年2月25日--2025年3月15日 测试目标:验证核心功能(登录、注册、消息收发、用户管理、群组功能等)的稳定性和性能指标。 2. 测试范围 功…...
如何记录Matlab程序运行过程中所占用的最大内存
有些时候,我们需要分析Matlab程序运行过程中所占用的最大内存。如果只是得到程序运行到当前位置所占用的内存,可以简单在程序当前位置插入memory命令即可: user memory; MemUsed_now user.MemUsedMATLAB; 但如果我们想要的是整个程序在运行…...
WIN11开发环境变量记录
这里写自定义目录标题 总图JAVA环境变量配置GIT环境变量配置NODEJS环境变量配置 总图 JAVA环境变量配置 新建系统变量。变量名:JAVA_HOME,变量值(可以选择浏览目录,JAVA的根目录,本处为D:\Java\jdk1.8.0_251ÿ…...
易语言模拟真人鼠标轨迹算法
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
洛谷P9950 [USACO20FEB] Mad Scientist B
P9950 [USACO20FEB] Mad Scientist B - 洛谷 代码区: #include <iostream> #include <string>using namespace std; int main() {int n;cin>> n;string a;string b;cin >> a >> b;int flag,step0,i,t;for ( i 0; i < a.length(…...
【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结
文章目录 七、Transformer架构1. 替代LSTM的原因2. Transformer架构:编码器 - 解码器架构3. Transformer架构原理 八、自然语言处理基础1. 语言模型基本概念2. 向量语义3. 预训练语言模型的基本原理与方法4. DeepSeek基本原理 九、计算机视觉 七、Transformer架构 …...
prometheus自定义监控(pushgateway和blackbox)和远端存储VictoriaMetrics
1 pushgateway采集 1.1 自定义采集键值 如果自定义采集需求时,就可以通过写脚本 定时任务定期发送数据到 pushgateway 达到自定义监控 1.部署 pushgateway,以 10.0.0.42 节点为例 1.下载组件 wget https://github.com/prometheus/pushgateway/relea…...
设计模式之组合模式:原理、实现与应用
引言 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和组合对象,从而简化了客户端代码。本文将深入探讨组合模式的原理…...
数字化转型 - 数据驱动
数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网:绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...
C++相关基础概念之入门讲解(上)
1. 命名空间 C中的命名空间(namespace)是用来避免命名冲突问题的一种机制。通过将类、函数、变量等封装在命名空间中,可以避免不同部分的代码中出现相同名称的冲突。在C中,可以使用namespace关键字来定义命名空间。 然后我们在调…...
【数学建模】层次分析法(AHP)详解及其应用
层次分析法(AHP)详解及其应用 引言 在现实生活和工作中,我们经常面临复杂的决策问题,这些问题通常涉及多个评价准则,且各准则之间可能存在相互影响。如何在这些复杂因素中做出合理的决策?层次分析法(Analytic Hierarchy Process…...
【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析
前言 在自然语言处理(NLP)和深度学习的快速发展中,Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍,涵盖它们的提出时间、网络结构等关键信息,能够快速的理解这些模型的设…...
TCP怎么保证可靠传输
一:连接管理 TCP是面向连接的协议,在数据传输前必须通过三次握手建立连接,结束时必须四次挥手来终止连接。这确保双方都准备好通信。 二:序列号和确认应答 每个字节的数据都被分配了一个序列号,这允许接收方将受到的数…...
TimeGAN:开启时间序列生成新纪元,结合GAN与自回归模型的优势
今天周末,给大家介绍一篇时序数据生成网络TimeGAN,一种用于时间序列生成的新框架,它将无监督GAN方法的多功能性与有监督自回归模型对条件时间动态的控制相结合。通过利用有监督损失和联合训练的嵌入网络,TimeGAN在生成逼真的时间序…...
【Java 优选算法】分治-归并排序
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 数组分块如二叉树的前序遍历, 而归并排序就如二叉树的后序遍历 912. 排序数组 解法 使用归并算法 根据中间点划分区间, mid (right left ) / 2将左右区间排序合并两个有…...
【Kubernetes】Service 的类型有哪些?ClusterIP、NodePort 和 LoadBalancer 的区别?
在 Kubernetes 中,Service 是一种抽象的方式,用于将一组 Pod 进行连接并暴露给外部或集群内部访问。它的主要目的是通过提供稳定的 IP 地址和端口来允许其他服务或客户端与一组 Pod 进行通信。 Service 类型 Kubernetes 中 Service 有四种主要类型&…...
