多目标优化:NSGA-II算法

原理

与单目标(遗传算法)最大的不同就是进行选择操作之前进行快速非支配排序,这一步也是为了选择操作而来的,选择哪些、怎么选是通过非快速支配排序来的。这就不像单目标,挑好的选就行了

在这里插入图片描述
支配: 在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p中的所有目标都不比个体q差,那么称个体p支配个体q。
在这里插入图片描述

序值: 如果p支配q,那么p的序值比q低。如果p和q互不支配,那么p和q有相同的序值。
在这里插入图片描述
拥挤距离:用来计算某前端中的某个体与该前端中其他个体之间的距离,用以表征个体间的拥挤程度。希望pareto解出来之后,点与点之间距离是相近的,不要太多的聚集在某个地方。用某个点与前后两个点之间的xy的距离和表示。算法会选择拥挤距离大的去领头。
在这里插入图片描述

快速非支配排序:快速非支配排序就是将解集分解为不同次序的Pareto前沿的过程。将一组解分成n个集合:rank1,rank2…rankn,每个集合中所有的解都互不支配,但ranki中的任意解支配rankj中的任意解(i<j).
在这里插入图片描述

代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib; matplotlib.use('TkAgg')
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

pop_size =400
max_gen = 200

#系数
cost_weight=np.array([0.077,0.077,0.077,0.089,0.089,0.089,0.087,0.087,0.087,0.089,0.101,0.099])
harm_weight=np.array([0.082,0.082,0.082,0.079,0.079,0.079,0.069,0.069,0.069,0.079,0.1,0.1])
fault_fre_weight=np.array([0.085,0.085,0.085,0.08,0.08,0.08,0.087,0.087,0.087,0.079,0.079,0.086])

#==========定义两个目标函数=============
# 定义函数1
def function1(solution):

    value = np.dot(cost_weight,(1/(solution**2)))
    return value
# 定义函数2 可靠性
def function2(solution):
    solution = abs(solution)
    value = np.dot(1/(harm_weight*(1-fault_fre_weight)),solution)
    return value

#误差x的范围
accuracy_min=np.array([-9.7,-9.8,-10.2,-6.2,-6.8,-5.5,-6.6,-5.3,-4.8,-0.0247,-0.026,-0.0254])#12个
accuracy_max=np.array([20.3,20.2,19.8,13.8,13.2,14.5,13.4,14.7,15.2,0.0553,0.0540,0.0546])

# solution=[0 for i in range(12)]
#生成解集   相当于x 单位um
def create_x(pop_size
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种常用的多目标优化算法。下面以一个算例来解释NSGA-II的工作原理。 假设我们要优化一个具有两个目标函数的问题。目标函数1表示最小化函数f1(x),目标函数2表示最小化函数f2(x)。其中x是问题的决策变量。 NSGA-II的工作流程如下: 1. 初始化种群:随机生成一定数量的个体作为初始种群。 2. 评价个体:计算每个个体在目标函数1和目标函数2上的值。 3. 非支配排序:根据Pareto支配关系对种群中的个体进行排序,确定每个个体的非支配等级。 4. 拥挤度排序:计算每个个体的拥挤度值,用于维持种群的多样性。 5. 选择操作:根据非支配等级和拥挤度值选择个体,生成下一代种群。 6. 交叉操作:对选中的个体进行交叉操作,生成新的个体。 7. 变异操作:对交叉后的个体进行变异操作,引入新的基因。 8. 更新种群:将新生成的个体加入种群中,形成下一代种群。 9. 终止条件判断:判断是否达到终止条件,如果满足则停止算法;否则返回第2步。 NSGA-II的核心是通过非支配排序和拥挤度排序来维护种群的多样性,并实现在多个目标函数之间的平衡。通过非支配排序,算法可以筛选出多个非支配解;而通过拥挤度排序,可以保证解集的分布更加均匀。 总的来说,NSGA-II是一种多目标优化算法,通过遗传算法的遗传操作和非支配排序来优化多个目标函数。它通过维护非支配解和拥挤度来保持解集的多样性和均匀分布,从而找到近似帕累托前沿的优化解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值