В пакете ad
есть несколько полезных процедур и одна или две операции градиентного спуска. Например:
$ cabal install --pacakge-env . --lib ad
$ ghci
> import Numeric.AD
> take 1 $ drop 10000 $ gradientDescent (\[x] -> (x-1)^2 + 3) [10]
[[1.0000000000377052]]
> conjugateGradientDescent (\[x] -> (x-1)^2 + 3) [10]
[[10.0],[1.0]]
Мы видим функцию, которую мы минимизируем, входные данные как перемещаемые (в данном случае список) и начальную точку отсчета [10]
. Это пакет, который лежит в основе пакета optimization
и должен обеспечить хорошее начало, даже если он не решит вашу проблему полностью.