最新粒子群算法(带约束处理)——Python&Matlab实现

本文介绍了使用Python和Matlab实现粒子群优化算法,并处理约束问题。详细展示了Python代码,包括目标函数、惩罚项计算、速度和位置更新公式,以及全局最优位置的更新策略。在Python实现中,还给出了绘图结果,展示了适应度值随迭代的演变。
摘要由CSDN通过智能技术生成

Z = 2 * A + X ** 2 - A * np.cos(2 * np.pi * X) + Y ** 2 - A * np.cos(2 * np.pi * Y)

绘图

fig = plt.figure()

ax = Axes3D(fig)

surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)

plt.show()

4 代码实现:Python&Matlab

====================

4.1 Python实现


4.1.1 代码

该问题中上下限约束通过策略 1 解决,不等式约束通过惩罚项解决。

导入包============

import numpy as np

from tqdm import tqdm

import matplotlib.pyplot as plt

from pylab import *

mpl.rcParams[‘font.sans-serif’] = [‘SimHei’] # 指定默认字体

mpl.rcParams[‘axes.unicode_minus’] = False ## 解决保存图像是负号’-'显示为方块的问题

class Liqun:

def init(self):

Pso参数:

self.w = 1 # 惯性因子,一般取 1

self.c1 = 2 # 学习因子 1,一般取 2

self.c2 = 2 #学习因子 2,一般取 2

self.dim = 2 # 维度的维度#对应 2 个参数 x,y (针对具体问题)

self.size = 100 # 种群大小,即种群中小鸟的个数

self.iter_num = 1000 # 算法最大迭代次数

self.max_vel = 0.5 # 限制粒子的最大速度为 0.5

self.min_vel = -0.5 # 限制粒子的最小速度为-0.5

#============= 目标函数公式:============================

def calc_f(self, X): #计算个体粒子的的适应度值,也就是目标函数值,X 的维度是 size * 2

a = 10

x = X[0]

y = X[1]

return 2 * a + x ** 2 - a * np.cos(2 * np.pi * x) + y ** 2 - a * np.cos(2 * np.pi * y)

=惩罚项公式:=====================

def calc_e1(self, X): #个体惩罚项,计算第一个约束的惩罚项

e = X[0] + X[1] - 6

return max(0, e)

def calc_e2(self, X): #个体惩罚项,计算第二个约束的惩罚项

e = 3 * X[0] - 2 * X[1] - 5

return max(0, e)

#========== 由惩罚项计算Lj(权重值):====================

def calc_Lj(self, e1, e2): #根据每个粒子的约束惩罚项计算Lj权重值,e1, e2列向量,表示每个粒子的第1个第2个约束的惩罚项值

if (e1.sum() + e2.sum()) <= 0: # 注意防止分母为零的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值