遗传算法 C# 实现

笔者最近研究生课题研究一点与优化相关的内容,调研遗传算法觉得很合适(遗传算法此处不过多介绍),但网上都是matlab上面的实现方法,虽然很简单,但我要用在c#系统上面,就打算自己写一个,中间遇到了很多坑,千言万语汇成一句:写算法千万别用c#

话不多说直接上代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace GAtest
{
    public class GA
    {
        //定义种群大小、最大迭代次数、交叉概率和变异概率
        private int populationSize = 30;
        private int maxIterations = 100;
        private double crossoverProbability = 0.7;
        private double mutationProbability = 0.1;
        private int inputSize = 1;//要优化的参数个数

        //定义优化函数
        private double Evaluate(double x)
        {
            return x+10*Math.Sin(5*x)+ 7 * Math.Cos(4 * x);
        }

        //定义个体类
        class Individual
        {
            public double[] genes;//参数列表,此处例子为单参数优化
            public double fitness;//适应度值
            public List<int[]> genesCoding;//基因编码
            public Individual(double[] genes, double fitness, List<int[]> genesCoding)
            {
                this.genes = genes;
                this.fitness = fitness;
                this.genesCoding = genesCoding;
            }
        }

        //生成初始种群
        private Individual[] InitializePopulation()
        {
            Random rand = new Random(GetRandomSeed());
            Individual[] population = new Individual[populationSize];

            for (int i = 0; i < populationSize; i++)
            {
                double[] genes = new double[inputSize];

                //确定每个值的范围
                genes[0] = rand.NextDouble() * 20 - 10; //随机生成[-10,10)之间的实数
                //genes[1] = rand.NextDouble() * 4 + 1; //随机生成[1,5)之间的实数

                List<int[]> genesCoding = GenesCoding(genes);//将值转化成编码
                double fitness = Evaluate(genes[0]);
                population[i] = new Individual(genes, fitness, genesCoding);
            }

            return population;
        }
        //编码
        public List<int[]> GenesCoding(double[] individual)
        {
            List<int[]&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值