多目标启发式算法(NSGA2, MOEA, MOPSO)python实现

1. MODA-多目标差分进化算法

基于快速非支配排序算法和拥挤度。

算法主程序

def MODE(nIter, nChr, nPop, F, Cr, func, lb, rb):
    """多目标差分进化算法主程序 
    Params:
        nIter: 迭代次数
        nPop: 种群规模 
        F: 缩放因子 
        Cr: 交叉概率 
        func:优化函数 
        lb: 自变量下界 
        rb:自变量上界 
    Return:
        paretoPops: 帕累托解集 
        paretoFits: 对应的适应度 
    """
    # 生成初始种群 
    parPops = initPop(nChr, nPop, lb, rb) 
    parFits = fitness(parPops, func) 

    # 开始迭代  
    iter = 1 
    while iter <= nIter:
        # 进度条 
        print("【进度】【{0:20s}】【正在进行{1}代...】【共{2}代】".\
            format('▋'*int(iter/nIter*20), iter, nIter), end='\r')

        mutantPops = mutate(parPops, F, lb, rb)  # 产生变异向量 
        trialPops = crossover(parPops, mutantPops, Cr)  # 产生实验向量 
        trialFits = fitness(trialPops, func)  # 重新计算适应度 

        pops = np.concatenate((parPops, trialPops), axis=0)  # 合并成新的种群
        fits = np.concatenate((parFits, trialFits), axis=0) 
        ranks = nonDominationSort(pops, fits)  # 非支配排序 
        distances = crowdingDistanceSort(pops, fits, ranks)  # 计算拥挤度 

        parPops, parFits = select1(nPop, pops, fits, ranks, distances)   

        iter += 1 
    print("\n") 
    # 获取等级为0,即实际求解得到的帕累托前沿 
    paretoPops = pops[ranks==0] 
    paretoFits = fits[ranks==0] 
    
    return paretoPops, paretoFits

由父代种群和经过差分变异交叉后的实验种群混合成一个新的种群,对新的种群进行非支配排序,利用1对1锦标赛选择算子筛选出新的父代种群。

2. NSGA2-非支配排序遗传算法

采用精英策略,在进行交叉变异操作之后对新产生的种群与父代种群混合成新的种群,对新的种群进行优选。

算法主程序

def NSGA2(nIter, nChr, nPop, pc, pm, etaC, etaM, func, lb, rb): 
    """非支配遗传算法主程序 
    Params:
        nIter: 迭代次数 
        nPop: 种群大小 
        pc: 交叉概率 
        pm: 变异概率 
        func: 优化的函数 
        lb: 自变量下界
        rb: 自变量上界
     Return:
        paretoPops: 帕累托解集 
        paretoFits: 对应的适应度  
    """   
    # 生成初始种群 
    pops = initPops(nPop, nChr, lb, rb)  
    fits = fitness(pops, func) 

    # 开始第1次迭代 
    iter = 1 
    while iter <= nIter:
        print(f"当前正在第{iter}代....")
        ranks = nonDominationSort(pops, fits)  # 非支配排序 
        distances = crowdingDistanceSort(pops, fits, ranks)  # 拥挤度
        pops, fits = select1(nPop, pops, fits, ranks, distances) 
        chrpops = crossover(pops, pc, etaC, lb, rb)  # 交叉产生子种群 
        chrpops = mutate(chrpops, pm, etaM, lb, rb)  # 变异产生子种群 
        chrfits = fitness(chrpops, func)  
        # 从原始种群和子种群中筛选 
        pops, fits = optSelect(pops, fits, chrpops, chrfits)  
        iter += 1 
    # 对最后一代进行非支配排序 
    ranks = nonDominationSort(pops, fits)  # 非支配排序 
    distances = crowdingDistanceSort(pops, fits, ranks)  # 拥挤度 
    paretoPops = pops[ranks==0] 
    paretoFits = fits[ranks==0] 
    return paretoPops, paretoFits 

3. MOPSO-多目标粒子群算法

从archive集中更新gBest不仅采用支配解,还利用网格法,统计支配解的密度,选取网格中密度较低的解来更新gBest。

