🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
确定某点附近的点
答:每个解对应的是一组权重,即子问题,红点附近的四个点,也就是它的邻居怎么确定呢?由权重来确定,算法初始化阶段就确定了每个权重对应的邻居,也就是每个子问题的邻居子问题。权重的邻居通过欧式距离来判断。取最近的几个。
取均匀分布向量
https://blog.csdn.net/Twobox/p/16408751.html
MOEAD实现
算法理解与流程
https://www.zhihu.com/question/263555181?sort=created其中两个回答都挺好的
1. 输入N m
# N表示取点密度 m表示问题维度
1.1 输入 T
# 表示取最近的T个作为邻居
2. 生成均匀分布权重向量
2.1 计算每个权重向量之间的欧拉距离
3. 权重向量个数即为:初始种群个数
4. 初始化种群,每个个体一一对应权重
4.1 更具权重之间距离,取前T个作为邻居person
5. EP = 空
# 维护成最优前沿
6. 计算最初的全局最优Z
# 把每个带入f1 f2中,取最小值 z1 z2
7. 开始循环N代
7.1对于每个个体,在领域中选取2个个体进行交叉变异,获得2个新个体
7.1.1更新全局解z
7.2在领域中随机选择2个个体,用新个与旧个体进行对比
# 新个体带入子目标问题,直接对比值即可
7.3如果更优,则替换旧个体dna
7.4更新EP
# 如果有别接收的新解,将新解与EP每一个进行比较,删除被新解支配的,如果新解没有被旧解支配,那么加入EP
代码实现设计
# 分析
需要维护的数据结构:
某个体最近的T位邻居: 可以考虑采用对象列表即可
均匀分布的权重向量:一个二维ndarray数组即可
权重向量与个体对应关系:个体对象,直接保存权重向量数组
权重向量之间的距离矩阵:开局初始化,不变的
EP list,里面的个体是对象的引用
z list
目标函数集合,F list domain list
# 接口设计
class Person
attribute:
dns:一维ndarray
weight\_vector: 一维ndarray
neighbor: list
o\_func:Objective\_Function 目标函数
function:
mutation
cross\_get\_two\_new\_dna:返回2段新dna
compare#与子代比较
accept\_new\_dna
choice\_two\_person:p1,p2
class Moead\_Util
attribute:
N
M
T:
o\_func:Objective\_Function
pm:变异概率
EP:[dna1,dna2,..]
weight\_vectors:二维数组
Euler\_distance:二维数组
pip\_size
Z:[] # 这里面元素为一维ndarray数组,即dna,即解
function:
init\_mean\_vector:二维数组
init\_Euler\_distance:二维数组
init\_population:[]
init\_Z:一维属猪
update\_ep
update\_Z
class Objective\_Function:
attribute:
F:[]
domain:[[0,1],[],[]]
function:
get\_one\_function:Objective\_Function
Person.py
1 import numpy as np
2
3
4 class Person:
5 def \_\_init\_\_(self, dna):
6 self.dna = dna
7 self.weight\_vector =