Skip to content

Implement Design module wrapping QuasiMonteCarlo.jl + GlobalSensitivity.jl #28

Description

@jc-macdonald

Summary

Port design.py for experimental design: full factorial grids, LHS/QMC sampling, and sensitivity screening.

Functions to Implement

Function Description Julia dep
build_grid(factors; method=:full) Full factorial grid Combinatorics / custom iterator
build_grid(factors; method=:lhs, n=...) Latin Hypercube / QMC QuasiMonteCarlo.jl
build_grid(factors; method=:sobol, n=...) Sobol QMC sequence QuasiMonteCarlo.jl
screen(factors, model; method=:morris) Morris OAT sensitivity screening GlobalSensitivity.jl
reduce_factors(screening_result; threshold) Drop insensitive factors Pure Julia

Types to Implement

@enum FactorType CONTINUOUS DISCRETE CATEGORICAL

struct Factor
    name::Symbol
    type::FactorType
    levels  # Vector for CATEGORICAL/DISCRETE, Tuple{Float64,Float64} for CONTINUOUS
end

Design Notes

  • QuasiMonteCarlo.jl (SciML) provides LHS, Sobol, Halton, Faure, lattice rules + scrambling. Superior to LatinHypercubeSampling.jl (unmaintained since 2023).
  • GlobalSensitivity.jl (SciML, JOSS published) supports Sobol, Morris, eFAST, DGSM, PAWN, RBD-FAST — exceeds SALib's coverage.
  • Full factorial for discrete/categorical factors: use Iterators.product from Base.

Dependencies

[deps]
QuasiMonteCarlo = "..."
GlobalSensitivity = "..."

[compat]
QuasiMonteCarlo = "0.3"
GlobalSensitivity = "2"

Acceptance Criteria

  • Full factorial matches expected row count
  • LHS produces correct dimensionality and bounds
  • Morris screening identifies known-sensitive factors in test function
  • Continuous + categorical factors handled in mixed designs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions