Spaces:
Sleeping
Sleeping
| 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 | |