Spaces:
Sleeping
Sleeping
File size: 2,022 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 96 97 98 99 100 101 |
import torch
import numpy as np
#
#
# CompressionSpring: 8D objective, 6 constraints
#
# Reference:
# Gandomi AH, Yang XS, Alavi AH (2011) Mixed
# variable structural optimization using firefly
# algorithm. Computers & Structures 89(23-
# 24):2325–2336
#
#
def CompressionSpring(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,:]
# print(x)
d = x[0]
D = x[1]
N = x[2]
## Negative sign to make it a maximization problem
test_function = - ( (N+2)*D*d**2 )
fx.append(test_function)
## Calculate constraints terms
g1 = 1 - ( D*D*D * N / (71785* d*d*d*d) )
g2 = (4*D*D - D*d) / (12566 * (D*d*d*d - d*d*d*d)) + 1/(5108*d*d) - 1
g3 = 1 - 140.45*d / (D*D * N)
g4 = (D+d)/1.5 - 1
gx1.append( g1 )
gx2.append( g2 )
gx3.append( g3 )
gx4.append( g4 )
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))
gx4 = torch.tensor(gx4)
gx4 = gx4.reshape((n, 1))
gx = torch.cat((gx1, gx2, gx3, gx4), 1)
return gx, fx
def CompressionSpring_Scaling(X):
assert torch.is_tensor(X) and X.size(1) == 3, "Input must be an n-by-3 PyTorch tensor."
d = (X[:,0] * ( 1 - 0.05 ) + 0.05 ).reshape(X.shape[0],1)
D = (X[:,1] * ( 1.3 - 0.25 ) + 0.25 ).reshape(X.shape[0],1)
N = (X[:,2] * ( 15 - 2 ) + 2 ).reshape(X.shape[0],1)
X_scaled = torch.cat((d, D, N), dim=1)
return X_scaled
|