EasyVVUQ icon indicating copy to clipboard operation
EasyVVUQ copied to clipboard

SC and PCE samplers do not support discrete distributions

Open fjansson opened this issue 5 years ago • 1 comments

I'm trying to use a variable with a uniform integer distribution with the SC and PCE samplers. (Eventually, I want a distribution of {0, 1} for a random binary value).

params = {
    ...
    "l_sb": { # flag for microphysics scheme: false - KK00 Khairoutdinov and Kogan, 2000              
    "type": "integer",            #   true - SB   Seifert and Beheng, 2001, 2006, Default
    "min" : 0,  
    "max" : 20,   # converted to Fortran .true., .false. in prep.sh 
    "default" : 1
    }
}

vary = {
   ...
    "l_sb"    :  cp.DiscreteUniform(0, 10),
}

It seems the SC and PCE samplers do not respect the discrete distribution, but generate real-valued sample points. Then, the generated parameters are checked and found to not obey the constraints, integer values in this case.

Traceback:

Traceback (most recent call last):
  File "easyvvuq_dales_sc.py", line 171, in <module>
    my_campaign.draw_samples()
  File "/home/jansson/code/VECMA/uq_env/lib64/python3.7/site-packages/easyvvuq-0.3.1+187.ga809472-py3.7.egg/easyvvuq/campaign.py", line 529, in draw_samples
  File "/home/jansson/code/VECMA/uq_env/lib64/python3.7/site-packages/easyvvuq-0.3.1+187.ga809472-py3.7.egg/easyvvuq/campaign.py", line 464, in add_runs
  File "/home/jansson/code/VECMA/uq_env/lib64/python3.7/site-packages/easyvvuq-0.3.1+187.ga809472-py3.7.egg/easyvvuq/params_specification.py", line 109, in process_run

RuntimeError: Error when verifying the following new run:
{'Nc_0': 55635083.268962905, 'cf': 2.422540333075852, 'Prandtl': 0.2225403330758517, 'l_sb': 0.7809953780542012, 'cn': 0.76, 'Rigc': 0.25, 'z0': 0.00016}
Identified errors were:
{'l_sb': ['must be of integer type']}

Among the test cases, I only saw one example using a discrete distribution - test_worker.py, line 109. It uses the RandomSampler.

  1. Is it possible to combine discrete integer distributions with SC and PCE sampling?
  2. If possible, there is an extra complication in that the number of allowed values may be less than the number of sampling points specified - e.g. 3rd order sampling and a binary variable. This might require allowing to have different orders for different variables.

fjansson avatar Dec 02 '19 14:12 fjansson

Part of this issue was solved with a chaospy update. Here's a summary of the current state.

Solved: chaospy fixed non-integer points in quadrature rules, specifically with joint distributions, in version 3.2.1. Discussion in https://github.com/jonathf/chaospy/issues/188

  • We should update the chaospy version in requirements.txt to at least 3.2.1. ( I have tested EasyVVUQ with chaospy 3.2.1. Chaospy 3.2.6 is available now - but EasyVVUQ doesn't work with it)

Still open: If a parameter is declared with "type": "integer", the validation fails on DiscreteUniform distributions because chaospy returns a float numpy array. Workaround: declare all variables with "type": "float".

Perhaps the validation should check the value and not the type. Potential source of confusion: when generating a chaospy quadrature of a join of only discrete distributions, the absicissas are returned as an integer array. But when generating a quadrature of a join of discrete and continuous distribution, the abscissas are returned as a float array. It doesn't seem easy or reasonable to change this.

fjansson avatar Mar 17 '20 12:03 fjansson