dynobud-1.1.0.0: examples/BasicJ.hs
-- | Minimize the Rosenbrock function (plus a trivial constraint) using
-- the more complicated NLP' interface.
-- Unfortunately, at the moment there only types here are (JV ) compound types
-- so the use of Views aren't fully illustrated.
-- todo: comment up the multiple shooting code as an example
{-# OPTIONS_GHC -Wall #-}
{-# Language DeriveFunctor #-}
{-# Language DeriveGeneric #-}
module Main where
import GHC.Generics ( Generic, Generic1 )
import Data.Vector ( Vector )
import qualified Data.Vector as V
import Casadi.MX ( MX )
import Dyno.View.View
import Dyno.View.JV ( JV, catJV, catJV', splitJV' )
import Dyno.Vectorize
import Dyno.Nlp
import Dyno.NlpSolver
import Dyno.Solvers
data X a = X a a deriving (Functor, Generic, Generic1, Show)
data G a = G a deriving (Functor, Generic, Generic1, Show)
instance Vectorize X
instance Vectorize G
myNlp :: Nlp' (JV X) JNone (JV G) MX
myNlp = Nlp' { nlpFG' = fg
, nlpBX' = bx
, nlpBG' = bg
, nlpX0' = x0
, nlpP' = cat JNone
, nlpLamX0' = Nothing
, nlpLamG0' = Nothing
, nlpScaleF' = Nothing
, nlpScaleX' = Nothing
, nlpScaleG' = Nothing
}
where
x0 :: J (JV X) (V.Vector Double)
x0 = catJV $ X (-8) (-8)
bx :: J (JV X) (Vector Bounds)
bx = catJV $
X (Just (-21), Just 0.5)
(Just (-2), Just 2)
bg :: J (JV G) (Vector Bounds)
bg = catJV $ G (Just (-10), Just 10)
fg :: J (JV X) MX -> J JNone MX -> (J (JV Id) MX, J (JV G) MX)
fg xy _ = (f, catJV' g)
where
f = (1-x)**2 + 100*(y - x**2)**2
g = G x
X x y = splitJV' xy
main :: IO ()
main = do
opt <- solveNlp' ipoptSolver myNlp Nothing
print opt