Spaces:
Sleeping
Sleeping
File size: 2,385 Bytes
165ee00 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import torch
import numpy as np
#
#
# WeldedBeam: 4D objective, 5 constraints
#
# Reference:
# Gandomi AH, Yang XS, Alavi AH (2011) Mixed
# variable structural optimization using firefly
# algorithm. Computers & Structures 89(23-
# 24):2325–2336
#
#
def WeldedBeam(individuals):
assert torch.is_tensor(individuals) and individuals.size(1) == 4, "Input must be an n-by-4 PyTorch tensor."
C1 = 1.10471
C2 = 0.04811
C3 = 14.0
fx = torch.zeros(individuals.shape[0], 1)
gx1 = torch.zeros(individuals.shape[0], 1)
gx2 = torch.zeros(individuals.shape[0], 1)
gx3 = torch.zeros(individuals.shape[0], 1)
gx4 = torch.zeros(individuals.shape[0], 1)
gx5 = torch.zeros(individuals.shape[0], 1)
for i in range(individuals.shape[0]):
x = individuals[i,:]
h = x[0]
l = x[1]
t = x[2]
b = x[3]
test_function = - ( C1*h*h*l + C2*t*b*(C3+l) )
fx[i] = test_function
## Calculate constraints terms
tao_dx = 6000 / (np.sqrt(2)*h*l)
tao_dxx = 6000*(14+0.5*l)*np.sqrt( 0.25*(l**2 + (h+t)**2 ) ) / (2* (0.707*h*l * ( l**2 /12 + 0.25*(h+t)**2 ) ) )
tao = np.sqrt( tao_dx**2 + tao_dxx**2 + l*tao_dx*tao_dxx / np.sqrt(0.25*(l**2 + (h+t)**2)) )
sigma = 504000/ (t**2 * b)
P_c = 64746*(1-0.0282346*t)* t * b**3
delta = 2.1952/ (t**3 *b)
## Calculate 5 constraints
g1 = (-1) * (13600- tao)
g2 = (-1) * (30000 - sigma)
g3 = (-1) * (b - h)
g4 = (-1) * (P_c - 6000)
g5 = (-1) * (0.25 - delta)
gx1[i] = g1
gx2[i] = g2
gx3[i] = g3
gx4[i] = g4
gx5[i] = g5
gx = torch.cat((gx1, gx2, gx3, gx4, gx5), 1)
return gx, fx
def WeldedBeam_Scaling(X):
assert torch.is_tensor(X) and X.size(1) == 4, "Input must be an n-by-4 PyTorch tensor."
h = (X[:,0] * (10-0.125) + 0.125 ).reshape(X.shape[0],1)
l = (X[:,1] * (15-0.1 ) + 0.1 ).reshape(X.shape[0],1)
t = (X[:,2] * (10-0.1 ) + 0.1 ).reshape(X.shape[0],1)
b = (X[:,3] * (10-0.1 ) + 0.1 ).reshape(X.shape[0],1)
X_scaled = torch.cat((h, l, t, b), dim=1)
return X_scaled
|