看这篇文章之前,读者应已经理解差分进化算法。
用python写带约束条件的差分进化的代码时,我参考了别人不带约束条件的代码。我解决的问题如下图所示。
我得到的结果如下
-14.98869与-15差一点,不过算是找到了f(x)的最小值。对应的向量也与(1,1,1,1,1,1,1,1,1,3,3,3,1)差不多。
我的代码如下:
# -*- coding: cp936 -*-
import pdb
import g01
import matplotlib.pyplot as plt
global Gm,F0,Np,CR,D
Gm=500
F0=0.5
Np=130
CR=0.2
G=1
D=13
from numpy import *
import numpy as np
V=np.zeros((Np,D))
U=np.zeros((Np,D))
XG_next=np.zeros((Np,D))
value=np.zeros(Np)
cv=np.zeros(Np)
cv[:]=1000
##############产生初始种群############
from numpy import random
max0=1
max1=100
min0=0
min1=0
X0=random.random(size=(Np,D))
for i in range(9):
X0[:,i]=X0[:,i]*(max0-min0)+min0
for i in r