GA-遗传算法-C#代码

上传人:206****923 文档编号:91847480 上传时间:2019-07-02 格式:DOC 页数:9 大小:42.02KB
返回 下载 相关 举报
GA-遗传算法-C#代码_第1页
第1页 / 共9页
GA-遗传算法-C#代码_第2页
第2页 / 共9页
GA-遗传算法-C#代码_第3页
第3页 / 共9页
GA-遗传算法-C#代码_第4页
第4页 / 共9页
GA-遗传算法-C#代码_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《GA-遗传算法-C#代码》由会员分享,可在线阅读,更多相关《GA-遗传算法-C#代码(9页珍藏版)》请在金锄头文库上搜索。

1、using System;using System.IO;using System.Collections;using System.Collections.Generic;using System.Text;using System.ComponentModel;using System.Data;using System.Data.OleDb;namespace ConsoleApplication1 public class Genetic_Algorithm Random rand=new Random(); int MaxTime;/最大运行时间 int popsize;/种群数量

2、int ChromosomeLength;/染色体长度 double CrossRate;/交叉率 double MutateRate;/变异率 double f;/适应度值 int selected;/定义selected数组,用于表示需要进行交叉操作的染色体序号 double wheel;/轮盘 int, pregeneration;/上一代 int, nextgeneration;/下一代 int Best;/定义当前最优解 int convergence;/定义当前最优解的已持续代数 int, timeconstrait; public Genetic_Algorithm(int po

3、pulationsize, int chromolength)/GA-构造函数,变量初始化 rand = new Random(System.DateTime.Now.Millisecond); MaxTime = 50; popsize=populationsize; ChromosomeLength = chromolength; CrossRate = 0.8; MutateRate = 0.2; f = new double2*popsize; selected = new intpopsize; wheel = new doublepopsize + 1; pregeneration

4、 = new intpopsize, ChromosomeLength;/当前的染色体种群 nextgeneration = new intpopsize, ChromosomeLength;/下一代(子代)染色体种群 Best = new intChromosomeLength; convergence = 1; timeconstrait = new int20, 2 2, 6 , 1, 2 , 3, 4 , 1, 4 , 4, 7 , 3, 5 , 2, 6 , 3, 5 , 1, 4 , 3, 7 , 5, 7 , 2, 7 , 2, 4 , 4, 5 , 2, 5 , 4, 6 ,

5、3, 5 , 1, 4 , 1, 5 , 3, 6 ; public void RunGA()/运行 int i; CreateFirstPop();/产生初始种群 i = 0; bool quit = true; while (quit) for (; i MaxTime; i+) Console.WriteLine(The 0th Generation., i + 1); CalFitness(ref pregeneration, popsize);/计算适应值 PrintResult();/输出每步的结果 WheelSelect();/此步确定了selectedi的值 CreateNex

6、tGeneration();/产生子代,包括被选择为selectedi的染色体的交叉,还有变异 ProduceNext(); Console.WriteLine(Press q to quit, press Enter to continue.); if (Console.Read() = q) quit = false; else MaxTime += 50; void CreateFirstPop()/产生初始种群 Console.WriteLine(Creating first generation.n); int i,j,r; for(i=0;ipopsize;i+) for(j=0;

7、jChromosomeLength;j+) r=rand.Next(1,11); pregenerationi, j = r; void CreateNextGeneration()/产生下一代种群(经交叉、变异) int i; for (i = 0; i popsize; i+=2) Crossover(selectedi, selectedi + 1, i, i + 1);/将序号为selectedi和selectedi + 1的染色体进行交叉,产生的子代放在pregeneration中i和i+1的位置 Mutation(ref nextgeneration);/变异 void CalFi

8、tness(ref int, curgeneration,int number)/计算适应度值的函数 for (int i = 0; i number; i+) double fitness = 0; for (int j = 0; j ChromosomeLength; j+) fitness += Math.Abs(curgenerationi, j-j-1); fi = fitness; void FindMax(ref double f, out int max)/寻找数组中最大值 int i; max = 0; for (i = 1; i fmax) max = i; void Fi

9、ndMin(ref double f, out int min)/寻找数组中最小值 int i; min = 0; for (i = 1; i popsize; i+) if (fi fmin) min = i; void WheelSelect() /轮盘选择popsize个染色体(可重复),并将序号放入selected中,作为交叉的染色体 int i,j ,r; double sum; wheel0 = 0; sum = 0; for (i = 0; i popsize; i+) sum += fi; wheeli + 1 = wheeli + fi; for (i = 0; i popsize; i+) r = rand.Next(int)sum); for (j

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号