1
- using ReliabilityOptimization, Test, NonconvexTOBS, ChainRulesCore, TopOpt, Zygote, FiniteDifferences
1
+ using ReliabilityOptimization,
2
+ Test, NonconvexTOBS, ChainRulesCore, TopOpt, Zygote, FiniteDifferences
2
3
3
4
const densities = [0.0 , 0.5 , 1.0 ] # for mass calculation
4
5
const nmats = 3 # number of materials
@@ -22,11 +23,11 @@ logEs = MvNormal(log.(avgEs), Matrix(Diagonal(0.1 .* abs.(log.(avgEs)))))
22
23
# 'Original' function. At least one input is random.
23
24
# In this example, Es is the random input.
24
25
function uncertainComp (x, logEs)
25
- Es = exp .(logEs)
26
- # interpolation of properties between materials
27
- interp = MaterialInterpolation (Es, penalty)
28
- MultiMaterialVariables (x, nmats) |> interp |> filter |> comp
29
- # return sum(x) + sum(Es)
26
+ Es = exp .(logEs)
27
+ # interpolation of properties between materials
28
+ interp = MaterialInterpolation (Es, penalty)
29
+ MultiMaterialVariables (x, nmats) |> interp |> filter |> comp
30
+ # return sum(x) + sum(Es)
30
31
end
31
32
# wrap original function in RandomFunction struct
32
33
rf = RandomFunction (uncertainComp, logEs, FORM (RIA ()))
@@ -41,8 +42,8 @@ constr = x -> begin
41
42
return sum (element_densities (ρs, densities)) / ncells - 0.3 # unit element volume
42
43
end
43
44
function obj (x) # objective for TO problem
44
- dist = rf (x)
45
- mean (dist)[1 ] + 2 * sqrt (cov (dist)[1 , 1 ])
45
+ dist = rf (x)
46
+ mean (dist)[1 ] + 2 * sqrt (cov (dist)[1 , 1 ])
46
47
end
47
48
obj (x0)
48
49
Zygote. gradient (obj, x0)
@@ -51,4 +52,4 @@ FiniteDifferences.grad(central_fdm(5, 1), obj, x0)[1]
51
52
m = Model (obj) # create optimization model
52
53
addvar! (m, zeros (length (x0)), ones (length (x0))) # setup optimization variables
53
54
Nonconvex. add_ineq_constraint! (m, constr) # setup volume inequality constraint
54
- @time r = Nonconvex. optimize (m, TOBSAlg (), x0; options = TOBSOptions ())
55
+ @time r = Nonconvex. optimize (m, TOBSAlg (), x0; options = TOBSOptions ())
0 commit comments