import torch import numpy as np # # # ReinforcedConcreteBeam: 3D objective, 9 constraints # # Reference: # Gandomi AH, Yang XS, Alavi AH (2011) Mixed # variable structural optimization using firefly # algorithm. Computers & Structures 89(23- # 24):2325–2336 # # def ReinforcedConcreteBeam(individuals): assert torch.is_tensor(individuals) and individuals.size(1) == 3, "Input must be an n-by-3 PyTorch tensor." fx = [] gx1 = [] gx2 = [] gx3 = [] gx4 = [] n = individuals.size(0) for i in range(n): x = individuals[i,:] As = x[0] h = x[1] b = x[2] test_function = - ( 29.4*As + 0.6*b*h ) fx.append(test_function) g1 = h/b - 4 g2 = 180 + 7.35*As*As/b - As*h gx1.append( g1 ) gx2.append( g2 ) 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)) gx = torch.cat((gx1, gx2), 1) return gx, fx def ReinforcedConcreteBeam_Scaling(X): assert torch.is_tensor(X) and X.size(1) == 3, "Input must be an n-by-3 PyTorch tensor." As = (X[:,0] * (15-0.2) + 0.2).reshape(X.shape[0],1) b = (X[:,1] * (40-28) +28).reshape(X.shape[0],1) h = (X[:,2] * 5 + 5).reshape(X.shape[0],1) X_scaled = torch.cat((As, b, h), dim=1) return X_scaled