def _evalfull(self, x):
fadd = self.fopt
curshape, dim = self.shape_(x)
# it is assumed x are row vectors
if self.lastshape != curshape:
self.initwithsize(curshape, dim)
# TRANSFORMATION IN SEARCH SPACE
x = 2 * self.arrsigns * x # makes the below boundary handling effective for coordinates
try:
x[:, 1:] = x[:, 1:] + .25 * (x[:, :-1] - self.arrxopt[:, :-1])
except IndexError:
x[1:] = x[1:] + .25 * (x[:-1] - self.arrxopt[:-1])
x = 100. * (self.arrscales * (x - self.arrxopt) + self.arrxopt)
# BOUNDARY HANDLING
xoutside = np.maximum(0., np.abs(x) - 500.) * sign(x) # in [-500, 500]
fpen = 0.01 * np.sum(xoutside ** 2, -1)
fadd = fadd + fpen
# COMPUTATION core
ftrue = 0.01 * ((418.9828872724339) - np.mean(x * np.sin(np.sqrt(np.abs(x))), -1))
fval = self.noise(ftrue)
# FINALIZE
ftrue += fadd
fval += fadd
return fval, ftrue
评论列表
文章目录