SciML / SciML/DiffEqNoiseProcess.jl

noise processes don't appear to be reproducible

Open
#249 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Julia
Stars
62
Forks
32
Avg merge
8h 38m
Merged PRs (30d)
16

Description

Describe the bug 🐞

I cannot reproduce the solution to a noise process by setting the RNG.

Expected behavior

Passing the same RNG should reproduce exactly the same process

Minimal Reproducible Example 👇

using DiffEqNoiseProcess, SciMLBase, Random

mwe() = let
    rng = Xoshiro(999)
    W = RealWienerProcess(0.0, 0.0, 1.0; rng=rng)
    prob = NoiseProblem(W, (0.0, 10.0), rng=rng)
    SciMLBase.solve(prob; dt=0.01, rng=rng)
end

The result of this is always different, expect it to be the same on every call.

Environment (please complete the following information):

  • Output of using Pkg; Pkg.status()
Status `/tmp/jl_XrioLr/Project.toml`
  [77a26b50] DiffEqNoiseProcess v5.26.0
  [0bca4576] SciMLBase v2.134.0
  [9a3f8284] Random v1.11.0
  • Output of using Pkg; Pkg.status(; mode = PKGMODE_MANIFEST)
Status `/tmp/jl_XrioLr/Manifest.toml`
  [47edcb42] ADTypes v1.21.0
  [7d9f7c33] Accessors v0.1.43
  [79e6a3ab] Adapt v4.4.0
  [66dad0bd] AliasTables v1.1.3
  [4fba245c] ArrayInterface v7.22.0
  [62783981] BitTwiddlingConvenienceFunctions v0.1.6
  [70df07ce] BracketingNonlinearSolve v1.6.2
  [2a0fbf3d] CPUSummary v0.2.7
  [fb6a15b2] CloseOpenIntervals v0.1.13
  [38540f10] CommonSolve v0.2.6
  [f70d9fcc] CommonWorldInvalidations v1.0.0
  [34da2185] Compat v4.18.1
  [a33af91c] CompositionsBase v0.1.2
  [2569d6c7] ConcreteStructs v0.2.3
  [187b0558] ConstructionBase v1.6.0
  [adafc99b] CpuId v0.3.1
  [9a962f9c] DataAPI v1.16.0
  [864edb3b] DataStructures v0.19.3
  [2b5f629d] DiffEqBase v6.199.0
  [77a26b50] DiffEqNoiseProcess v5.26.0
  [a0c0ee7d] DifferentiationInterface v0.7.14
  [31c24e10] Distributions v0.25.123
  [ffbed154] DocStringExtensions v0.9.5
  [4e289a0a] EnumX v1.0.6
  [f151be2c] EnzymeCore v0.8.18
  [e2ba6199] ExprTools v0.1.10
  [55351af7] ExproniconLite v0.10.14
  [7034ab61] FastBroadcast v0.3.5
  [9aa1b823] FastClosures v0.3.2
  [a4df4552] FastPower v1.3.0
  [1a297f60] FillArrays v1.16.0
  [069b7b12] FunctionWrappers v1.1.3
  [77dc65aa] FunctionWrappersWrappers v0.1.3
  [46192b85] GPUArraysCore v0.2.0
  [34004b35] HypergeometricFunctions v0.3.28
  [615f187c] IfElse v0.1.1
  [3587e190] InverseFunctions v0.1.17
  [92d709cd] IrrationalConstants v0.2.6
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.7.1
  [ae98c720] Jieko v0.2.1
  [10f19ff3] LayoutPointers v0.1.17
  [2ab3a3ac] LogExpFunctions v0.3.29
  [e6f89c97] LoggingExtras v1.2.0
  [1914dd2f] MacroTools v0.5.16
  [d125e4d3] ManualMemory v0.1.8
  [bb5d69b7] MaybeInplace v0.1.4
  [e1d29d7a] Missings v1.2.0
  [2e0e35c7] Moshi v0.3.7
  [46d2c3a1] MuladdMacro v0.2.4
  [be0214bd] NonlinearSolveBase v2.10.0
  [bac558e1] OrderedCollections v1.8.1
  [90014a1f] PDMats v0.11.37
  [e409e4f3] PoissonRandom v0.4.7
  [f517fe37] Polyester v0.7.18
  [1d0040c9] PolyesterWeave v0.2.2
  [d236fae5] PreallocationTools v1.0.0 [loaded: v0.4.34]
  [aea7be01] PrecompileTools v1.3.3
  [21216c6a] Preferences v1.5.1
  [43287f4e] PtrArrays v1.3.0
  [1fd47b50] QuadGK v2.11.2
  [74087812] Random123 v1.7.1
  [e6cf234a] RandomNumbers v1.6.0
  [3cdcf5f2] RecipesBase v1.3.4
  [731186ca] RecursiveArrayTools v3.45.1
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.1
  [ae5879a3] ResettableStacks v1.2.0
  [79098fc4] Rmath v0.9.0
  [7e49a35a] RuntimeGeneratedFunctions v0.5.16
  [94e857df] SIMDTypes v0.1.0
  [0bca4576] SciMLBase v2.134.0
  [19f34311] SciMLJacobianOperators v0.1.12
  [a6db7da4] SciMLLogging v1.8.0
  [c0aeaf25] SciMLOperators v1.14.1
  [431bcebd] SciMLPublic v1.0.1
  [53ae85a6] SciMLStructures v1.10.0
  [efcf1570] Setfield v1.1.2
  [a2af1166] SortingAlgorithms v1.2.2
  [276daf66] SpecialFunctions v2.6.1
  [aedffcd0] Static v1.3.1
  [0d7ed370] StaticArrayInterface v1.8.0
  [90137ffa] StaticArrays v1.9.16
  [1e83bf80] StaticArraysCore v1.4.4
  [10745b16] Statistics v1.11.1
  [82ae8749] StatsAPI v1.8.0
  [2913bbd2] StatsBase v0.34.10
  [4c63d2b9] StatsFuns v1.5.2
  [7792a7ef] StrideArraysCore v0.5.8
  [2efcf032] SymbolicIndexingInterface v0.3.46
  [8290d209] ThreadingUtilities v0.5.5
  [a759f4b9] TimerOutputs v0.5.29
  [781d530d] TruncatedStacktraces v1.4.0
  [efe28fd5] OpenSpecFun_jll v0.5.6+0
  [f50d1b31] Rmath_jll v0.5.1+0
  [56f22d72] Artifacts v1.11.0
  [2a0f44e3] Base64 v1.11.0
  [ade2ca70] Dates v1.11.0
  [8ba89e20] Distributed v1.11.0
  [9fa8497b] Future v1.11.0
  [b77e0a4c] InteractiveUtils v1.11.0
  [ac6e5ff7] JuliaSyntaxHighlighting v1.12.0
  [8f399da3] Libdl v1.11.0
  [37e2e46d] LinearAlgebra v1.12.0
  [56ddb016] Logging v1.11.0
  [d6f4376e] Markdown v1.11.0
  [de0858da] Printf v1.11.0
  [9a3f8284] Random v1.11.0
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization v1.11.0
  [6462fe0b] Sockets v1.11.0
  [2f01184e] SparseArrays v1.12.0
  [f489334b] StyledStrings v1.11.0
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.3
  [cf7118a7] UUIDs v1.11.0
  [4ec0a83e] Unicode v1.11.0
  [e66e0078] CompilerSupportLibraries_jll v1.3.0+1
  [4536629a] OpenBLAS_jll v0.3.29+0
  [05823500] OpenLibm_jll v0.8.7+0
  [bea87d4a] SuiteSparse_jll v7.8.3+2
  [8e850b90] libblastrampoline_jll v5.15.0+0
  • Output of versioninfo()
Julia Version 1.12.4
Commit 01a2eadb047 (2026-01-06 16:56 UTC)
Build Info:
  Official https://julialang.org release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 16 × AMD Ryzen 7 3800X 8-Core Processor
  WORD_SIZE: 64
  LLVM: libLLVM-18.1.7 (ORCJIT, znver2)
  GC: Built with stock GC
Threads: 16 default, 1 interactive, 16 GC (on 16 virtual cores)
Environment:
  JULIA_EDITOR = nvim
  JULIA_NUM_THREADS = auto
  JULIA_PKG_USE_CLI_GIT = true

Additional context

Adding the line Random.seed!(999) to the start of mwe gives expected reproducible behavior. It seems the default RNG is being used somewhere even when I pass these arguments, but I'm not sure where.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the provided mwe entry point and trace how the RNG moves through RealWienerProcess, NoiseProblem, and SciMLBase.solve. Compare repeated calls with the passed RNG against the Random.seed!(999) behavior, then add a regression test if the repository’s existing test structure supports it. Done means identical processes are produced when the same RNG is passed.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.