prefácio
Se você estiver em pânico, use-o para praticar suas mãos. Algumas funções não são implementadas porque são mais problemáticas. Se eu jogar aqui, eu também uso isso diretamente para jogar, porque na verdade, quando eles jogam, eles devem adicionar conversão de offset, como cec2003, parece que não há offset. De qualquer forma, pode explicar o problema, não importa o quanto você seja.
Função de charuto dobrado
def F1(self,X):
Dim = len(X)
res = X[0]*X[0]
temp = 0.
for i in range(2,Dim+1):
temp+=X[i-1]*X[i-1]
res+=self.pow(10,6)*temp
return res
Soma de Função de Potência Diferente
def F2(self,X):
res = 0.
Dim = len(X)
for i in range(1,Dim+1):
res+=self.pow(abs(X[i-1]),(i+1))
return res
Função de Zakharov
def F3(self,X):
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=0.5*x
res = part1+self.pow(part2,2)+self.pow(part2,4)
return res
Função de Rosenbrock
def F4(self,X):
Dim = len(X)
res = 0.
for i in range(1,Dim):
res+=100*self.pow((self.pow(X[i-1],2)-X[i]),2)+(X[i-1]-1)+self.pow((X[i]-1),2)
return res
Função de Rastrigin
def F5(self,X):
res = 0.
for x in X:
res+=(x*x-10*self.cos(2*self.pi*x)+10)
return res
Função F6 de Schaffer expandida
def __g(self,x1,x2):
res = 0.5+(self.pow(self.sin(self.sqrt(x1*x1+x2*x2)),2)/self.pow((1+0.001*(x1*x1+x2*x2)),2))
return res
def F6(self,X):
Dim = len(X)
res = 0.
for i in range(Dim-1):
res+=self.__g(X[i],X[i+1])
res+=self.__g(X[Dim-1],X[0])
return res
Função Lunacek bi-Rastrigina
Função de Rastrigin Rotação Não Contínua
def F8(self,X):
res = 0.
for x in X:
if(abs(x)<0.5):
y = x
else:
y = (round(2*x)/2)
res+=y*y - 10*(self.cos(2*self.pi*y)) + 10
return res
Função de Cobrança
def F9(self,X):
Dim = len(X)
res = self.pow(self.sin(self.pi*(1+(X[0]-1/4))),2)
part2 = 0.
for i in range(1,Dim):
w = (1+(X[i-1]-1/4))
part2+=self.pow(w,2)*(1+10*self.pow(self.pi*w+1,2))
w = (1 + (X[Dim - 1] - 1 / 4))
res+=part2+(self.pow(w-1,2)*(1+self.pow(self.sin(2*self.pi*w),2)))
return res
Função de Schwefel modificada
Função elíptica altamente condicionada
def F11(self,X):
Dim = len(X)
res = 0.
for i in range(1,Dim+1):
res+=self.pow(1000000,(i-1/Dim-1))*X[i-1]*X[i-1]
return res
Função de disco
def F12(self,X):
res = 1000000*X[0]*X[0]
Dim = len(X)
for i in range(1,Dim):
res+=X[i]*X[i]
return res
Função de Ackley
def F13(self,X):
Dim = len(X)
part2 = 0.
part3 = 0.
for x in X:
part2+=x*x
part3+=self.cos(self.pi*2*x)
res = -20*self.exp(-0.2*self.sqrt((1/Dim)*part2))-self.exp((1/Dim)*part3)+20+self.e
return res
Função Weierstrass
def F14(self,X):
kmax = 20;a=0.5;b=3
Dim = len(X)
part1 = 0.
for x in X:
temp = 0.
for i in range(kmax+1):
temp+=self.pow(a,i)*self.cos(2*self.pi*self.pow(b,i)*(x+0.5))
part1+=temp
part2 = Dim
temp=0.
for i in range(kmax+1):
temp += self.pow(a, i) * self.cos(2 * self.pi * self.pow(b, i) * 0.5)
part2*=temp
res = part1-part2
return res
Função de Griewank
def F15(self,X):
part1 = 0.
part2 = 1
Dim = len(X)
for i in range(1,Dim+1):
part1+=X[i-1]*X[i-1]/4000
part2*=self.cos(X[i-1]/self.sqrt(i))
res = part1-part2 +1
return res
Função Katsuura
def F16(self,X):
Dim = len(X)
part1 = 1
for i in range(1,Dim+1):
temp=0.
for j in range(1,33):
temp+=abs(self.pow(2,j)*X[i-1]-round(self.pow(2,j)*X[i-1]))/2**j
temp = self.pow(1+i*temp,(10/Dim**1.2))
part1*=temp
res = (10/Dim**2)*part1-(10/Dim**2)
return res
Função HappyCat
def F17(self,X):
Dim = len(X)
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=x
res = self.pow(abs(part1-Dim),0.25)+(0.5*part1+part2)/Dim + 0.5
return res
Função HGBat
def F18(self,X):
Dim = len(X)
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=x
res = self.pow(abs(self.pow(part1,2)-self.pow(part2,2)),0.5)+(0.5*part1+part2)/Dim + 0.5
return res
Função F7 de Schaffer
def F20(self,X):
Dim = len(X)
part1 = 0.
for i in range(0,Dim-1):
s = self.sqrt(X[i]**2+X[i+1]**2)
part1+=self.sqrt(s)*(self.sin(50.0*s**0.2)+1)
res = self.pow((1/(Dim-1))*part1,2)
return res
código completo
import math
class Functions(object):
"""
先实例出对象来,减少new对象的时间,python优化
"""
pow = math.pow
cos = math.cos
sin = math.sin
pi = math.pi
exp = math.exp
sqrt = math.sqrt
e = math.e
def F1(self,X):
Dim = len(X)
res = X[0]*X[0]
temp = 0.
for i in range(2,Dim+1):
temp+=X[i-1]*X[i-1]
res+=self.pow(10,6)*temp
return res
def F2(self,X):
res = 0.
Dim = len(X)
for i in range(1,Dim+1):
res+=self.pow(abs(X[i-1]),(i+1))
return res
def F3(self,X):
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=0.5*x
res = part1+self.pow(part2,2)+self.pow(part2,4)
return res
def F4(self,X):
Dim = len(X)
res = 0.
for i in range(1,Dim):
res+=100*self.pow((self.pow(X[i-1],2)-X[i]),2)+(X[i-1]-1)+self.pow((X[i]-1),2)
return res
def F5(self,X):
res = 0.
for x in X:
res+=(x*x-10*self.cos(2*self.pi*x)+10)
return res
def __g(self,x1,x2):
res = 0.5+(self.pow(self.sin(self.sqrt(x1*x1+x2*x2)),2)/self.pow((1+0.001*(x1*x1+x2*x2)),2))
return res
def F6(self,X):
Dim = len(X)
res = 0.
for i in range(Dim-1):
res+=self.__g(X[i],X[i+1])
res+=self.__g(X[Dim-1],X[0])
return res
def __A(self, alpha,Dim,i):
res = self.pow(alpha,(i-1/Dim-1))
return res
def F8(self,X):
res = 0.
for x in X:
if(abs(x)<0.5):
y = x
else:
y = (round(2*x)/2)
res+=y*y - 10*(self.cos(2*self.pi*y)) + 10
return res
def F9(self,X):
Dim = len(X)
res = self.pow(self.sin(self.pi*(1+(X[0]-1/4))),2)
part2 = 0.
for i in range(1,Dim):
w = (1+(X[i-1]-1/4))
part2+=self.pow(w,2)*(1+10*self.pow(self.pi*w+1,2))
w = (1 + (X[Dim - 1] - 1 / 4))
res+=part2+(self.pow(w-1,2)*(1+self.pow(self.sin(2*self.pi*w),2)))
return res
def F11(self,X):
Dim = len(X)
res = 0.
for i in range(1,Dim+1):
res+=self.pow(1000000,(i-1/Dim-1))*X[i-1]*X[i-1]
return res
def F12(self,X):
res = 1000000*X[0]*X[0]
Dim = len(X)
for i in range(1,Dim):
res+=X[i]*X[i]
return res
def F13(self,X):
Dim = len(X)
part2 = 0.
part3 = 0.
for x in X:
part2+=x*x
part3+=self.cos(self.pi*2*x)
res = -20*self.exp(-0.2*self.sqrt((1/Dim)*part2))-self.exp((1/Dim)*part3)+20+self.e
return res
def F14(self,X):
kmax = 20;a=0.5;b=3
Dim = len(X)
part1 = 0.
for x in X:
temp = 0.
for i in range(kmax+1):
temp+=self.pow(a,i)*self.cos(2*self.pi*self.pow(b,i)*(x+0.5))
part1+=temp
part2 = Dim
temp=0.
for i in range(kmax+1):
temp += self.pow(a, i) * self.cos(2 * self.pi * self.pow(b, i) * 0.5)
part2*=temp
res = part1-part2
return res
def F15(self,X):
part1 = 0.
part2 = 1
Dim = len(X)
for i in range(1,Dim+1):
part1+=X[i-1]*X[i-1]/4000
part2*=self.cos(X[i-1]/self.sqrt(i))
res = part1-part2 +1
return res
def F16(self,X):
Dim = len(X)
part1 = 1
for i in range(1,Dim+1):
temp=0.
for j in range(1,33):
temp+=abs(self.pow(2,j)*X[i-1]-round(self.pow(2,j)*X[i-1]))/2**j
temp = self.pow(1+i*temp,(10/Dim**1.2))
part1*=temp
res = (10/Dim**2)*part1-(10/Dim**2)
return res
def F17(self,X):
Dim = len(X)
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=x
res = self.pow(abs(part1-Dim),0.25)+(0.5*part1+part2)/Dim + 0.5
return res
def F18(self,X):
Dim = len(X)
part1 = 0.
part2 = 0.
for x in X:
part1+=x*x
part2+=x
res = self.pow(abs(self.pow(part1,2)-self.pow(part2,2)),0.5)+(0.5*part1+part2)/Dim + 0.5
return res
def F20(self,X):
Dim = len(X)
part1 = 0.
for i in range(0,Dim-1):
s = self.sqrt(X[i]**2+X[i+1]**2)
part1+=self.sqrt(s)*(self.sin(50.0*s**0.2)+1)
res = self.pow((1/(Dim-1))*part1,2)
return res
- Estou participando do recrutamento do programa de assinatura de criadores da Comunidade de Tecnologia Nuggets, clique no link para se cadastrar e enviar .