Skip to content

Implement a more advanced parameterization of the Genz functions #427

@damar-wicaksono

Description

@damar-wicaksono

The Genz family of functions are parameterized by $\boldsymbol{a}$ as the shape parameter and $\boldsymbol{b}$ as the shift parameter.
Currently, UQTestFuns include parameter values that are fixed according to certain rule, e.g., constant across dimensions, or monotonically increasing.

A more advanced parameterization of the Genz family of functions was introduced in 1, especially related to $\boldsymbol{a}$
There, three different rules of generating $\boldsymbol{a}$ was introduced (so-called decay rule):

no decay or monotonically increasing:

$$ \tilde{a}_i (M) = \frac{i - 0.5}{M}, i = 1, \ldots, M. $$

quadratic decay:

$$ \tilde{a}_i (M) = \frac{1}{i^2}, i = 1, \ldots, M. $$

exponential decay (the smallest value is set to $10^{-8}$, itself may be a hyper-parameter of the rule) :

$$ \tilde{a}_i (M) = \exp{\left( \frac{i \log{(10^{-8})} }{M} \right)}, i = 1, \ldots, M. $$

where $M$ is the number of input dimensions.

Notice that all values are positive. Increasing values of $\boldsymbol{a}$ tends to make the integration problem harder, and vice versa.
There are other rules: quartic or squared exponential but I haven't got the reference for that.

Once $\tilde{\boldsymbol{a}}$ is obtained, it is normalized to obtained $\boldsymbol{a}$ such that

$$ \sum_{i = 1}^M a_i = C $$

where $C$ is a positive normalizing constant. So the closed-form expression to obtain $\boldsymbol{a}$ is:

$$ a_i = \frac{C}{\sum_{i = 1}^M \tilde{a}_i} \tilde{a}_i. $$

But the normalization by sum is just one way. In another paper2, the normalization is with respect to $l_2$-norm, such that:

$$ \lVert \boldsymbol{a} \rVert_2 = C $$

so to obtain $\boldsymbol{a}$ from $\tilde{\boldsymbol{a}}$,

$$ a_i = \left( \frac{C^2}{\sum_{i = 1}^M \tilde{a}^2_i} \tilde{a}^2_i \right)^{0.5}. $$

Notes on implementation

It would be nice to introduce this parameterization to the codebase.
Most probably the evaluate() implementation must include additional parameters, i.e., normalization constant and normalization rule (none, $l_1$, or $l_2$ norm).
For a fixed $\boldsymbol{a}$, the normalization rule is None and the constant become irrelevant.

For exponential rule, there is one additional hyper-parameter that in theory may be adjusted; in the above example it is $10^{-8}$. But this is tricky to open because the only argument of the function to generate $\boldsymbol{a}$ that can be accessed is the number of input dimensions. Other argument cannot be passed easily. For now I opt to simply fix it to a value.

Footnotes

  1. J. D. Jakeman, M. S. Eldred, and K. Sargsyan, “Enhancing ℓ 1 -minimization estimates of polynomial chaos expansions using basis selection,” Journal of Computational Physics, vol. 289, pp. 18–34, May 2015, doi: 10.1016/j.jcp.2015.02.025.

  2. L. Van Den Bos, B. Sanderse, W. Bierbooms, and G. Van Bussel, “Generating Nested Quadrature Rules with Positive Weights based on Arbitrary Sample Sets,” SIAM/ASA J. Uncertainty Quantification, vol. 8, no. 1, pp. 139–169, Jan. 2020, doi: 10.1137/18M1213373.

Metadata

Metadata

Labels

enhancementNew feature or requestsensitivityIssues related to sensitivity analysis test functionsuq-test-functionNew test function to the code base

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions