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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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