rosenyu's picture
Upload 529 files
165ee00 verified
import torch
import numpy as np
#
#
# ThreeTruss: 2D objective, 3 constraints
#
# Reference:
# Yang XS, Hossein Gandomi A (2012) Bat algo-
# rithm: a novel approach for global engineer-
# ing optimization. Engineering computations
# 29(5):464–483
#
#
def ThreeTruss(individuals):
assert torch.is_tensor(individuals) and individuals.size(1) == 2, "Input must be an n-by-2 PyTorch tensor."
fx = []
gx1 = []
gx2 = []
gx3 = []
n = individuals.size(0)
for i in range(n):
x = individuals[i,:]
# print(x)
x1 = x[0]
x2 = x[1]
if x1 <=1e-5:
x1 = 1e-5
if x2 <=1e-5:
x2 = 1e-5
L = 100
P = 2
sigma = 2
## Negative sign to make it a maximization problem
test_function = - ( 2*np.sqrt(2)*x1 + x2 ) * L
fx.append(test_function)
## Calculate constraints terms
g1 = ( np.sqrt(2)*x1 + x2 ) / (np.sqrt(2)*x1*x1 + 2*x1*x2) * P - sigma
g2 = ( x2 ) / (np.sqrt(2)*x1*x1 + 2*x1*x2) * P - sigma
g3 = ( 1 ) / (x1 + np.sqrt(2)*x2) * P - sigma
gx1.append( g1 )
gx2.append( g2 )
gx3.append( g3 )
fx = torch.tensor(fx)
fx = torch.reshape(fx, (len(fx),1))
gx1 = torch.tensor(gx1)
gx1 = gx1.reshape((n, 1))
gx2 = torch.tensor(gx2)
gx2 = gx2.reshape((n, 1))
gx3 = torch.tensor(gx3)
gx3 = gx3.reshape((n, 1))
gx = torch.cat((gx1, gx2, gx3), 1)
return gx, fx
def ThreeTruss_Scaling(X):
assert torch.is_tensor(X) and X.size(1) == 2, "Input must be an n-by-2 PyTorch tensor."
return X