truedoublecycle

ReservoirComputing.true_doublecycleFunction
true_doublecycle([rng], [T], dims...;
    cycle_weight=0.1, second_cycle_weight=0.1, radius=nothing,
    return_sparse=false, cycle_kwargs=(), second_cycle_kwargs=())

Creates a true double cycle reservoir, ispired by (Fu et al., 2023), with cycles built on the definition by (Rodan and Tino, 2011).

\[W_{i,j} = \begin{cases} r_1, & \text{if } i = j + 1,\;\; j \in [1, D_{\mathrm{res}} - 1], \\[4pt] r_1, & \text{if } i = 1,\;\; j = D_{\mathrm{res}}, \\[6pt] r_2, & \text{if } j = i + 1,\;\; i \in [1, D_{\mathrm{res}} - 1], \\[4pt] r_2, & \text{if } i = D_{\mathrm{res}},\;\; j = 1, \\[6pt] 0, & \text{otherwise.} \end{cases}\]

Arguments

  • rng: Random number generator. Default is Utils.default_rng()from WeightInitializers.
  • T: Type of the elements in the reservoir matrix. Default is Float32.
  • dims: Dimensions of the reservoir matrix.

Keyword arguments

  • cycle_weight: Weight of the upper cycle connections in the reservoir matrix. Default is 0.1.

  • second_cycle_weight: Weight of the lower cycle connections in the reservoir matrix. Default is 0.1.

  • radius: The desired spectral radius of the reservoir. If nothing is passed, no scaling takes place. Defaults to nothing.

  • return_sparse: flag for returning a sparse matrix. true requires SparseArrays to be loaded. Default is false.

  • cycle_kwargs, and second_cycle_kwargs: named tuples that control the kwargs for the weights generation. The kwargs are as follows:

    • sampling_type: Sampling that decides the distribution of weight negative numbers. If set to :no_sample the sign is unchanged. If set to :bernoulli_sample! then each weight can be positive with a probability set by positive_prob. If set to :irrational_sample! the weight is negative if the decimal number of the irrational number chosen is odd. If set to :regular_sample!, each weight will be assigned a negative sign after the chosen strides. strides can be a single number or an array. Default is :no_sample.
    • positive_prob: probability of the weight being positive when sampling_type is set to :bernoulli_sample!. Default is 0.5.
    • irrational: Irrational number whose decimals decide the sign of weight. Default is pi.
    • start: Which place after the decimal point the counting starts for the irrational sign counting. Default is 1.
    • strides: number of strides for assigning negative value to a weight. It can be an integer or an array. Default is 2.

Examples

Default call:

julia> res_matrix = true_doublecycle(5, 5)
5×5 Matrix{Float32}:
 0.0  0.1  0.0  0.0  0.1
 0.1  0.0  0.1  0.0  0.0
 0.0  0.1  0.0  0.1  0.0
 0.0  0.0  0.1  0.0  0.1
 0.1  0.0  0.0  0.1  0.0

Changing weights:

julia> res_matrix = true_doublecycle(5, 5; cycle_weight = 0.1, second_cycle_weight = 0.3)
5×5 Matrix{Float32}:
 0.0  0.3  0.0  0.0  0.1
 0.1  0.0  0.3  0.0  0.0
 0.0  0.1  0.0  0.3  0.0
 0.0  0.0  0.1  0.0  0.3
 0.3  0.0  0.0  0.1  0.0

Changing weights to custom arrays:

julia> res_matrix = true_doublecycle(5, 5; cycle_weight = rand(5), second_cycle_weight = .-rand(5))
5×5 Matrix{Float32}:
  0.0       -0.647066   0.0        0.0        0.604095
  0.6687     0.0       -0.853307   0.0        0.0
  0.0        0.40399    0.0       -0.565928   0.0
  0.0        0.0        0.960196   0.0       -0.120321
 -0.120321   0.0        0.0        0.874008   0.0

Changing sign of the weights with different samplings:

julia> res_matrix = true_doublecycle(5, 5; cycle_kwargs=(;sampling_type=:irrational_sample!))
5×5 Matrix{Float32}:
  0.0  0.1   0.0   0.0  -0.1
 -0.1  0.0   0.1   0.0   0.0
  0.0  0.1   0.0   0.1   0.0
  0.0  0.0  -0.1   0.0   0.1
  0.1  0.0   0.0  -0.1   0.0

julia> res_matrix = true_doublecycle(5, 5; second_cycle_kwargs=(;sampling_type=:bernoulli_sample!))
5×5 Matrix{Float32}:
 0.0  -0.1  0.0   0.0  0.1
 0.1   0.0  0.1   0.0  0.0
 0.0   0.1  0.0  -0.1  0.0
 0.0   0.0  0.1   0.0  0.1
 0.1   0.0  0.0   0.1  0.0

Returning as sparse:

julia> res_matrix = true_doublecycle(5, 5; return_sparse=true)
5×5 SparseMatrixCSC{Float32, Int64} with 10 stored entries:
  ⋅   0.1   ⋅    ⋅   0.1
 0.1   ⋅   0.1   ⋅    ⋅
  ⋅   0.1   ⋅   0.1   ⋅
  ⋅    ⋅   0.1   ⋅   0.1
 0.1   ⋅    ⋅   0.1   ⋅
source

References