packages feed

numeric-optimization-ad-0.1.0.0: test/Spec.hs

import Test.Hspec

import Numeric.Optimization.AD
import IsClose


main :: IO ()
main = hspec $ do
  describe "minimize" $ do
    context "when given rosenbrock function" $
      it "returns the global optimum" $ do
        result <- minimize LBFGS def rosenbrock Nothing [] [-3,-4]
        resultSuccess result `shouldBe` True
        assertAllClose (def :: Tol Double) (resultSolution result) [1,1]


-- https://en.wikipedia.org/wiki/Rosenbrock_function
rosenbrock [x,y] = sq (1 - x) + 100 * sq (y - sq x)
  where
    sq x = x ** 2