主题
简介
由于多数优化算法都是MATLAB代码,不容易与一些机器学习算法组合使用,如下是一些常见优化算法Python版本的代码,希望能帮到你。
粒子群优化算法代码
python
import numpy as np
import copy as copy
def initialization(pop,ub,lb,dim):
X = np.zeros([pop,dim])
for i in range(pop):
for j in range(dim):
X[i,j]=(ub[j]-lb[j])*np.random.random()+lb[j]
return X
def vchange(pop,ub,lb,dim):
v = np.zeros([pop,dim])
for i in range(pop):
for j in range(dim):
v[i,j]= -(ub[j]-lb[j])*0.2+(ub[j]-lb[j])*0.4*np.random.random()
return v
def BorderCheck(X,ub,lb,pop,dim):
for i in range(pop):
for j in range(dim):
if X[i,j]>ub[j]:
X[i,j] = ub[j]
elif X[i,j]<lb[j]:
X[i,j] = lb[j]
return X
def vCheck(v,pop,dim,vmax):
for i in range(pop):
for j in range(dim):
if v[i,j]>vmax[j]:
v[i,j] =vmax[j]
elif v[i,j]<-vmax[j]:
v[i,j] = -vmax[j]
return v
def CaculateFitness(X,fun):
pop = X.shape[0]
fitness = np.zeros([pop, 1])
for i in range(pop):
fitness[i] = fun(X[i, :])
return fitness
def PSO(pop, dim, lb, ub, maxIter, fun, vmax):
c1 = 2
c2 = 2
w = 0.9
X = initialization(pop,ub,lb,dim)
v = vchange(pop,ub,lb,dim)
fitness = CaculateFitness(X, fun)
ind = np.argmin(fitness)
GbestPositon = np.zeros([1,dim])
GbestPositon = X[ind, :]
GbestScore = np.min(fitness)
pbest = np.zeros([pop,dim])
pbest = copy.copy(X)
Curve = np.zeros([maxIter, 1])
for j in range(maxIter):
for p in range(pop):
fitness = CaculateFitness(X, fun)
v[p, :] = w * (v[p, :]) + c1 * (np.random.rand(dim)) * (pbest[p, :] - X[p, :]) + c2 * (np.random.rand(dim)) * (GbestPositon - X[p, :])
v = vCheck(v,pop,dim,vmax)
X = X+v
X = BorderCheck(X,ub,lb,pop,dim)
fitness = CaculateFitness(X, fun)
for k in range(pop):
if fitness[k] < fun(pbest[k, :]):
pbest[k,:] = X[k,:]
if np.min(fitness) < GbestScore:
GbestPositon = X[np.argmin(fitness), :]
GbestScore = np.min(fitness)
Curve[j] = GbestScore
return GbestScore,GbestPositon,Curve