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

多目标优化问题在工程应用等现实生活中非常普遍并且处于非常重要的地位,这些实际问题通常非常复杂、困难,是主要研究领域之一。自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. linux 中rc是什么意思

    在Linux中,最为常用的缩略语也许是"rc" 它是"runcomm"的缩写――即名词"run command"(运行命令)的简写.rc&q ...

  2. 2018-08-24 中文代码之Spring Boot对H2数据库简单查询

    续前文: 中文代码之Spring Boot集成H2内存数据库 在词条中添加英文术语域: @Entity public class 词条 { @Id private long id; private S ...

  3. Salesforce 数据备份和恢复小知识

    数据备份的类型 在Salesforce中可以使用多种API进行数据备份,它们是: REST API SOAP API Buik API Metadata API 数据备份有三种选择: 完全备份(Ful ...

  4. Conccrent中 Unsafe类原理 以及 原子类AutomicXX的原理以及对Unsafe类的使用

    Unsafe类的介绍 Java中基于操作系统级别的原子操作类sun.misc.Unsafe,它是Java中对大多数锁机制实现的最基础类.请注意,JDK 1.8和之前JDK版本的中sun.misc.Un ...

  5. https遇到自签名证书/信任证书

    对于CA机构颁发的证书Okhttp默认支持 可以直接访问 但是对于自定义的证书就不可以了(如:https ://kyfw.12306.cn/otn/), 需要加入Trust 下面分两部分来写,一是信任 ...

  6. Python __init__.py文件的作用

    我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 模块包(module package)标识 如果你是使用pytho ...

  7. (python)面向对象

    一.面向对象概述 要了解面向对象,就需要先了解面向过程的概念,那么什么是面向过程编程呢?最具代表性的就是C语言了,所谓面向过程编程就是在做一件事的时候,需要按步骤进行,第一步干什么,第二步干什么,这种 ...

  8. Spark性能优化【Stack Overflow】

    一.异常情况 Stack Overflow 二.异常分析 之所以会产生Stack Overflow,原因是在Stack方法栈中方法的调用链条太长的原因导致的,一般情况有两种: 1.过于深度的递归[常见 ...

  9. HBase快速安装

    配置hbase-env.sh #JAVA_HOME 需要Java 1.7+ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ # Java CLA ...

  10. mssql sqlserver 判断字符串大小写的方法分享

    摘要:下文讲述使用sql脚本的方法判断字符串为大小写的方法分享,如下所示 实验环境:sqlserver 2008 R2 实现思路: 将字符串转换为大写或小写然后转换为二进制编码, 然后和源字符串做对比 ...