进化算法EA——多对象优化遗传(MOO),差分进化法(DE),遗传编程(GP)
目录
单对象优化(SOO)vs多对象优化(MOO)
多对象优化(MOO)
NSGA-II
差分进化法(DE)
遗传编程(GP)
EA problem
单对象优化(SOO)vs多对象优化(MOO)
1.目标函数个数
单对象优化是针对一个目标函数(objective function)的解决办法。例如:生产饼干的质量最大化、寻求最短路径(TSP)。
多对象优化是针对多个起冲突的目标函数寻求最佳解的方法。想要寻求的最佳解视具体情况而定。例如:小偷旅行的问题(travelling thief problem),它是背包旅行问题(Knapsack problem)和旅行商问题(travelling salesman problem)的结合。具体情境是,小偷要去许多户人的家里偷东西,每户人家只经过一次,并且只拿了个麻袋,偷的东西重量不能超过麻袋所承受的重量,要求小偷的路径最短并且偷的东西价值最大。在这个情境下,路程、价值、重量都是目标函数,而路径短和价值大是最终寻求的最佳解。
值得注意的是,如果知道各适应度值的占比,也属于单对象优化问题。因为可以引入一个新对象,并用其他各适应度*占比加起来表示它。例如:f(biscuit)= (0.7*f(quality)) + (0.3*f(cost)),则f(biscuit)作为一个新的适应度函数,并应用单对象遗传算法进行计算。
2.最佳解个数
单对象优化最终求得一个最佳解;而多对象优化求得是一组解,各个解之间的关系是平等的,不可缺一,在二维平面上表示的是一条线。
3.应用范围
在工程和工厂领域中,多对象应用更广泛,因为它针对的是不同目标的一系列“权衡”(trade-off),结果可以帮助管理人员做决策。
由于另一篇文章已经介绍过单对象遗传算法,这里着重介绍多对象优化。
多对象优化(MOO)
这里首先引入一个新概念:Pareto front,翻译过来是帕累托平面。当出现两个互相冲突的对象,最佳解组成的平面叫做帕累托平面。而MOO的目标就是求Pareto front。
例如上图,两个目标分别是使size和cost尽可能小。蓝点都是在此基础上可以再减小cost或size,但绿点不能再减小了,如果减小一方,另一方必然增加,因此绿点组成的平面就是帕累托平面。
那么如何找出Pareto front上的点呢?
这里再引入一个新概念:dominance,翻译过来是支配。这里举一个例子,现在要设计一架飞机,需要使可走距离尽可能大,成本尽可能小,可载乘客数尽可能大,速度尽可能大。一条染色体代表一个解决方案,现在有八条染色体,从中挑选出non-dominated的个体。
dominate的判断就是两个染色体进行竞争(pair comparison),分别拿出四个值进行两两比较,如果是更优解则得一分,否则对方的一分,最后比分最大的获胜,称为获胜方dominate失败方,比完之后失败方淘汰;如果两方平局,则称互为non-dominated。下面拿图说话:
目标:max{range} min{cost} max{passengers} max{speed}
这样所有点两两互相比完之后,只剩下全部平局选手(non-dominated),也就是说在该集合中找不出能比它更优的解可以把它淘汰的了,因此它们都是冠军。
那么话说回来,Pareto front的目的是找出non-dominated的点。但找出的non-dominated一定是Pareto front上的点吗?
答案是否定的,因为有可能你进行实验的量不大,只是现阶段没找到比这些染色体厉害的,但不代表就没有比它更强的。因此在这一层面上可以说,你得出来的Pareto front是近似Pareto front。可以从中总结出来,
- Pareto front上的点一定是non-dominated的。
- 而non-dominated的点不一定在Pareto front上。
为了尽可能接近Pareto front,我们需要对染色体进行变化(变异和交叉互换)。{交叉互换使得出non-dominated解变得困难,最好不用}
由此可以得出GA MOO algorithm的过程:
- 从种群中选出一个染色体/个体(被移出种群)
- 对该个体进行突变或重组
- 将该个体插入到原种群队列中
- 识别non-dominated解,并移除dominated(失败解)
- 循环,直到达到终止条件(循环次数)
MOO存在的问题:
- 缺少增加基因多样性的方法,可以使解更贴近原点,从而更快更准找出最优解。
- 如果突变太少,会导致解聚簇现象;如果突变太多,会导致pareto front中出现缺口。
- 交叉重组会导致染色体在pareto front附近出现跳来跳去的局面,因此不推荐使用。
- 在第一步移除non-dominated的解之后,需要对其存档。
- 还要用另一个概念“crowding”(拥挤度)来作为适应度的选择惩罚的一部分(后面会介绍)。但是如何定义“crowding”还是一个难解决的问题,因为涉及到多维。
总结:MOO 比SOO考虑的要更多,因为因素是独立的而且在实际中找出所有最优解是不可行的。其优点是不用知道具体各个因素的权重值或者优先级排序,不用假设面的形状。
NSGA-II
作为扩展资料,国外视频资源:https://www.youtube.com/watch?v=SL-u_7hIqjA
B站翻译版:【【加中文字幕】理解NSGA-Ⅱ的工作原理-哔哩哔哩】https://b23.tv/9SiNIv
差分进化法(DE)
一种“变异”的方法,使两对染色体之间的差值来对第三对染色体进行变化。
DE步骤为:
- 随机选出染色体I和染色体J和K。
- 对于I上的每一个值,都进行重新计算,得出新值,I'=I+w(J−K),w为自规定的权重。
- 如果适应度f(I')>=f(I),则I'替换I。
拿图说话:
由上图可知,让w=0.5,所得新值
I´= (2+ 0.5(6-4), 4+0.5(2-4)) = (2+1, 4−1)= (3,3)
在(3,3)位置所得f=5,所以I’替换I.
几个需要知道的点:
- 有效地解决不规则或嘈杂的问题。
- 突变权重/缩放(w)是至关重要的,并受到当前种群中个体之间差异的影响。
- 权值越小(w),可探索的区域越多,但收敛速度越慢(到达最优解越慢);权值越大,可能就略过了最优解。
- 当种群数量增加时,应该减小w。
- 种群数量越大,越可能探索更多方向。
迄今为止,染色体一直代表一个最优解或者一组最优解,也就是代表着data。我们都知道data+algorithm=program。如果我们把它范围再扩大,用一个染色体代表一个程序,是不是就能通过我们的算法达到自动找出最优程序,从而达到自动编程的目的?(那这样以后可能部分程序员就失业了)
遗传编程(GP)
和遗传算法类似,只不过这里的个体不再是数据,而是算法或电脑程序了。随机生成一系列算法,经过变异、交叉、复制、删除的迭代,使得算法达到最优,最贴切。
GP的实现最终成果就是不再需要人员的参与,自动可以生成程序,但是现在,他需要程序员们告诉它如何做,给它增加算法库,才能真正达到机器学习的目的。
此过程可以分为五步:
- 决定一系列的逻辑变量
- 决定一系列的元函数
- 定义适应度测量方法(可以显示或隐式地测量出染色体的适应度)
- 计算参数控制运行
- 决定终止标准
几个注意的问题:
1.Tree based--相较于GA类似向量的染色体,GP是以树状的染色体为基础进行迭代进化的。
2.元函数是从一个很大的函数库“pool”里随机挑选出来的。
3.测试元函数的好坏/适应度计算也有很多方法:真值表(truth tables, specifications, input-output pairs, database of attribute values and class value)
Mutation
如下图,突变体选中y为被替换的点,再随机选一个树的子树替换掉它。
突变产生后的数的长度可以超过原来长度。
mutation中有两个参数:
- 概率Pm表示为选择突变还是重组的概率。建议为0或者较小的数。
- 该突变体中选择一个内部点作为被替换的子树的根(图中为y)概率。
Crossover/Recombination
如下图所示,选两个点,子树互相对换。
后代的长度可以超过亲代。
crossover中有两个参数:
- 概率Pc表示为选择重组还是变异的概率。值较高,85% to 90%,因此可以看出GP中重组多
- 两个亲代中选择一个内部点作为被替换的子树的根概率。
Example
用布尔值判断程序好坏的例子:
上图为需要生成的程序最后要完成的目标,如果能生成一个和左图一样的结果就是最佳程序。
1.识别逻辑变量:P,Q,R,S,()
2.识别元函数:逻辑操作符(˄,˅,¬)
3.适应度测量:结果与outcome column相同的数量
4.这里没有展示控制运行的参数,如种群数,表达式长度
5.识别终止条件:程序输出结果与outcome结果完全相同
(P^Q)^(R^S)组合时fitness=1:只有最后一行是对的;
(PvQ)v(RvS) fitness 14:组合时第5行和第9行是错的;
Problem——Bloat
GP最大的问题就是臃肿,因为GP的选择是最胖者生存,即树越大越容易被保留下来,而树越大意味着时间成倍增长。如何对指定问题最有效地计算适合度也是值得研究的课题。
减弱方法:避免使用可以产生很大子代的变量操作符;在算适合度时对超大小的实行惩罚机制,可以除以它的大小,让它的适合度降低。
解决方法:人为手动修改删除。
Prospect
目前GP发展前景还是很明朗的,已经在计算分子生物学,细胞自动机,分类网络,以及复杂结构(如模拟电路和控制器)的拓扑和部件尺寸的综合设计等领域取得可以和人类竞争的效果。对于完全自主的AI系统,GP可能是停止依赖人类程序员的唯一方法。
EA problem
- 进化算法普遍存在的问题是算出的仅是局部最优,而非全局最优解,如果要解决此问题,还需引入另一个算法——梯度下降法。这个就不在本文阐述。
- fitness计算量太大,影响性能。因此一般用近似fitness model进行计算(surrogate fitness)。
进化算法EA——多对象优化遗传(MOO),差分进化法(DE),遗传编程(GP)相关推荐
- 数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化
数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化 https://baijiahao.baidu.com/s?id=1600164518587031730&wfr=spid ...
- 差分进化算法原理及优化应用
目录 一.差分进化(differential evolution)算法的起源 二.差分进化算法的原理 (一)初始化参数
- 进化算法——多目标优化
所有的实际优化问题都是多目标的,如果不是显式的至少也是隐式的.接下来讨论多目标优化问题(MOP)如何修改进化算法.实际的优化问题包含多个目标,那些目标常常互相冲突.例如: 在购买汽车时,我们可能想要车 ...
- 进化计算/进化算法×传统数学优化方法×机器学习
进化算法VS传统数学优化方法 进化算法是基于种群的搜索 进化算法是随机的搜索算法,不需要梯度,不需要解析的目标函数 进化算法优势 适用于没有解析目标函数和无法得到目标函数梯度信息的优化问题 基于种群, ...
- 微分进化算法解决函数优化问题的matlab代码,Matlab微分进化算法及优化函数测试...
微分进化(Difference Evolution,DE)算法是一种优化算法,据称其比GA(遗传算法)等更为优秀. 借鉴网上实现的DE算法,用Matlab实现了对若干函数优化问题的解法,代码如下: f ...
- 进化算法中的两种常用交叉算子SBX和DE
SBX:模拟二进制交叉(Simulated binary crossover),需要随机选择两个父代 DE:差分进化算子(differential evolution),需要随机选择三个父代
- 遗传算法 差分进化算法 粒子群优化算法区别
一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精 ...
- 差分进化算法_基于差分进化的水泥烧成系统动态优化算法
基于差分进化的水泥烧成系统动态优化算法 郝晓辰, 冀亚坤, 郑立召, 史鑫, 赵彦涛 燕山大学电气工程学院,河北 秦皇岛 066004 [摘 要]针对水泥烧成过程的资源浪费以及难以建立有效数学机理模 ...
- 【预测模型】基于差分进化算法优化BP神经网络实现数据预测matlab源码
1 算法介绍 2 部分代码 %% 差分进化算法应用于优化BP神经网络的初始权值和阈值%% 清空环境变量 clear all; clc; warning off load v357; load y357 ...
最新文章
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...
- 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
- (五)HTML5本地存储——Web Storage
- Properties类与IO流
- LDAP命令介绍---dsreplication
- python儿童入门书_一款儿童编程入门的理想工具——PythonTurtle
- android chrome 不支持 audio/video的autoplay 属性
- java实现webservice
- 边缘计算崛起!施耐德联手华胜天成打造胶囊数据中心,真正端到端交付
- 基于遗传算法的排课系统
- 编译生成动态链接库pdfium.dll
- 咪咕:笔试题(20190916)
- mysql 通讯录的实现_mysql中文排序并实现仿手机通讯录
- ubuntu最好用的划词翻译词典:有道词典和GoldenDict
- css video 样式,css自定义video播放器样式的方法
- 海马玩模拟器离线安装包下载方法
- 自动驾驶的分级,感知与规划基本意义
- 嵌入式开发笔记-STM32CudeIDE平台入门
- 名词诠释大全以及新站上线后,seo优化应该如何做?
- 雷达感应智能化技术,让家居生活更智能,雷达传感器技术应用