文章目录

  • 目录
    • 两者概览
      • 两者的主要应用
      • GA遗传算法简介
      • SA模拟退火算法简介
    • GA
      • 编码
      • 适应度函数
      • 进化方式(交叉,变异)
    • SA
    • ~~个人感想~~

目录

两者概览

两者的主要应用

可以主要应用于优化问题和搜索问题

GA遗传算法简介

遗传算法(Genetic Algorithms,简称 GA)是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,它是模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。遗传算法的实质是通过群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解或准最优解。它必须做以下操作:初始群体的产生、求每一个体的适应度、根据适者生存的原则选择优良个体、被选出的优良个体两两配对,通过随机交叉其染色体的基因并随机变异某些染色体的基因后生成下一代群体,按此方法使群体逐代进化,直到满足进化终止条件。
抛去生物概念简单来讲就是:理解为数个等长字符数字串(初始种群,当然有不同编码方式),根据问题及字符串数据得到每个字符串的函数值(适者生存,即适应度函数值),随后对得到的字符串可进行字符的改变(变异)或是两个字符串交换一段字符(随机交叉其染色体的基因),得到新一代字符串,选出适应度函数优的字符串群体(适者生存),重复操作知道满足满足要求。

SA模拟退火算法简介

模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。完全冷却时就是问题求解结果。
抛去物理学概念简单来讲就是:一开始设定一个较高的值T(模拟温度,有点类似于循环次数),每次通过一定的原则对原数据进行改变,改变后计算”能量“,根据接受准则决定是否接受改变的数据,直至温度冷却后。算法终止。

GA

一般步骤

  1. 根据具体问题确定可行解域,确定一种编码方法,能用数值串或字符串表示可行解域的每一解。(编码方式有多种,一般二进制编码方式居多)
  2. 对每一解应有一个度量好坏的依据,它用一函数表示,叫做适应度函数,适
    应度函数应为非负函数
  3. 确定进化参数群体规模 M 、交叉概率 pc 、变异概率 pm 、进化终止条件。

编码

编码方式有多种,一般二进制较多,也较为简单。例如求某函数f(x)在[0 10]内的最大值,则可以设置4位二进制数,可表示的数字范围位0~255,代表0到10这个范围的数字被255个数字代替,那么就显然所产生了精度问题,本例的精度为(10-0)/255,可根据求解问题确定适宜的位数。其他涉及的就是二进制与十进制的转化问题。当然还有字符编码,十进制编码(在交叉与变异时会产生问题)

适应度函数

如果是上面那个例子,就是带入x计算函数值比较即可,选择适应度大的作为优良种群。当然如果仅仅选择适应度大的作为下一代,很有可能会使一些目前来看虽然适应度不大但很有潜力(与最优解的自变量值有微小差别)值被淘汰掉而忽略了最优解,那么随之而来就产生一种选择方法,适应度大不代表一定被选中,适应度小不代表无法被选中。比较简单的一种就是轮盘赌法(复杂的我菜也没学),简而言之就是按照每个自变量的的适应度占种群适应度和的比值成为自己的被选中的概率,具体操作见下例:
:三个自变量的选中概率:0.1 0.4 0.5
那么就可以产生一个0~1的随机数,数字落在0-0.1(区间大小0.1=概率)则选择0.1对应的自变量,落在0.1-0.5(区间大小0.4)选择0.4对应的自变量,落在0.5-1(区间大小0.5)0.1对应的自变量

进化方式(交叉,变异)

对于单纯的二进制编码,变异和交叉都比较简单。

  1. 变异。就是改变二进制中的某个数字。比如原数据0000 1000对应x值为8
    变异结果变成1000 1000对应x值为136,x值变了对应的适应度也产生相应变化,那么种群发生变化就可以选择新种群了

  2. 交叉,可以单点交叉,也可以多点交叉。单点交叉就是两条等长绳子选择相同比例的一点然后交换该切割点后的两条线段产生新的绳子。例如:0000 0000和1111 1111如果选择第三个点为交叉点,那么就变为1110 0000和0001 1111,值就产生变化。多点交叉同上,就是不止一个点(并不是点越多越好,可以查看一些权威的资料)

  3. 这时候我们考虑一下,如果采用十进制编码会是什么样子。
    0123456789和1234567890交叉变成1233456789和0124567890这就产生了重复,对于上面的对应自变量值是没有问题的,但如果是旅行商问题,每个数字(或者字符)就代表不同的城市,这时出现相同数字就肯定不行了,我们还有一些办法可以交叉后进行修正,这里就不再提及了。

SA

模拟退火算法相较遗传算法理解起来简单一些。
比如对应tsp问题,一个解空间为abdca,计算其路径长度为m
下一步变化该解空间也有一些方法比如交换该序列中某两个字母的顺序,或者将某两个字母间的顺序颠倒等。假设变化后为adbca再次计算路径长度n
按照图示公式进行选择,其中Δf=n-m,p为选择新解的概率,T为当前迭代的温度。(该接受准则中的公式应该是热力学中的一个简化公式)。每次迭代温度不断降低,直至能满足条件或迭代终止即可

个人感想