算法主程序

def MOPSO(nIter, nPop, nAr, nChr, func, c1, c2, lb, rb, Vmax, Vmin, M):
    """多目标粒子群算法
    Params:
        nIter: 迭代次数 
        nPOp: 粒子群规模 
        nAr: archive集合的最大规模 
        nChr: 粒子大小 
        func: 优化的函数
        c1、c2: 速度更新参数 
        lb: 解下界
        rb:解上界 
        Vmax: 速度最大值 
        Vmin:速度最小值 
        M: 划分的栅格的个数为M*M个
    Return:
        paretoPops: 帕累托解集
        paretoPops:对应的适应度 
    """
    # 种群初始化 
    pops, VPops = initPops(nPop, nChr, lb, rb, Vmax, Vmin) 
    # 获取个体极值和种群极值 
    fits = fitness(pops, func) 
    pBest = pops 
    pFits = fits 
    gBest = pops
    # 初始化archive集, 选取pops的帕累托面即可
    archive, arFits = getNonDominationPops(pops, fits) 
    wStart = 0.9 
    wEnd = 0.4  

    # 开始主循环 
    iter = 1 
    while iter <= nIter:
        print("【进度】【{0:20s}】【正在进行{1}代...】【共{2}代】".\
            format('▋'*int(iter/nIter*20), iter, nIter), end='\r') 

        # 速度更新 
        w = wStart - (wStart-wEnd) * (iter/nIter)**2 
        VPops = w*VPops + c1*np.random.rand()*(pBest-pops) + \
            c2*np.random.rand()*(gBest-pops) 
        VPops[VPops>Vmax] = Vmax 
        VPops[VPops<Vmin] = Vmin 
        # 坐标更新 
        pops += VPops 
        pops[pops<lb] = lb 
        pops[pops>rb] = rb  # 防止过界 
        fits = fitness(pops, func) 

        # 更新个体极值 
        pBest, pFits = updatePBest(pBest, pFits, pops, fits) 
        # 更新archive集 
        archive, arFits = updateArchive(pops, fits, archive, arFits) 
        # 检查是否超出规模,如果是,那么剔除掉一些个体 
        archive, arFits = checkArchive(archive, arFits, nAr, M)  
        # 重新获取全局最优解
        gBest = getGBest(pops, fits, archive, arFits, M)  
        iter += 1 
    print('\n')
    paretoPops, paretoFits = getNonDominationPops(archive, arFits) 
    return paretoPops, paretoFits 

4. 测试算例

FON标准问题:
f 1 ( x 1 , x 2 , x 3 ) = 1 − e − ∑ i = 1 3 ( x i − 1 3 ) , f 2 ( x 1 , x 2 , x 3 ) = 1 − e − ∑ i = 1 3 ( x i + 1 3 ) f_1(x_1,x_2,x_3)=1-e^{-\sum_{i=1}^3(x_i-\frac{1}{\sqrt{3}})}, f_2(x_1,x_2,x_3)=1-e^{-\sum_{i=1}^{3}(x_i+\frac{1}{\sqrt{3}})} f1(x1,x2,x3)=1ei=13(xi3 1),f2(x1,x2,x3)=1ei=13(xi+3 1)
其中: x i ∈ [ − 2 , 2 ] , i = 1 , 2 , 3 x_i\in[-2,2],i=1,2,3 xi[2,2],i=1,2,3

该问题具有极为简单易于表达的理论最优解集
x 1 = x 2 = x 3 ∈ [ − 1 3 , 1 3 ] x_1=x_2=x_3\in[-\frac{1}{\sqrt3},\frac{1}{\sqrt3}] x1=x2=x3[3 1,3 1]

4. 测试结果

4.1. 多目标差分进化算法求解结果

(迭代次数100,种群规模50)
img

4.2. NSGA2算法求解结果

(迭代次数50,种群规模100)
img

4.3 MOPSO算法求解结果

(迭代次数100,种群规模100)
img

4.4 结果对比

  • 求解速度:MOPSO > MODA > NSGA2
  • 求解质量:MOPSO > NSGA2 > MODA

