@@ -26,7 +26,7 @@ function uncertainComp(x, logEs)
2626 Es = exp .(logEs)
2727 # interpolation of properties between materials
2828 interp = MaterialInterpolation (Es, penalty)
29- MultiMaterialVariables (x, nmats) |> interp |> filter |> comp
29+ MultiMaterialVariables (x, nmats) |> tounit |> filter |> interp |> comp
3030 # return sum(x) + sum(Es)
3131end
3232# wrap original function in RandomFunction struct
@@ -37,19 +37,29 @@ x0 = fill(M, ncells * (length(logEs) - 1))
3737# (Returns propability distribution of the objective for current point)
3838d = rf (x0)
3939# mass constraint
40+ constr_penalty = TopOpt. PowerPenalty (1.0 )
41+ constr_interp = MaterialInterpolation (densities, constr_penalty)
4042constr = x -> begin
41- ρs = PseudoDensities (MultiMaterialVariables (x, nmats))
42- return sum (element_densities (ρs, densities)) / ncells - 0.3 # unit element volume
43+ ρs = constr_interp (MultiMaterialVariables (x, nmats))
44+ return sum (ρs . x) / ncells - 0.3 # elements have unit volumes
4345end
4446function obj (x) # objective for TO problem
4547 dist = rf (x)
4648 mean (dist)[1 ] + 2 * sqrt (cov (dist)[1 , 1 ])
4749end
4850obj (x0)
49- Zygote. gradient (obj, x0)
50- FiniteDifferences. grad (central_fdm (5 , 1 ), obj, x0)[1 ]
51+ g1 = Zygote. gradient (obj, x0)[1 ]
52+ g2 = FiniteDifferences. grad (central_fdm (5 , 1 ), obj, x0)[1 ]
53+ norm (g1 - g2)
54+
55+ cg1 = Zygote. gradient (constr, x0)[1 ]
56+ cg2 = FiniteDifferences. grad (central_fdm (5 , 1 ), constr, x0)[1 ]
57+ norm (cg1 - cg2)
5158
5259m = Model (obj) # create optimization model
5360addvar! (m, zeros (length (x0)), ones (length (x0))) # setup optimization variables
5461Nonconvex. add_ineq_constraint! (m, constr) # setup volume inequality constraint
62+
5563@time r = Nonconvex. optimize (m, TOBSAlg (), x0; options = TOBSOptions ())
64+ # @time r = Nonconvex.optimize(m, IpoptAlg(), x0; options = IpoptOptions())
65+ # @time r = Nonconvex.optimize(m, MMA87(), x0; options = MMAOptions())
0 commit comments