如有错误,请直接指出
这些乍一看不就是对原数据进行改变吗,虽然一定程度上是启发式搜索,为什么能得到最优解(较好的解)呢,而且哪些改变感觉就是比较随机的改变,可能这就是概率统计中的魅力吧(某些原理吧)
参考自:
1:https://blog.csdn.net/weixin_30352645/article/details/98830852
2:https://blog.csdn.net/qq_34554039/article/details/90294046?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162934942816780264034851%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=162934942816780264034851&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~hot_rank-2-90294046.pc_v2_rank_blog_default&utm_term=%E6%A8%A1%E6%8B%9F%E9%80%80%E7%81%AB%E7%AE%97%E6%B3%95matlab&spm=1018.2226.3001.4450
3《数学建模算法全收录》

模拟退火算法和遗传算法原理简述相关推荐

  1. Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述

    - title: Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述 - date: 2021/8/14 文章目录 CAS全称 Compare And Swap,是一种 ...

  2. 【最优化方法】穷举法 vs. 爬山法 vs. 模拟退火算法 vs. 遗传算法 vs. 蚁群算法

    一. 穷举法 列举所有可能,然后一个个去,得到最优的结果.如图一,需要从A点一直走到G点,才能知道,F是最高的(最优解).这种算法得到的最优解肯定是最好的,但也是效率最低的.穷举法虽然能得到最好的最优 ...

  3. 大白话解析模拟退火算法、遗传算法入门

    优化算法入门系列文章目录(更新中): 1. 模拟退火算法 2. 遗传算法 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每 ...

  4. 集体智慧编程——优化搜索算法:爬山法,模拟退火算法,遗传算法-Python实现

    在优化问题中,有两个关键点 代价函数:确定问题的形式和规模之后,根据不同的问题,选择要优化的目标.如本文涉及的两个问题中,一个优化目标是使得航班选择最优,共计12个航班,要使得总的票价最少且每个人的等 ...

  5. matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法

    智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...

  6. 美赛 8:模拟退火算法、遗传算法、粒子群算法(智能算法篇)

    目录 一.模拟退火算法(Simulated annealing algorithm,SA) 1.SA的基本理论 2.SA求解函数最值 3.SA工具箱 二.遗传算法(Genetic Algorithm, ...

  7. 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    一.模拟退火算法 模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解.它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降 ...

  8. 【GA算法】遗传算法原理及其Matlab代码

    翻阅几篇遗传算法的文章,这篇通俗易懂,且逻辑清楚,最适合入门,不用担心遗漏关键点. 遗传算法,先选择,交叉和变异顺序可更换. 轮盘赌部分,参考了另外一篇文章的解释. 此外,还有一些有价值的文献: 选择 ...

  9. 基于遗传算法和模拟退火算法改进的混合模拟退火算法(解决求函数极值问题,MATLAB代码已实现)

    基本思想: 混合模拟退火算法时遗传算法和模拟退火算法的结合,在混合模拟退火算法中使用了大量的样本作为问题的可能解决方案而不是将单个样本作为一个问题的可能解决方案.对遗传算法中适应的概念进行相应改进. ...

最新文章

  1. staruml无法打开mdj文件_StarUML使用说明
  2. Linux基础知识(2)
  3. 只能输入正整数 已经常用的正则表达式
  4. python秒表游戏_数学游戏Tkinter中的Python计时器
  5. BigDecimal 部署测试环境精度丢失
  6. TCP/IP网络编程之域名及网络地址
  7. 使用 Multipath TCP 为 iOS 创建备份连接(转)
  8. 设计模式(外观模式)
  9. 网络数据库的复制和同步(一)
  10. Java实现mysql的读写分离
  11. html+css基础-1-屏幕居中、双飞翼布局、清除浮动
  12. ps4html5播放器,PS4终获得全新媒体播放器 允许从PC或U盘串流媒体
  13. 适合小学生阅读的六本历史国学经典推荐。
  14. win10 +cude9.2+相匹配的cudnn+相匹配的tensorflow+ssd学习之路(问题百出1)
  15. wxpy 扫码登录微信报错 KeyError: pass_ticket(网页版微信登录失败)
  16. 虚拟现实(VR)技术的升级应用|时空克隆 三维视频融合 投影融合 点卯 魔镜系列
  17. html微信公众平台登录界面,微信公众平台登录界面在哪里
  18. 无人机航测技术在地形测绘中的应用
  19. Java基础——Arrays类的排序方法
  20. 芯准TSN系统的测试与验证(1)——测试环境配置

热门文章

  1. win10 64位安装绿色版mysql-5.7.16-winx64
  2. python用模块读取xml文件_python读取xml文件
  3. 学习Photoshop的一点心得
  4. 超级好的Sql Server数据库开发与管理软件--Toad for SQL Server
  5. c语言关于循环结构的心得体会,C语言学习:循环结构语句for
  6. 第一代计算机网络的基本构成,计算机网络基本硬件及构成.ppt
  7. Android Senor Framework (三)SensorService启动
  8. 抗疫三年,“医”路有你
  9. 关于学生毕业论文的建议
  10. 预告|年度总决赛即将打响, 20余个项目角逐嘉兴经开区