演化算法作业.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用演化算法求约束优化问题 姓名: 学号 指导老师: 1问题: 用遗传算法求解下列约束优化问题: 2 演化算法计算过程: 2.1 个体的编码: 采用实数向量编码,每一个个体是一实数对。本文采用二进制编码,自变量精度取小数点后三位,一个自变量需要二进制位数为14位,总共需要28位二进制来编码两个自变量。 2.2 译码: 将二进制编码翻译为变量的实数形式: 2.3 适应函数: 本文使用目标函数作为适应函数 2.4 选择策略: 采用轮盘赌算法。 2.5 杂交算子: 随机挑选两条不同的染色体,随机选出杂交位点,然后交换片段。完成后检查重组后的染色体是否满足约束条件,若不满足,则舍弃,恢复原染色体并重新杂交,直到完成15对染色体的杂交。 2.6 变异算子: 随机生成14个随机数对应于每条染色体的每个基因位点,若则对该基因位点进行变异。同时完成变异后检查是否满足约束条件,若不满足,则舍弃变异,恢复染色体并重新变异直到满足约束条件为止。 2.7 参数设置: 种群规模为30,最大代数为1000代,杂交概率0.9,变异概率0.1 2.8 初始化: 随机产生初始种群,自动生成初始群体,完成检查是否满足约束条件,若不满足,则重新初始化直到有30个个体满足约束条件为止。 2.9 终止条件: 算法运行所指定的最大代数后终止,即1000代后终止迭代。 3 实验结果 表1 四次实验结果比对表 迭代次数500 迭代次数1000 第一次运行 第二次运行 第三次运行 第四次运行 1.227 1.248 1.245 1.253 3.303 3.342 3.259 3.251 0.10944011045 0.09385124541 0.11469797685 0.11279980732 由表1可以看出迭代次数越多遗传算法的效果可能越好;并且多次迭代结果较为稳定,证明没有陷入局部优化。 表2 某2次迭代过程表 代数(迭代总次数1000) 1 1.289 4.363 0.05720063406280318 31 1.295 4.23 0.07322047082080911 75 1.292 4.254 0.07519561586626718 134 1.241 4.256 0.09465988458390849 137 1.225 4.262 0.09525349615511472 最终结果 1.225 4.262 0.09525349615511472 1 1.337 3.246 0.0569004294795720 3 1.321 3.306 0.06461712393829212 10 1.297 3.296 0.08375858854088097 48 1.281 3.275 0.09739037920565881 149 1.271 3.219 0.10366960257048366 最终结果 1.271 3.219 0.10366960257048366 由表2可以看出迭代结果在经过若干代后已经趋于稳定;同时随着迭代次数的增加,最优值越来越靠近目标值。 对原有遗传算法进行改进,在进行重组时将最好的两个个体保留下来直接进入下一次迭代,剩余个体继续保持原来重组方式。 表3 不同遗传算法运算比对表 原遗传算子 改进遗传算子 第三次运行 第四次运行 第五次 第六次 1.245 1.253 1.267 1.251 3.259 3.251 3.235 3.249 0.11469797685 0.11279980732 0.10687750692 0.11349618572 由表3可以看出实验结果稳定。 附录(演化算法java实现代码): import java.lang.Math; import java.util.Random; public class GA { public static final int POP_SIZE=30;//种群数目 public static String[] pop=new String[POP_SIZE];//种群编码 public static Pair[] result=new Pair[POP_SIZE];//种群代表的结果 public static final int LENGTH=28;//编码长度,因为要精确到小数点后六位,所以编为22位长,有一公式可参考 public static double[] fitness=new double[POP_SIZE];//存放种群适应度 public static final double PC=0.90;//交叉率 public stat

文档评论(0)

cc880559 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档