5. 参考文献

参考文献: 多目标差分进化在热连轧负荷分配中的应用
参考博客: 多目标优化算法(一)NSGA-Ⅱ(NSGA2)
参考文献: MOPSO算法及其在水库优化调度中的应用
详细代码地址: 部分多目标启发式算法python实现(github)

R人
关注 关注
  • 17
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
目标遗传优化算法nsga2[python源码实现]
总裁余(余登武)博客
10-30 4091
目标遗传优化算法nsga2,python源码实现。源码实现,不适用任何第三方工具包。由于是基本源码,所有熟悉其他语言的也能看懂意思。
MOEA_NSGA2_MOPSO.rar
09-15
综上所述,"MOEA_NSGA2_MOPSO.rar"这个压缩包包含了多种多目标优化算法的MATLAB实现,为初学者提供了一个实践和学习的良好平台。通过对这些算法的理解和应用,我们可以更有效地解决那些涉及多个相互矛盾目标的实际...
python源码,详细注解 )多目标粒子群算法 mopso
热门推荐
m0_38097087的博客
04-07 4万+
1 本代码功能用多目标粒子群算法(mopso)寻找pareto最优解集2 算法介绍2.1 简单步骤:(1)初始化群体粒子群的位置和速度,计算适应值(2)根据pareto支配原则,计算得到Archive 集(存放当前的非劣解)(3)计算pbest(4)计算Archive集中的拥挤度(5)在Archive集选择gbest(6)更新粒子的速度、位置、适应值(7)更新Archive集(还要注意防止溢出)(...
mopso目标粒子群算法 python源码
04-10
mopso目标粒子群算法 python源码 粒子群速度位置更新 pareto最优解集 外部存档 拥挤度计算
[python] 启发式算法库scikit-opt使用指北
最新发布
You and Me
07-30 620
启发式算法介绍启发式算法,顾名思义,就是一种基于直觉或经验来解决问题的算法。它不像传统算法那样一步一步地穷尽所有可能性,而是通过一些启发式的规则或策略,快速找到一个可行的解。打个比方,若开车去一个陌生的地方,没有导航仪。启发式算法就像问路一样,可以向路人询问,也可以根据路边的标志和指示牌来判断方向。虽然这种方式不能保证找到最优路线,但通常能够在较短时间内找到一个可行的路线。快速性: 启发式算法通常能够在较短时间内找到一个可行的解,特别是在面对复杂问题时。
目标遗传算法NSGAII求解环境经济调度(Python代码实现
weixin_66436111的博客
06-23 935
目标遗传算法NSGAII求解环境经济调度(Python代码实现
python启发式算法学习总结
weixin_44620519的博客
04-29 3248
启发式算法为克服优化过程中出现的局部最优解,因为在非凸优化中,往往会陷入局部最优。 1、传统启发式 1.1 贪心算法 1.2 局部搜索 1.3 爬山算法 2、元启发式 2.1 2.2 模拟退火算法(2022/4/29) 求解下列函数最优值 # 模拟退火 import math # 数学运算 from random import random # 随机数 import matplotlib.pyplot as plt # 画图 def func(x, y): # z值计算公
python编写启发式算法--(1)
weixin_30879169的博客
10-25 639
创造矩阵(多维数组) Python numpy 提取矩阵的某一行或某一列 https://blog.csdn.net/luoganttcc/article/details/74080768 删除矩阵:https://www.jb51.net/article/139764.htm numpy中的delete删除数组整行和整列的实例 1.删除一列 >>>...
Python实现的启发式搜索算法—多目标最大割问题
毕业作品网站
06-15 844
摘 要: NSGA-II与MOEA/D是非常经典的多目标优化问题演化算法框架,其中NSGA-II采用基于“快速非支配排序”与“种群距离度量”的判断指标同时维护种群的目标最优性与基因多样性,MOEA/D完成了一种基于子任务分解的多目标优化框架,本次实验分别在“多目标最大割问题”上完成了上述两种算法.关键词: 演化算法; NSGA; MOEANSGA-II算法是十分经典的多目标演化算法框架。他的重要构件如下:解的表示、初始种群:依据具体问题而定,种群大小为N。父代选择:使用Binary Tournament方
jMetalPy: 用元启发法进行多目标优化的Python框架
qq_33177268的博客
11-03 1991
目标优化问题广泛存在于许多学科中[1,2],包括工程、经济、物流、运输或能源等等。它们的特点是有两个或更多相互冲突的目标函数,必须同时达到最大化或最小化,其最佳状态由一组被称为帕累托最优集的折衷方案组成。除了有几个目标外,其他因素也会使这一系列的优化问题特别难以用精确的技术来处理和解决,如欺骗性、外显性、NP-hard复杂性或高维度[3]。因此,处理复杂的多目标优化问题的最流行的技术是元启发式算法[4],这是一个非精确的算
目标优化算法NSGA-2的Python实现
09-23
本代码资源是关于NSGA-2的Python实现,是原始论文A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II的代码复现结果,有整个NSGA-2的实现流程包括初始化种群,基因生成,染色体交叉变异等
目标优化算法(四)NSGA3的代码(python3.6)
04-01
本次资源为NSGA3的python代码,测试问题为DTLZ系列
mealpy:PYthon中最先进的MEta启发式算法的集合(渐进式)
03-12
PYthon中最先进的MEta启发式算法的集合(渐进式) “知识就是力量,分享是生活进步的前提。对某人来说,这似乎是一种负担,但这是实现永生的唯一途径。” --- 快速通知 嘿,在收到有关如何使用此库解决多个(许多)目标优化问题的许多问题之后? 不好意思告诉您,该库仅用于解决单(单)目标优化问题。 由于处理多个目标函数与单个目标函数完全不同(更难)。 (查找Pareto前沿(参考前沿-真正的Pareto前沿)是NP难题。 因此,我目前正在制作一个新的库“ momapy”-(PYthon中最新的多目标/多目标启发式算法的集合),用于解决多目标/多目标优化。 “ MOMAPY”将在这里托管: 介绍 MEALPY是适用于大多数最先进的种群元启发式算法python模块,并已获得MIT许可。 该框架的目标是: 与所有人免费共享元启发式领域的知识 帮助所有领域的其他研究人员尽快访问优化
使用称为多目标粒子群优化 (MOPSO) 的进化算法重新调整晶体管大小以优化全加器中的功率_python_代码_下载
06-20
使用称为多目标粒子群优化 (MOPSO) 的进化算法重新调整晶体管尺寸以优化 45nm MGK 全加器中的泄漏和延迟功率。电路中的泄漏功率降低了 50%。从帕累托中提取了最佳尺寸算法收敛后的前面。
NSGA 2 和 3 算法的 Python 实现
05-10
综上所述,NSGA 2 和 NSGA 3 算法是多目标优化问题的强大工具,Python 为其实现提供了便利。在 "NSGA-main" 文件中,我们可以期待看到一个完整的 NSGA 算法实现,包括了种群初始化、非支配排序、拥挤距离计算以及...
目标优化算法NSGA-2的matlab算法实现
06-09
**NSGA-2(非支配排序遗传算法第二代)**是一种多目标优化算法,由Deb等人于2002年提出,旨在解决具有多个相互冲突的目标函数的问题。多目标优化问题与传统的单目标优化不同,它需要找到一组最优解,这些解在所有...
Python实现的人工智能启发式搜索
毕业作品网站
07-06 1852
启发式搜索又叫有信息的搜索,它利用问题所拥有的启发信息来引导搜索,达到减少搜索范围,降低问题复杂度的目的。对于一个具体的问题,构造一个专用于该领域的启发式函数h(n)h(n)h(n), 该函数用于估计从节点n到达目标节点的成本 ,要求对于所有满足目标条件的节点n有:h(n)=0h(n)=0h(n)=0。定义评价函数f(n)=g(n)+h(n)f(n)=g(n)+h(n)f(n)=g(n)+h(n),其中g(n)g(n)g(n)是从初始节点到达节点n的路径成本,h(n)h(n)h(n)是从nnn节点到达目标
python编写算法程序_python编写启发式算法--(1)
weixin_39630441的博客
12-13 179
创造矩阵(多维数组)Python numpy 提取矩阵的某一行或某一列https://blog.csdn.net/luoganttcc/article/details/74080768删除矩阵:https://www.jb51.net/article/139764.htmnumpy中的delete删除数组整行和整列的实例1.删除一列>>> dataset=[[1,2,3],[2,...
基因表达微阵列数据分类的多目标启发式算法
John的博客
11-08 829
引用 LaTex @article{LV201613, title = “A multi-objective heuristic algorithm for gene expression microarray data classification”, journal = “Expert Systems with Applications”, volume = “59”, pag...
目标遗传算法NSGA-II python
05-30
NSGA-II是一种经典的多目标遗传算法,它能够在解决多目标优化问题时提供高效、可靠的性能。在Python中,有多种NSGA-II的实现可供使用,如pymoo、deap等。这些库提供了一系列的NSGA-II算法实现和优化工具,可以轻松地解决多目标优化问题。如果你想使用NSGA-II来解决自己的问题,可以先了解这些库的具体用法和API文档,然后根据自己的实际情况进行调用和使用。
写文章

热门文章

  • 多目标启发式算法(NSGA2, MOEA, MOPSO)python实现 12047
  • matplotlib - 自定义散点形状marker的3种方法 10447
  • LSTM与时间序列 9658
  • Frank-Wolfe和梯度投影方法MATLAB实现 4266
  • Matplotlib文字处理 1063

最新评论

  • Frank-Wolfe和梯度投影方法MATLAB实现

    2209010118ldp: 表情包表情包有效表情包

  • 多目标启发式算法(NSGA2, MOEA, MOPSO)python实现

    weixin_47014955: 可以求代码嘛

  • 多目标启发式算法(NSGA2, MOEA, MOPSO)python实现

    Kornour: 额,这个代码的目标不是极小型吗

  • Frank-Wolfe和梯度投影方法MATLAB实现

    weixin_45267002: 亲测有效,非常感谢!!

  • 多目标启发式算法(NSGA2, MOEA, MOPSO)python实现

    qq_39351838: 大佬,关于MOPSO的代码,您给出的是求解两个优化目标极大值的部分,我想问问如果是想优化小呢。我改了支配解的判别方式还是没啥效果

大家在看

  • 2024最新高分源码基于SpringBoot+Vue+uniapp的洗衣店订单管理系统(源码+lw+部署文档+讲解等) 732
  • 基于javaweb技术的农作物信息服务平台的设计与实现(Java+ssm+万字文档+lw+数据库 +调试)
  • 2024年CSP-J1认证真题和答案解析
  • 2024最新高分源码基于SpringBoot+Vue+uniapp的美发门店管理系统(源码+lw+部署文档+讲解等) 876
  • JAIN SLEE 中Container Managed Persistent (CMP) 519

最新文章

  • Frank-Wolfe和梯度投影方法MATLAB实现
  • Matplotlib文字处理
  • matplotlib - 自定义散点形状marker的3种方法
2022年2篇
2021年1篇
2020年3篇
2019年1篇

目录

目录

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王安顺外贸网站推广优化郑州正规的婚纱摄影网站优化雨花台区网站优化信息推荐舟山网站优化推荐湛江网站优化学习网站排版怎么优化奉化百度网站优化推荐阳逻网站优化网站优化怎么收费seo工资柘城网站优化电话黄山网站seo优化软件多少钱视频网站如何优化网站优化必看宁阳县网站优化排名南开网站优化系统外贸企业做网站优化的方向和技术优化公司网站舒心火4星开封正规网站优化价格朝阳专业网站优化外包广西网站运营优化营销饮料网站优化公司好吗下载官方网站app优化大师鹤壁武汉网站优化信阳网站优化找优行网优普陀区360网站优化费用赤峰关键词网站优化大港网站优化咨询深圳seo网站排名优化黄山网站优化排名代理商百度网站优化员是干嘛的香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化