Spaces:
Sleeping
Sleeping
import torch | |
import numpy as np | |
# | |
# | |
# KeaneBump: N-D objective (can take data of different dimention; we use 18), | |
# 2 constraints | |
# | |
# Reference: | |
# Keane A (1994) Experiences with optimizers in | |
# structural design. In: Proceedings of the con- | |
# ference on adaptive computing in engineering | |
# design and control, pp 14–27 | |
# | |
# | |
def KeaneBump(X): | |
fx = torch.zeros(X.shape[0], 1) | |
gx1 = torch.zeros(X.shape[0], 1) | |
gx2 = torch.zeros(X.shape[0], 1) | |
for i in range(X.shape[0]): | |
x = X[i,:] | |
cos4 = 0 | |
cos2 = 1 | |
sq_denom = 0 | |
pi_sum = 1 | |
sigma_sum = 0 | |
for j in range(X.shape[1]): | |
cos4 += torch.cos(x[j]) ** 4 | |
cos2 *= torch.cos(x[j]) ** 2 | |
sq_denom += (j+1) * (x[j])**2 | |
pi_sum *= x[j] | |
sigma_sum += x[j] | |
# Objective | |
test_function = torch.abs( (cos4 - 2*cos2) / torch.sqrt(sq_denom) ) | |
fx[i] = test_function | |
# Constraints | |
gx1[i] = 0.75 - pi_sum | |
gx2[i] = sigma_sum - 7.5* (X.shape[1]) | |
gx = torch.cat((gx1, gx2), 1) | |
return gx, fx | |
def KeaneBump_Scaling(X): | |
X_scaled = X*10 | |
return X_scaled | |