多目标遗传算法NSGA-Ⅱ与其Python实现多目标投资组合优化问题

本文详细介绍了多目标优化问题中的NSGA-Ⅱ算法,包括其快速非支配排序、拥挤比较算子及其算法流程。接着,文章通过Python实现NSGA-Ⅱ算法来解决均值-方差-换手率投资组合优化问题,选取12只股票的历史数据进行实证分析,展示如何运用遗传算法处理实际问题。
摘要由CSDN通过智能技术生成

对于单目标优化问题,一般的遗传算法可以较为简单的得到较好的结果。但是,当问题扩展到多目标时,原先的遗传算法便不再适用了。因为目标之间通常有着较深的相互关系,一个目标的优化通常会影响到其余的目标,很难能够得到所有目标都达到最优的解。这时候,如何寻找合适的适应度函数便成解决多目标遗传算法的关键。如今,相关的算法已经有很多种了。包括妥协算法(compromise approach),GWASF-GA,SPEA2,NSGA-Ⅱ。其中NSGA-Ⅱ的使用非常广泛。



NSGA-Ⅱ

NSGA-Ⅱ的优点

1.NSGA-Ⅱ提出了快速的非支配(non-dominated)排序,很好的降低了算法的复杂度。一般的多目标算法复杂度为 O ( M N 3 ) O(MN^3) O(MN3),而NSGA-Ⅱ可以做到 O ( M N 2 ) O(MN^2) O(MN2)
2.NSGA-Ⅱ改进了原先NSGA算法为保留解多样性而采用的共享函数。提出了拥挤比较算子(crowded-comparison operator),从而避免了人为输入参数的不确定性。

快速非支配排序

快速非支配排序的核心思想主要是通过计算比较得到种群中每个个体p的被支配度 N p N_p Np,通过支配度的大小得到多层非支配曲面。具体来说过程如下:
对于种群中的每一个个体p,我们计算两个实体。第一个是其被支配度 N p N_p Np,即P个体被其余个体所支配的数量。支配的定义为如果个体p中所有目标均不优于个体q中对应目标,则称个体p被个体q所支配。第二个实体是个体p的支配集合 S p S_p Sp。这一步所需要的计算复杂度为 O ( M N 2 ) O(MN^2) O(MN2),因为最坏的情况下,数目为N的种群中每一个个体都要与其余个体比较,这一步为 N 2 N^2 N2,那么对于 M M M个目标则为 M N 2 MN^2 MN2
接下来可以开始寻找非支配曲面了。对于最优非支配曲面(Pareto-optimal front),其中的个体 N p N_p Np为0。接着,对于最优非支配曲面中的每一个个体,寻找其相应的 S p S_p Sp,对于其中所有的个体q,将其 N p N_p Np减1。对于此时 N p N_p Np为0的个体,我们将其归入集合Q,Q便是第二非支配曲面。按照相同的步骤,我们可以得到所有的非支配曲面。由于对于所有个体p,其 N p N_p Np最大为N-1,因此,考虑最坏的情况,即最大 N p N_p Np为N-1,其非支配曲面的个数为N,则为了得到N个曲面所需要的最大遍历的次数为 N 2 N^2 N2。这样,对于M个目标,其计算复杂度为 O ( M N 2 ) O(MN^2) O(MN2)。快速非支配排序用算法表达如下:
在这里插入图片描述

拥挤比较算子

一般来说,在寻求多目标遗传算法的解时,我们希望解集合能够保存多样性。在NSGA-Ⅱ中,通过运用拥挤比较算子来实现此目的。简单来说,拥挤比较算子的原理如下:
首先定义密度衡量准则(density estimation metric),密度衡量准则定义为一个个体在其每个目标上上下相邻两点的距离。即某个个体与其附近的个体相距越远,密度越小。定义拥挤距离 i d i s t a n c e i_{distance} idistance

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值