目录

单对象优化(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。

Pareto front

例如上图,两个目标分别是使size和cost尽可能小。蓝点都是在此基础上可以再减小cost或size,但绿点不能再减小了,如果减小一方,另一方必然增加,因此绿点组成的平面就是帕累托平面。

那么如何找出Pareto front上的点呢?

这里再引入一个新概念:dominance,翻译过来是支配。这里举一个例子,现在要设计一架飞机,需要使可走距离尽可能大,成本尽可能小,可载乘客数尽可能大,速度尽可能大。一条染色体代表一个解决方案,现在有八条染色体,从中挑选出non-dominated的个体。

dominate的判断就是两个染色体进行竞争(pair comparison),分别拿出四个值进行两两比较,如果是更优解则得一分,否则对方的一分,最后比分最大的获胜,称为获胜方dominate失败方,比完之后失败方淘汰;如果两方平局,则称互为non-dominated。下面拿图说话:

8 chromosomes/solutions

         目标:max{range}    min{cost}    max{passengers}    max{speed}

    

这样所有点两两互相比完之后,只剩下全部平局选手(non-dominated),也就是说在该集合中找不出能比它更优的解可以把它淘汰的了,因此它们都是冠军。

那么话说回来,Pareto front的目的是找出non-dominated的点。但找出的non-dominated一定是Pareto front上的点吗?

答案是否定的,因为有可能你进行实验的量不大,只是现阶段没找到比这些染色体厉害的,但不代表就没有比它更强的。因此在这一层面上可以说,你得出来的Pareto front是近似Pareto front。可以从中总结出来,

  1. Pareto front上的点一定是non-dominated的。
  2. 而non-dominated的点不一定在Pareto front上。

为了尽可能接近Pareto front,我们需要对染色体进行变化(变异和交叉互换)。{交叉互换使得出non-dominated解变得困难,最好不用}

由此可以得出GA MOO algorithm的过程:

  1. 从种群中选出一个染色体/个体(被移出种群)
  2. 对该个体进行突变或重组
  3. 将该个体插入到原种群队列中
  4. 识别non-dominated解,并移除dominated(失败解)
  5. 循环,直到达到终止条件(循环次数)

MOO存在的问题:

  1. 缺少增加基因多样性的方法,可以使解更贴近原点,从而更快更准找出最优解。
  2. 如果突变太少,会导致解聚簇现象;如果突变太多,会导致pareto front中出现缺口。
  3. 交叉重组会导致染色体在pareto front附近出现跳来跳去的局面,因此不推荐使用。
  4. 在第一步移除non-dominated的解之后,需要对其存档。
  5. 还要用另一个概念“crowding”(拥挤度)来作为适应度的选择惩罚的一部分(后面会介绍)。但是如何定义“crowding”还是一个难解决的问题,因为涉及到多维。

 总结:MOO 比SOO考虑的要更多,因为因素是独立的而且在实际中找出所有最优解是不可行的。其优点是不用知道具体各个因素的权重值或者优先级排序,不用假设面的形状。


NSGA-II

作为扩展资料,国外视频资源:https://www.youtube.com/watch?v=SL-u_7hIqjA

B站翻译版:【【加中文字幕】理解NSGA-Ⅱ的工作原理-哔哩哔哩】https://b23.tv/9SiNIv


差分进化法(DE)

一种“变异”的方法,使两对染色体之间的差值来对第三对染色体进行变化。

DE步骤为

  1. 随机选出染色体I和染色体J和K。
  2. 对于I上的每一个值,都进行重新计算,得出新值,I'=I+w(J−K),w为自规定的权重。
  3. 如果适应度f(I')>=f(I),则I'替换I。

拿图说话:

由上图可知,让w=0.5,所得新值

I´= (2+ 0.5(6-4), 4+0.5(2-4)) = (2+1, 41)= (3,3)

在(3,3)位置所得f=5,所以I’替换I.

几个需要知道的点:

  1. 有效地解决不规则或嘈杂的问题。
  2. 突变权重/缩放(w)是至关重要的,并受到当前种群中个体之间差异的影响。
  3. 权值越小(w),可探索的区域越多,但收敛速度越慢(到达最优解越慢);权值越大,可能就略过了最优解。
  4. 当种群数量增加时,应该减小w。
  5. 种群数量越大,越可能探索更多方向。

迄今为止,染色体一直代表一个最优解或者一组最优解,也就是代表着data。我们都知道data+algorithm=program。如果我们把它范围再扩大,用一个染色体代表一个程序,是不是就能通过我们的算法达到自动找出最优程序,从而达到自动编程的目的?(那这样以后可能部分程序员就失业了)

遗传编程(GP)

和遗传算法类似,只不过这里的个体不再是数据,而是算法或电脑程序了。随机生成一系列算法,经过变异、交叉、复制、删除的迭代,使得算法达到最优,最贴切。

GP的实现最终成果就是不再需要人员的参与,自动可以生成程序,但是现在,他需要程序员们告诉它如何做,给它增加算法库,才能真正达到机器学习的目的。

此过程可以分为五步:

  1. 决定一系列的逻辑变量
  2. 决定一系列的元函数
  3. 定义适应度测量方法(可以显示或隐式地测量出染色体的适应度)
  4. 计算参数控制运行
  5. 决定终止标准

几个注意的问题:

1.Tree based--相较于GA类似向量的染色体,GP是以树状的染色体为基础进行迭代进化的。

树形for表达式

树形for程序控制结构

2.元函数是从一个很大的函数库“pool”里随机挑选出来的。

3.测试元函数的好坏/适应度计算也有很多方法:真值表(truth tables, specifications, input-output pairs, database of attribute values and class value)

Mutation

如下图,突变体选中y为被替换的点,再随机选一个树的子树替换掉它。

 突变产生后的数的长度可以超过原来长度。

mutation中有两个参数:

  1. 概率Pm表示为选择突变还是重组的概率。建议为0或者较小的数。
  2. 该突变体中选择一个内部点作为被替换的子树的根(图中为y)概率。

Crossover/Recombination

如下图所示,选两个点,子树互相对换。

后代的长度可以超过亲代。 

crossover中有两个参数:

  1. 概率Pc表示为选择重组还是变异的概率。值较高,85% to 90%,因此可以看出GP中重组多
  2. 两个亲代中选择一个内部点作为被替换的子树的根概率。

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行是错的;

在crossover之后, (P^Q)v(RVS) 的fitness =16,全部正确,GP终止。

Problem——Bloat

GP最大的问题就是臃肿,因为GP的选择是最胖者生存,即树越大越容易被保留下来,而树越大意味着时间成倍增长。如何对指定问题最有效地计算适合度也是值得研究的课题。

减弱方法:避免使用可以产生很大子代的变量操作符;在算适合度时对超大小的实行惩罚机制,可以除以它的大小,让它的适合度降低。

解决方法:人为手动修改删除。

Prospect

目前GP发展前景还是很明朗的,已经在计算分子生物学,细胞自动机,分类网络,以及复杂结构(如模拟电路和控制器)的拓扑和部件尺寸的综合设计等领域取得可以和人类竞争的效果。对于完全自主的AI系统,GP可能是停止依赖人类程序员的唯一方法。

EA problem

  1. 进化算法普遍存在的问题是算出的仅是局部最优,而非全局最优解,如果要解决此问题,还需引入另一个算法——梯度下降法。这个就不在本文阐述。
  2. fitness计算量太大,影响性能。因此一般用近似fitness model进行计算(surrogate fitness)。

进化算法EA——多对象优化遗传(MOO),差分进化法(DE),遗传编程(GP)相关推荐

  1. 数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化

    数据 + 进化算法 = 数据驱动的进化优化?进化算法 PK 数学优化 https://baijiahao.baidu.com/s?id=1600164518587031730&wfr=spid ...

  2. 差分进化算法原理及优化应用

    目录 一.差分进化(differential evolution)算法的起源 二.差分进化算法的原理 (一)初始化参数

  3. 进化算法——多目标优化

    所有的实际优化问题都是多目标的,如果不是显式的至少也是隐式的.接下来讨论多目标优化问题(MOP)如何修改进化算法.实际的优化问题包含多个目标,那些目标常常互相冲突.例如: 在购买汽车时,我们可能想要车 ...

  4. 进化计算/进化算法×传统数学优化方法×机器学习

    进化算法VS传统数学优化方法 进化算法是基于种群的搜索 进化算法是随机的搜索算法,不需要梯度,不需要解析的目标函数 进化算法优势 适用于没有解析目标函数和无法得到目标函数梯度信息的优化问题 基于种群, ...

  5. 微分进化算法解决函数优化问题的matlab代码,Matlab微分进化算法及优化函数测试...

    微分进化(Difference Evolution,DE)算法是一种优化算法,据称其比GA(遗传算法)等更为优秀. 借鉴网上实现的DE算法,用Matlab实现了对若干函数优化问题的解法,代码如下: f ...

  6. 进化算法中的两种常用交叉算子SBX和DE

    SBX:模拟二进制交叉(Simulated binary crossover),需要随机选择两个父代 DE:差分进化算子(differential evolution),需要随机选择三个父代

  7. 遗传算法 差分进化算法 粒子群优化算法区别

    一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精 ...

  8. 差分进化算法_基于差分进化的水泥烧成系统动态优化算法

    基于差分进化的水泥烧成系统动态优化算法 郝晓辰, 冀亚坤, 郑立召, 史鑫, 赵彦涛 燕山大学电气工程学院,河北 秦皇岛 066004 [摘  要]针对水泥烧成过程的资源浪费以及难以建立有效数学机理模 ...

  9. 【预测模型】基于差分进化算法优化BP神经网络实现数据预测matlab源码

    1 算法介绍 2 部分代码 %% 差分进化算法应用于优化BP神经网络的初始权值和阈值%% 清空环境变量 clear all; clc; warning off load v357; load y357 ...

最新文章

  1. [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...
  2. 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
  3. (五)HTML5本地存储——Web Storage
  4. Properties类与IO流
  5. LDAP命令介绍---dsreplication
  6. python儿童入门书_一款儿童编程入门的理想工具——PythonTurtle
  7. android chrome 不支持 audio/video的autoplay 属性
  8. java实现webservice
  9. 边缘计算崛起!施耐德联手华胜天成打造胶囊数据中心,真正端到端交付
  10. 基于遗传算法的排课系统
  11. 编译生成动态链接库pdfium.dll
  12. 咪咕:笔试题(20190916)
  13. mysql 通讯录的实现_mysql中文排序并实现仿手机通讯录
  14. ubuntu最好用的划词翻译词典:有道词典和GoldenDict
  15. css video 样式,css自定义video播放器样式的方法
  16. 海马玩模拟器离线安装包下载方法
  17. 自动驾驶的分级,感知与规划基本意义
  18. 嵌入式开发笔记-STM32CudeIDE平台入门
  19. 名词诠释大全以及新站上线后,seo优化应该如何做?
  20. 雷达感应智能化技术,让家居生活更智能,雷达传感器技术应用

热门文章

  1. node ref char*_「 volute 」树莓派+Node.js造一个有灵魂的语音助手
  2. ZOJ 3557 (插板法+Lucas定理)
  3. pip使用豆瓣源进行安装下载
  4. 云计算技术体系结构由这四点组成
  5. PCB设计之EMC 47原则
  6. HFDS命令行操作(开发重点)
  7. HFDS 内部工作机制
  8. 《春·蜂》processing下的动画技术交互应用
  9. Quant面试好题汇总
  10. macOS hashcat 安装