具体算法原理评论区提问吧,或者有时间的话我再写原理部分
代码自己手写的,有详细注释
import numpy as np
import random
import math
import matplotlib.pyplot as plt
from time import *
def init_x(n, d):
"""
:param n: 粒子总数量
:param d: 粒子种基因个数(维度)
:return: 随机生成的种群(二维list)
"""
population = []
for i in range(n):
gene = []
for j in range(d):
a = np.random.randint(0, 2)
gene.append(a)
population.append(gene)
return population
def init_v(n, d, V_max, V_min):
"""
:param n: 粒子总数量
:param d: 粒子种基因个数(维度)
:return: 随机生成的种群(二维list)
"""
v = []
for i in range (n):
vi = []
for j in range (d):
a = random.random() * (V_max - V_min) + V_min
vi.append(a)
v.append(vi)
return v
def fitness(p, n, d, w, w_max, v, afa):
"""
:param p: 粒子群
:param n: 群体粒子个数
:param d: 粒子维数
:param w: 物品的重量列表
:param w_max: 背包最大容量
:param v: 物品的价值列表
:param afa: 惩罚系数
:return: pbest每一个粒子的适应度列表
:return: fitweight每一个粒子的重量
tips: 如果物品总重量大于背包最大容量时,引入惩罚系数
"""
fitvalue = []
fitweight = []
for i in range (n)