目录
单对象优化(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),分别拿出四个值进行两两比较