# Optimization question

**URL:** <https://discourse.julialang.org/t/optimization-question/120707>\
**Category:** New to Julia\
**Created:** [September 30, 2024, 4:22am UTC](https://discourse.julialang.org/t/optimization-question/120707 "2024-09-30T04:22:20Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 30, 2024, 11:52am UTC](https://discourse.julialang.org/t/optimization-question/120707/5 "2024-09-30T11:52:24Z")

</div>

For example, following the previous tips of the other thread:

With a parametric struct:

```julia-repl
julia> struct ModelA{T}
           σ::Vector{Float64}
           ϵ::Vector{Float64}
           σ_Priors::Matrix{T}
           ϵ_Priors::Matrix{T}
       end

julia> function logPost(model)
           # return 3.0
           thesum = 0.0 # simplified version
           for i in eachindex(model.σ)
               thesum += logpdf(model.σ_Priors[i],model.σ[i])
               thesum += logpdf(model.ϵ_Priors[i],model.ϵ[i])
           end
           return thesum
       end
logPost (generic function with 2 methods)

julia> m = ModelA(rand(100), rand(100), fill(Gamma(10,0.1), 10, 10), fill(Gamma(10,0.1), 10, 10));

julia> typeof(m)
ModelA{Gamma{Float64}}

julia> @btime logPost($m)
  3.100 μs (0 allocations: 0 bytes)
-675.8052525561492

```

With the abstract field, instead:

```julia-repl
julia> struct ModelB
           σ::Vector{Float64}
           ϵ::Vector{Float64}
           σ_Priors::Matrix{Distribution}
           ϵ_Priors::Matrix{Distribution}
       end

julia> mB = ModelB(m.σ, m.ϵ, m.σ_Priors, m.ϵ_Priors);

julia> typeof(mB)
ModelB

julia> @btime logPost($mB)
  6.455 μs (600 allocations: 9.38 KiB)
-675.8052525561492

```

FWIW, I think this blog post might be helpful: [New blog post about Julia parametric types and constructors](https://discourse.julialang.org/t/new-blog-post-about-julia-parametric-types-and-constructors/120717)

---

_[View the full topic](https://discourse.julialang.org/t/optimization-question/120707)._
