NSGA-ii 双目标遗传算法

论文原文《A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II》,可在IEEE上搜索。

简要叙述:编码交叉变异依然不变,在在此基础上加上了

  1. 快速非支配排序
  2. 拥挤度
  3. 精英策略

非支配排序

支配简述:对于一个点a,他的f1(a), f2(a)……fn(a)都比另一个点b,他的f1(b), f2(b)……fn(b)大,那么a支配b。
非支配即a他的所有值至少有一个小于b,且至少有一个大于b,那么,那么a和b非支配。

NSGA-ii 使用快速非支配排序,具体算法可见代码,根据代码思路自己去画一画。

非支配排序会最终将很多点分成不同rank的类,根据目标所需最大最小不同后续选择对rank不同的排序。

例子代码

拥挤度计算

个人认为很多时候可以用用拥挤距离替代,每个类都分别计算拥挤度,但最终很多时候在算法中只需要计算一个rank的拥挤度。

一个rank中的所有点,其中第一个点和最后一个点的拥挤距离为∞,中间点的距离即delta_y1 + delta_y2。拥挤距离可用delta_y1 / (max(y1) – min(y1)) + delta_y2 / (max(y2) – min(y2))

精英策略

每次从n个种群交叉变异后会生成2n的种群,通过精英策略选取其中前n个进行下一次迭代。策略如下:

  1. rank大/小的优先,看具体题目
  2. 如果有个rank加上后在超过了n个个体的种群,则进行拥挤度排序,选取最大/小的直到种群为n个个体。

Github上大佬的代码

优化算法的学习

个人关于优化算法的学习历程:SA GA TSP PSO NSGA-ii

下列代码为个人学习及复现的过程,不一定很正确,有一定参考性,NSGA-ii不在此展示,详情可见下一篇。

退火(SA)

退火简述:个人认为有点像穷举,在x附近左右横跳,达到条件降温,没达到升温

遗传(GA)

遗传简述:对问题编码,可以是二进制也可以是十进制或者是排列(各位都不一样),交叉,变异进化,其中会包含精英保留等操作,NSGA在此基础上加上了非支配排序。

蚁群(TSP)

蚁群简述:信息素的更新与获取,信息素可以不用完全按照公式,根据具体题目可以有所不同。

粒子群(PSO)

粒子群简述:速度的更新,包含个人学习速率和社会学习速率,不同点的速度不同,更新的速度不同。

Pytorch 神经网络基础

请先看该文章

当要运用到自己的图片文件的时候可在上文中加上以下代码,并相应进行改变神经网络中data运算。参考可见。

准确率计算参考代码:

下面用分类损失与回归损失代码对比。可供测试data文件。测试文件说明:最后一列为label,除最后一列外为data

以上运用分类损失,效果一般,只有46%的分类准确率。

以上运用回归损失,效果显著,R2=0.96(评价函数)

二重积分参考代码

树莓派4b jupyter frp端口映射

树莓派 frpc 设置:
github 中找到 arm 版本 wget 下载
frpc.ini 参考配置

jupyter 设置跟之前文章相同,即 ip, allow_remote_access等设置

服务器端 frps 配置: 云端开启7000~7003端口

云端 nginx 参考配置:

最终效果即通过域名 python.pancake2021.work 访问树莓派 jupyter

浙ICP备2021019730-1    浙公网安备 33010902002953号
Copyright © 2024 PanCake