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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章