



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文案实验三:简单的遗传优化(3学时)一、实验目的(1)熟悉和掌握遗传算法的运行机制和求解的基本方法。(2)利用C语言编写程序实现利用遗传算法中的编码,变异,交叉,复制 来求解函数最大值。二、实验内容利用遗传算法求解函数:f(x) =xMsin (1 UTT* x) +1.0的最大值,其中,xC-1,2|。三、实验原理遗传算法是模拟生物遗传学和自然选择机理,通过人工方式构造的一类优化搜索算法,是对生物进化过程进行的一种数学仿真,是进化计算的一种重要形式。遗传算法与传统数学模型截然不同,它为那些难以找到传统数学模型的难题找出了一个解决方法。同时,遗传算法借鉴了生物科学中的某些知识,从而体现
2、了人工智能的这一交叉学科的特点。遗传算法基本机理主要分为以下三方面:1、编码与解码将问题结构变换为位串形式编码表示的过程叫做编码;相反的,将位串形式编码表示 变换为原问题结构的过程叫做解码或者译码。把位串形式编码表示叫做染色体,有时也叫做个体。2、适应度函数为了体现染色体的适应能力,引入了对问题中的每一个染色体都进行度量的函数,叫 做适应度函数(fitness function )。通过适应度函数来决定染色体的优劣程度,它体现了 自然界进化中的优胜劣汰原则。对于优化问题,适应度函数就是目标函数。3、遗传操作简单的遗传算法操作主要有三种:选择( selection )、交叉(crossover
3、)、变异 (mutation )。改进的遗传算法大量扩充了遗传操作,以达到更高的效率。选择操作也叫做复制操作(reproduction )操作,根据个体的适应度函数值所度量的 优劣程度决定它在下一代是被淘汰还是被遗传。交叉操作的简单方式是将被选择出的两个个体P1和P2乍为父母个体,将两者的部分码值进行交换。变异操作的简单方式是改变数码串的某个位置上的数码。四、实验步骤1、初始化种群;2、计算种群上每个个体的适应度值;3、按由个体适应度值所决定的某个规则选择将进入下一代的个体4、按概率Pc进行交叉操作5、按概率Pc进行变异操作6、若没有满足某种停止条件,则转步骤2),否则进入下一步;7、输入种群
4、中适应度值最优的染色体作为问题的满足解或最优解五、实验报告要求1、按实验报告书的格式书写实验报告2、简明扼要地将实验步骤写清楚3、事实求是地填写实验结果4、对实验结果、实验操作过程中遇到的问题进行认真分析讨论。六、程序代码const int MAX = 4194304;const int MIN = 0;#include <iostream>#include <time.h>产生随机数要用到time(int),以使每次产生的数不同。#include <math.h> /sin(float)在这儿。 using namespace std;const doub
5、le pi = 3.1415926;class Individuality private: int chromosome; 染色体 public:void set(int chromosome) this->chromosome = chromosome; Individuality operator =(Individuality c) this->chromosome = c.chromosome; return *this; bool operator =(Individuality c) return this->chromosome = c.chromosome;
6、 float resolve() /通过染色体取得 x的值. return -1.0 + (float)chromosome * 3.0 / (MAX - 1); float evaluate。求 f()return resolve() * (float)sin(10*pi*resolve() + 1.0;void print() cout << 't'for(int j = 21; j >= 0; j-)以下循环是在以二进制串的形式打印染色体if(1<<j) & chromosome) cout << '1'e
7、lse cout << '0' cout << "ttx = " << resolve() << "tf(x) = " << evaluate() << endl;/以下是对当前个体进行变异的操作Individuality variate() int i = rand() % 21 + 1; this->chromosome A= 1<<i; return *this;以下是两个个体进行交叉,并且返回两个新个体的操作void crisscross(I
8、ndividuality prnt1, Individuality prnt2, Individuality &child1, Individuality &child2) int i = rand() % 21 + 1;int tempi = prntl.chromosome;int temp2 = prnt2.chromosome;int temp = 0; for(; i < 22; i+) temp += 1<<i; tempi &= temp; temp2 &= temp; prntl.chromosome &=temp; p
9、rnt2.chromosome &=temp; prntl.chromosome |= temp2; prnt2.chromosome |= tempi; childl = prnti;child2 = prnt2; ;const int POP_SIZE = 200;/建立一个种群的类,并且有固定的大小每次遗传,选出f(x)的排名在前50%的个体进行遗传(排名通过希尔排序实现),都会有约1%的个体变异,10%的个体发生交叉遗传,其余的直接遗传。每次遗传都记录下本次f(x)为最大的个体 Max。遗传150次,如果过程中发现已有 30代的Max一直不变了,说明已达 到最优,基本不需要再遗
10、传了,所以提前跳出循环。class Population private:Individuality indPOP_SIZE; public: Population。 for(int i = 0; i < POP_SIZE; i+) indi.set( (double)rand()/(double)RAND_MAX) * MAX + MIN);void shellSort() int gap, i, j; Individuality temp; for(gap = POP_SIZE/2; gap > 0; gap /= 2) for(i = gap; i < POP_SIZE
11、; i+) for(j=i-gap; j>=0 && indj.evaluate() < indj+gap.evaluate(); j -= gap) temp = indj;indj = indj+gap; indj+gap = temp; void inherit() Population:shellSort();const int NT = POP_SIZE / 2;int nc = (rand() % (POP_SIZE/10) + (POP_SIZE/4) / 2;int nv = rand() % (POP_SIZE/100+1) + (POP_SIZE
12、/100);int i, n1, n2;Individuality tempNT;for( i=0; i < NT; i+)tempi = indi;for(i = 0; i < nv; i+) n1 = rand() % NT;indi = tempn1.variate();for(i = nv; i < nc; i += 2) n1 = rand() % NT;n2 = rand() % NT;Individuality tempi, temp2;temp->crisscross(tempn1, tempn2, tempi, temp2);indi = tempi;
13、 indi+1 = temp2;for(i = nv+nc*2; i < POP_SIZE; i+) n1 = rand() % NT;indi = tempn1;Individuality getMax() Individuality max = ind0;for(int i = 0; i < POP_SIZE-1; i+) if( indi+1.evaluate() > indi.evaluate() ) max = indi+1;return max;void traverse( ) for(int i = 0; i < POP_SIZE; i+)indi.print();cout << endl;int main() srand( (unsigned)time( NULL );Population a;a.traverse();int count = 0;int gen = 0;for(int i = 0; i < 150; i+) Individuality temp = a.getMax();a.inherit();if(a.get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CFA考试重难点分析与试题及答案
- CFA考试考生的真实经历试题及答案
- 新能源行业分类
- CFA金融职责试题及答案解析
- 2024年特许金融分析师考试个人总结试题及答案
- CFA考试复习法与试题答案探讨
- 创业策划书:大学生创业之路
- 西红柿的创意美术
- 教育机构摄影摄像培训
- 第7.3课《赤壁赋》(教学课件)-【中职专用】高一语文同步课堂
- 发电厂检修文件包-作业指导书-锅炉长杆吹灰器
- 班级共读《一年级大个子二年级小个子 》班级读书会(课堂PPT)
- 电力安全工作规程(营销部分)题库(附答案)
- 广联达钢筋输入规则
- 启闭机房脚手架工程施工专项方案
- 防毒面具使用说明
- 浦东改革开放30周年(课堂PPT)
- 基于ADAMS的悬置刚度仿真指南
- 放线测量复核记录(自动计算表)
- 电梯配件价格表
- AQL抽样检验标准
评论
0/150
提交评论