欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    使用遗传算法求解函数最大值.docx

    • 资源ID:7536297       资源大小:77.90KB        全文页数:16页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    使用遗传算法求解函数最大值.docx

    1、使用遗传算法求解函数最大值使用遗传算法求解函数最大值题目使用遗传算法求解函数在 及y 的最大值。解答算法使用遗传算法进行求解, 篇末所附源代码中带有算法的详细注释。 算法中涉及不同的参数,参数的取值需要根据实际情况进行设定,下面运行时将给出不同参数的结果对比。H遥礙厌繇数int M = 209 f /const int len = /每个个伐的樂色依的长度 占一半const int crossnum 4; /交叉擾作时吝点交叉的交叉点个数const int maxGtneration * 1&O00; / 最大进化优数const double probCross = 0.85; / 交叉柢率c

    2、 crsl de jt le pcb-.utaticn = 3.15 j / 变异探率定义整体算法的结束条件为, 当种群进化次数达到 maxGeneration时停止,此时种群中的最优解即作为算法的最终输出。/ 酬iBtgfor (int g = g rnicGeneration; g+)设种群规模为 N,首先是随机产生 N个个体,实验中定义了类型 Chromosome表示一个 个体,并且在默认构造函数中即进行了随机的操作。“初螂七种群for (liTt 1 = 0; i N; i-H-)groupi = ChciiOGcrrr Qi然后程序进行若干次的迭代,在每次迭代过程中,进行选择、交叉及

    3、变异三个操作。一选择操作首先计算当前每个个体的适应度函数值, 这里的适应度函数即为所要求的优化函数, 然 后归一化求得每个个体选中的概率,然后用轮盘赌的方法以允许重复的方式选择选择 N个个体,即为选择之后的群体。Evo id sele 匚 t(匚 h onosorrie -m)cn)/ 计算毎double fitnessValfniKC ;fitnessVali = fitness( iJsum 4= fitnessVali;probfi fitnessVali / sun;for (irrt i = 0; i v M; i+) double 士Lim 二 0;for (irrt i = 0;

    4、 i N; i+) double probnixn;fop (int i = 0; i M; i+) H随机选攝住细5种群int seLectldmsnJ;for (int i = 1; i N; i”)pryjbi 2 probi-l; for (irrt i = 0; i M; i+)H便用笙盘赌算法询环tdouble randNum = randomOlO; int j;ar (j = 9; j N - 1 j屮 if (randNum probj) selectldi三 j; breakif (j = m - 1) selectTdl = j; /把种詩更新为新选擇的个建集含for (

    5、int = 9; i N; i+) for (int 1 = 9j i Groupl =oupi; groupi = temGro upselectlli j但实验时发现结果不好,经过仔细研究之后发现,这里在 x、y取某些值的时候,目标函数计算出来的 适应值可能会出现负值,这时如果按照把每个个体的适应值除以适应值的总总和也可能出现负值,如果归一 对实验结果造成影响。对于这 保证得到的适应值为正数, 然和的进行归一化的话会出现问题, 因为个体可能出现负值,化的时候除以了一个负值, 选择时就会选择一些不良的个体, 个问题,我把适应度函数定为目标函数的函数值加一个正数,后再进行一般的归一化和选择的操

    6、作。 实验结果表明,之前的实验结果很不稳定, 修正后的 结果比较稳定,趋于最大值。/适应度函数为童免负值.把目标函勒Lt正散 Fdouble fitne55(const 匚nroiriosotrc& c)double x, y;decode(c, y);return f(x, y) + 5;交叉操作首先是根据交叉概率 probCross选择要交叉的个体进行交叉。H限据交叉槪車进行交叉for (int i. = % pre = -1; i N; i-l-+)(if (randomSlf) probCross)if (pre = -1) pre = i;else crossover(grouppr

    7、cgroupi); pre = -1;这里根据交叉参数 cross num进行多点交叉,首先随机生成交叉点位置,允许交叉点重 合,两个重合的交叉点效果互相抵消,相当于没有交叉点,然后根据交叉点进行交叉操作, 得到新的个体。交叉擾ft .使用券点交叉void crossovertChrcmoio亡g clj ChromoscmeA c2)/生威交叉点位置.井排宮int crosspointfinxn ;forint i - Q; i crassnuffi; i+) crosspointi rand() % len: scrt(亡rosspflint er-05i|Mnt+trassnjffl):

    8、 bool flag = 9;forint i 0j j - i lerij i-n-J(IffIflag)if (i - cro55pointj) H如果若干个交叉点重合.則效果叠町. /偶数个交叉点效果於于没有交叉点whilej crcssnum i = cro55pointj) (j+; flag = Iflag;三变异操作首先是根据变异概率 probMutation选择要变异的个体。n根据变异概率遊行变异for (int i = 1 N; 1+)if trandom01() t doublu& 1)H计亘适应值.遍帀得刹最优值井逬齐解冯double fitn55ValmKTijfor

    9、(int i = 0; i N; i+) fitnessVali = fitne5S(groupi)j int id =曲;for tint i - 1; 1 fitnesValLd)id = i;decode_roupid, x,jal = f(xt y);return iti:运行结果借助matlab软件,我们可以知道该函数在该定义域下的图像为6B 数 Xx x*sinp*y)-ty*cos(p)的團像以下设置不同的参数值进行对比试验:表1不同参数的对比实验NlencrossnummaxGenerationprobCrossprobMutate实验一实验二11010410000.850.1

    10、52.614332042.7469711725010450000.850.152.871765122.88383150320020450000.850.152.892027452.893073594200304100000.850.152.894406562.888525515200305100000.80.22.888068212.8916507363004041000000.850.152.893637392.89445359以上我们主要对种群规模 N,个体染色体长度len,迭代次数maxGeneration进行比较。可以看出,随着种群规模的增大,染色体长度的增长,迭代次数的增加,算法得到

    11、的结果越 来越精确。当参数规模达到一定程度时,再增加参数的值会明显地增加程序运行时间, 但却不一定能明显改善解的质量, 反而可能因为一些随机因数而产生质量更差的解, 如第6组实验一所示。同时也大概比较了一下多点交叉的交叉点个数 cross num,交叉概率probCross,变异概率probMutate等参数,由于参数太多,这里没有一一进行控制变量的比较。 大致估算可知,交叉概率及交叉点的个数影响交叉操作产生新个体的质量, 过多的交叉及变化过大的交叉可能会产生不好的结果,而过多的变异也应该会造成算法的不稳定。下面给出以上几个实验结果的实验截图,其中到现在为止结果最好的一个为:(3lfl C:W

    12、i ndow?syite rr,32c nn岡数在点上盹酣1龙, 1柑刃砒阳7取得最大值洱-曲44阳阴 (Pv-ess: any to cont Inue . .其余若干个为:59 C:Windovw5Vy5terri32ciTtd.exe|團数在点書四19盟1.-豊-:32910阿“取得最才-直:2 - 89202745 ? ftny k耳y to (?ont久nuu .ZB C:Wi超数在点S8193970. i.32785034得最 HPress any key to continuE .大值EB C AWi n d owAsyste rm 3 2c md. exe函数在点翦942叮也:

    13、L-J2g399GG取得最大值-仙酊2551Press any ke y to continiAe -算法改进以上实验得到的最好结果仍然是差强人意, 这里对算法做一个小的优化, 即添加防止种 群退化的操作。记录当前位置所得到的最优值及对应的个体, 每次更新种群之后, 计算新种 群的最优值,如果最优值变差了,则把之前较优的个体替换进新种群, 防止种群退化;否则 更新最优值。防止硯g化double tenval;int bestld = getOptimalCgroupj temval);if (temval X值;养胡47135朝E2841 Press an key to continue .源

    14、代码改进后的源代码如下:#i nclude#i nclude#i nclude#i nclude#i ncludeusing namespace std;/程序欲分配内存的数组大小const int mxn = 10000; / /最大的种群规模const int mxle n = 1000;/最大的染色体长度/遗传算法关键参数/种群的个体数con stint N = 200;con stint len = 30;/每个个体的染色体的长度,x和y各占一半con stintcross num=4; /交叉操作时多点交叉的交叉点个数con st double probCross = 0.85; /

    15、 交叉概率const double probMutation = 0.15; / / 变异概率/个体的染色体类class Chromosomepublic :bool gmxlen;/ 二进制编码的编码数组Chromosome()/默认构造函数,构造随机染色体for (int i =();i len; i+)gi = ran d() % 2;Chromosome( constChromosome & c)/拷贝构造函数,进行深复制for (int i = 0);i len; i+)gi = c.gi;void operator=(const Chromosome &c) /重载=号,进行深复制

    16、for (int i = 0);i = len / 2; i-)tem += c .gi * q, q = q * 2;y = 1 + (2 - 1) / num * tem;tem = 0;for ( int i = len / 2 - 1, q = 1; i = 0; i-)tem += c .gi * q, q = q * 2;x = 1 + (2 - 1) / num * tem;/适应度函数,为避免负值,把目标函数加一个正数 double fitness( const Chromosome & c)double x, y;decode( c, x, y);return f(x, y)

    17、 + 5; /辅助函数,生成0-1之间的随机小数double in li ne ran dom01() return rand() % 10000 / 10000.0; /选择操作void select( Chromosome group mxn)/计算每个个体的选择概率double fit nessValmx n;for ( int i = 0; i N; i+) fitnessVali = fitness( group i);double sum = 0;for (int i = 0; i N; i+)sum += fit nessVali;double probmx n;for (int

    18、 i = 0; i N; i+)probi = fit nessVali / sum;/随机选择N个个体组成新种群int selectIdmx n;for (int i = 1; i N; i+)probi += probi-1;for (int i = 0; i N; i+)/使用轮盘赌算法选择个体doubleran dNum = ran dom01();int j;for(j =0; j N - 1; j+)if(ra ndNum probj)selectIdi = j;breakif (j = N - 1)selectIdi = j;/把种群更新为新选择的个体集合for ( int i

    19、= 0; i N; i+) temGroupi = group i;for (int i = 0; i N; i+) group i = temGroupselectldi;/交叉操作,使用多点交叉void crossover Chromosome & c1 , Chromosome & c2)/生成交叉点位置,并排序int crosspo in tmx n;for (int i = 0; i cross num; i+) c rosspo in ti = ran d() % len;sort(crosspo int, crosspo in t+cross num);/进行交叉bool fla

    20、g = 0;for (inti = 0, j =0; i le n;i+)if(!flag)swap( cl .gi,c2 .gi);if(i = crosspoi ntj)/如果若干个交叉点重合,则效果叠加/偶数个交叉点效果相当于没有交叉点while (j cross num & i = crosspo in tj)/变异操作void mutate( Chromosome & c)/随机选择一位进行翻转int i = ran d() % len;c.gi = ! c.gi;/获取种群最优个体int getOptimal( Chromosome group mxn, double & x, d

    21、ouble & y, double & val ) /计算适应值,遍历得到最优值并进行解码double fit nessValmx n;int id = 0;for (int i = 1; i fit nessValid)id = i;decode(group id, x, y);val = f(x, y);returnid;/遗传算法总代码void GA( double & x, double & y, double & val )/初始化种群for(int i = 0;i N; i+)groupi=Chromosome ();/bestC = groupgetOptimal(group,

    22、x, y , bestval);/控制进化代数for (int g = 0; g maxGe nerati on; g+)/选择操作select(group);/根据交叉概率进行交叉for (int i = 0, pre = -1; i N; i+)if (ra ndom01() probCross)if (pre = -1)pre = i;elsecrossover(grouppre, groupi);pre = -1; /根据变异概率进行变异for (int i = 0; i N; i+)if (ra ndom01() probMutatio n)mutate(groupi);/防止种群退化double temval;int bestId = getOptimal(group, x, y , temval);if (temval bestval)/如果新种群的最优值变好,则更新最优值记录 bestC = groupbestld;bestval = temval;/获取最优值getOptimal(group, x, y, val ); int mai n ()sran d(time(0);double x, y, maxval;GA(x, y, maxval); y )cout 函数在点( fixed setprecision( 15) x


    注意事项

    本文(使用遗传算法求解函数最大值.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开