生活中许多问题都是由相互冲突和影响的多个目标组成。人们会经常遇到使多个目标在给定区域同时尽可能最佳的优化问题,也就是多目标优化问题。优化问题存在的优化目标超过一个并需要同时处理就成为多目标优化问题。

多目标优化问题在工程应用等现实生活中非常普遍并且处于非常重要的地位,这些实际问题通常非常复杂、困难,是主要研究领域之一。自20世纪60年代早期以来多目标优化问题吸弓了越来越多不同背景研究人员的注意力。因此,解决多目标优化问题具有非常重要的科研价值和实际意义。

实际中优化问题大多数是多目标优化问题,一般情况下,多目标优化问题的各个子目标之间是矛盾的,一个子目标的改善有可能会引起另一个或者另几个子目标的性能降低,也就是要同时使多个子目标一起达到最优值是不可能的,而只能在它们中间进行协调和折中处理,使各个子目标都尽可能地达到最优化。其与单目标优化问题的本质区别在于,它的解并非唯一,而是存在一组由众多Pareto最优解组成的最优解集合,集合中的各个元素称为Pareto最优解或非劣最优解。

一般地,多目标规划问题(multi-objective programming,MOP)可以描述成如下形式:

在两个目标函数中,它们之间可能是存在着一定的矛盾,也就是说,当一个目标函数的提高需要以另外一个目标函数的降低作为代价。在这个时候,我们就称,这样的两个解是非劣解,也就是长说的Pareto最优解。多目标优化算法就是要找到这些Pareto最优解。

简单的解决形式

一般采用两个目标函数加权相加的形式。加权可以解决两个目标函数量纲不一致,或者变化剧烈程度不一致的问题,不过权重本身需要人为选取。

一般不使用乘法来组合目标函数,因为这样会使得导数的形式变得复杂。

方法一

MOEA/D  单目标转换法

他的思想是基于分解的方法,把一个多目标优化问题转成一组单目标的问题,然后同时求解这一组问题,从而得出一组解。
当然他这个方法还有一部分是关于结合进化算法的,这里不展开,只提他的分解的思想。
具体的方法是把多目标每一个子目标归一化,然后给每个目标赋予一个权值,然后通过不断调整这些权值,从而获得一组不同权值的单目标问题,然后再去同时解决这一组问题。

比如只考虑2个目标,那么权值可以划分成(1,0),(0.9,0.1),。。。,(0,1)这样一组问题,然后依次往后求解。

方法二  绘制出pareto curve

无非就是目标函数加权或者绘制出pareto curve。可以证明的是每个选定参数加权目标函数得到的解其实都是在pareto curve上面的。不过在目标函数很多的时候,其实得到pareto curve是不太现实的,计算量略大。而且并不是解越多就越好。

我之前的应用是用来做决策支持的,所以求解过程不求得到全部的解,但是我需要得到的每一个解差异足够大,这样我在取舍的时候相对容易一些。基于此,在得到第一个解(加权目标函数)之后,把这个解重新加回到原问题里面,要求新的解跟已有解的差异最大化,以此类推。我可以在任何时候停止这个算法,但是可以确保我得到的几个解差异是足够大的。实际应用中,这样计算量大大减少,解之间的差异也足够大。如果需要话pareto curve,就多拿几个解,对pareto curve的全貌也有个大概理解了。
 
 
 
实例
NSGA-II 算法实例
目前的多目标优化算法有很多, Kalyanmoy Deb的带精英策略的快速非支配排序遗传算法(NSGA-II) 无疑是其中应用最为广泛也是最为成功的一种
gamultiobj,该函数是基于NSGA-II改进的一种多目标优化算法

从图1可以看出Pareto前分布较均匀,多样性较好。

[MCM] 多目标优化 MOP(multi-objective programming)的更多相关文章

  1. Algorithm-多目标优化-博文路径

    参考博文: 多目标进化算法(MOEA)概述: https://blog.csdn.net/qithon/article/details/72885053 多目标优化问题的算法及其求解: https:/ ...

  2. 多目标优化算法(一)NSGA-Ⅱ(NSGA2)(转载)

    多目标优化算法(一)NSGA-Ⅱ(NSGA2) 本文链接:https://blog.csdn.net/qq_40434430/article/details/82876572多目标优化算法(一)NSG ...

  3. 单目标优化问题 常用的 测试函数(MATLAB版)

    ############################################### #                测试函数                     # ######## ...

  4. JavaScript 目标装配式编程(Target Assemble Programming)

    TAP概述 脚本中一切皆对象,若还以传统模式思考编程模式,那简直是对不起脚本解释器的强大支持:我们应该以最接近人类操作方式的来表达人的意图. 更接近工作实践的方式,比如游戏中,一个人物一个角色,人物的 ...

  5. MOPSO 多目标例子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...

  6. MOPSO 多目标粒子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...

  7. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  8. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  9. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

随机推荐

  1. SpringBoot史前简述

    背景 大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML. 在二十世纪初期,新兴Java技术——Spring,横空出世.使用极简XML和POJO(普通J ...

  2. 理解Promise的3种姿势

    译者按: 对于Promise,也许你会用了,却并不理解:也许你理解了,却只可意会不可言传.这篇博客将从3个简单的视角理解Promise,应该对你有所帮助. 原文: Three ways of unde ...

  3. 关于openSetting通过tap的调用

    问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本 API和组件 小程序 Bug openSetting 工具 6.7.2 2.3.0 - 当前 Bug 的表现(可附上截图 ...

  4. CSS-水平和垂直居中

    div中水平和垂直居中 width:200px;height:200px; /*设置div的大小*/ border:1px solid green; /*边框*/ text-align: center ...

  5. canvas-a13prototype.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. iOS----------开发中常用的宏有那些

    OC对象判断是否为空? 字符串是否为空 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || ...

  7. Android SurfaceView实现跟随手指移动的光标

    实例 public class DragSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ priv ...

  8. <自动化测试方案_3>第三章、怎么样实现自动化测试?(How)

    第三章.怎么样实现自动化测试?(How) 自动化测试分为:代码单元自动化测试.API接口自动化测试.UI自动化测试 代码单元自动化测试,一般是无法做到的,因为项目的原因,代码单元是不做自动化,其测试是 ...

  9. Ubuntu-18.04安装Docker

    Docker 介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  10. Spark集群搭建【Spark+Hadoop+Scala+Zookeeper】

    1.安装Linux 需要:3台CentOS7虚拟机 IP:192.168.245.130,192.168.245.131,192.168.245.132(类似,尽量保持连续,方便记忆) 注意: 3台虚 ...