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 | |