bug修复 | org.apache.commons.math3.exception.NoBracketingException

显示的错误:org.apache.commons.math3.exception.NoBracketingException: function values at endpoints do not have different signs, endpoints: [0, 1], values: [-0.694, 0.306]

原因:beta分布的参数为负数,导致采样时出现上述错误。

算法中需要对beta分布进行采样,采样时会用到Inverse transform sampling

解决时间:3h

定位问题:

1. 通过log确定出错的代码:beta分布采样

2. 搜索这个error,并没有发现与beta分布采样有关的资料,现有的资料都是说在解方程时没有解造成的错误。

3. 由于代码没动过,怀疑和beta参数有关,于是打印beta分布的参数。期间犯了新手的错误,没有collect(),导致在executer上打印了参数

4. 期间查看org.apache.commons.math3.distribution.BetaDistribution,发现sample方法会用到inversion method,这方法会解方程

5. collect()之后发现参数有负值(参数alpha),这个值表示的是奖励,在不继地累加,而类型是int,最终超过了上限变成了负值。

定位策略优化:

1. 定位到是beta分布采样时出错,首先要做的是检查beta分布的参数是否异常,应该要先打印参数检查下。

2. 搜索 BetaDistribution sample org.apache.commons.math3.exception.NoBracketingException没结果时,要学会分别搜索BetaDistribution sample及org.apache.commons.math3.exception.NoBracketingException

猜你喜欢

转载自blog.csdn.net/weixin_33989780/article/details/87463462
今日推荐