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

多目标优化问题在工程应用等现实生活中非常普遍并且处于非常重要的地位,这些实际问题通常非常复杂、困难,是主要研究领域之一。自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. 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

    用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级.本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签<proced ...

  2. 异步是javascript的精髓

    最近做了一个智能家居的APP,目前纯JS代码已经4000多行,不包括任何引入的库.还在不断升级改造中...这个项目到处都是异步.大多数都是3-4层调用.给我的感觉就是异步当你习惯了,你会发现很爽.下面 ...

  3. jquery中each中使用break和continue

    在jquery中each中直接使用break或者continue会提示:必须在循环中使用.会报错不能直接使用. 但是,是不是就不能用呢,答案是的,但是换种方法可以达到相同的效果: 可以只用return ...

  4. JavaScript 变量及类型

    在JavaScript中,所有的number都是以64位浮点型数据来存储的.所有的编程语言,包括js,对浮点型数据的精度都很难确定. var a = 0.1 + 0.2; console.log(a ...

  5. javaScript 设计模式之中介者模式示例

    飞机把注册信息放到铁塔里,发送数据到铁塔,报告其它的飞机一些信息. var feiji = function( name ){ this.name = name; } feiji.prototype. ...

  6. HDU 2586 How far away ?

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  7. 洛谷P4591 [TJOI2018]碱基序列(hash dp)

    题意 题目链接 Sol \(f[i][j]\)表示匹配到第\(i\)个串,当前在主串的第\(j\)个位置 转移的时候判断一下是否可行就行了.随便一个能搞字符串匹配的算法都能过 复杂度\(O(|S| K ...

  8. HTML浏览器标题栏如何设置

    浏览器标题栏如何设置 只需要在HTML中的 <head></head> 内加入 “Link’’ 和 “Title” 标签即可.献上代码: <head> <me ...

  9. arcgis建立拓扑分析(检验矢量图)

    目的:矢量图画好后,检查是否有伪节点,悬挂节点等,线要素和面要素都可以检查.伪节点,两条线应该相交但是画的没相交:悬挂节点,两条线看似相交了但是没有节点,因此路径不同(类似于高架桥和交叉口,悬挂节点就 ...

  10. 二路归并算法的java实现

    “归并”的含义是将两个或者两个以上的有序表组合成一个新的有序表. 假设待排序表含有n个元素,则可以看成是n个有序的子表,每个子表的长度为1,然后两两归并,得到(n/2)或者(n/2+1)个长度为2或1 ...