SPEA2_Python

这是一个用Python实现的SPEA2算法,用于多目标优化问题。算法包括种群初始化、适应度计算、非支配排序、距离度量、轮盘赌选择、交叉和变异操作,以及结果的绘制。代码中定义了SPEA2类,包含多个方法来执行算法的各个步骤,并通过main函数运行整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eated on Fri Jul 20 15:42:42 2018

"""

import random
import numpy as np
from matplotlib.ticker import  MultipleLocator
import matplotlib.pyplot as plt

class SPEA2():
    def __init__(self, dim, pop, max_iter):     #维度,群体数量,迭代次数
        self.pc = 0.4                           #交叉概率
        self.pm = 0.4                           #变异概率
        self.dim = dim                          #搜索维度
        self.pop = pop                          #粒子数量
        self.K = int(np.sqrt(pop + pop))        #距离排序,第k个距离值
        self.max_iter = max_iter                #迭代次数
        self.population = []                    #父代种群
        self.archive = []                       #存档集合
        self.popu_arch = []                     #合并后的父代与存档集合种群
        #self.fronts = []                        #Pareto前沿面
        self.KNN = []                           #最近领域距离,K-th
        #self.rank = []#np.zeros(self.pop)       #非支配排序等级 
        self.S = []                             # 个体 i的 Strength Value
        self.D = []                             # density,距离度量
        self.R = []                             # 支配关系度量
        self.F = []                             # 适应度
        self.objectives = []                    #目标函数值       
        #self.np = []                            #该个体支配的其它个体数目
        self.set = []                           # 被支配的个体集
        
    def init_Population(self):                  #初始化种群
        self.population = np.zeros((self.pop,self.dim))
        self.archive = np.zeros((self.pop,self.dim))
        for i in range(self.pop):
            for j in range(self.dim):
                self.population[i][j] = random.random()
                self.archive[i][j] = random.random()
                
    def popu_archive(self):                     # Population和 Archive合并,pop*2
        self.popu_arch = np.zeros((2*self.pop,self.dim))
        for i in range(self.pop):
            for j in range(self.dim):
                self.popu_arch[i][j] = self.population[i][j]
                self.popu_arch[i+self.pop][j] = self.archive[i][j]
                
    def cal_obj(self,position):                 #计算一个个体的多目标函数值 f1,f2 最小值
        f1 = position[0]
        f = 0
        for i in range(self.dim-1):
     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值