簡體   English   中英

如何正確使用scipy.optimize.minimize函數返回整數

[英]How to properly use scipy.optimize.minimize for function returning integer

TL; DR:如何最小化返回整數值(而不是浮點數)的相當平滑的函數?

>>> import scipy.optimize as opt
>>> opt.fmin(lambda (x,y): (0.1*x**2+0.1*(y**2)), (-10, 9))
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 49
         Function evaluations: 92
array([ -3.23188819e-05,  -1.45087583e-06])
>>> opt.fmin(lambda (x,y): int(0.1*x**2+0.1*(y**2)), (-10, 9))
Optimization terminated successfully.
         Current function value: 17.000000
         Iterations: 17
         Function evaluations: 60
array([-9.5 ,  9.45])

試圖最小化接受浮點參數但返回整數的函數,我遇到了求解器立即終止的問題。 上面的示例演示了這種效果-請注意,當將返回的值四舍五入為int時,評估會過早終止。

我認為發生這種情況是因為它沒有檢測到導數的變化,即,第一次更改參數時,它所做的更改太小,第一個結果與第二個之間的差為0.00000000000,錯誤地表明已找到最小值。

我對optimize.anneal的運氣更好,但是盡管它的返回值是整數,但我還是在三個維度上繪制了該函數的某些區域,並且實際上非常平滑。 因此,我希望當派生感知的最小化器能夠更好地工作。

我已恢復為手動繪制圖形以探索空間,但是我想引入更多參數,因此如果可以完成此工作將非常好。

我嘗試最小化的函數無法返回浮點數。 它正在計算交叉驗證的成功命中次數,而我正在讓優化器更改模型上的參數。

有任何想法嗎?

UPDATE

發現了一個類似的問題: 如何在scipy.optimize函數上強制執行更大的步驟?

通常,整數空間上的最小化是一個完全不同的字段,稱為整數編程(或離散優化)。 整數約束的添加實際上會產生很多算法上的困難,從而使連續方法變得不合適。 查看scipy.optimize.anneal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM