Skip to content

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

@jc-macdonald

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions