dynobud-1.7.1.0: examples/beginner/SimpleQp.hs
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
module Main where
import GHC.Generics ( Generic, Generic1 )
import Dyno.Vectorize
import Dyno.NlpUtils
import Dyno.Solvers
-- minimize: x0**2 + 2*x1**2
-- subject to: 1 <= 2*x0 + x1 <= inf
-- -inf <= x0 <= 10
-- -20 <= x1 <= inf
-- design variable
data X a = X a a deriving (Functor, Generic, Generic1, Show)
instance Vectorize X
-- constraint
data G a = G a deriving (Functor, Generic, Generic1, Show)
instance Vectorize G
-- objective/constraint function
fg :: Num a => X a -> (a, G a)
fg (X x0 x1) = (f, g)
where
f = x0*x0 + 2*x1*x1
g = G (2*x0 + x1)
-- design variable bounds
bx :: X (Maybe Double, Maybe Double)
bx = X (Nothing, Just 10) (Just (-20), Nothing)
-- constraint bounds
bg :: G (Maybe Double, Maybe Double)
bg = G (Just 1, Nothing)
-- initial guess
xguess :: X Double
xguess = X 2 3
main :: IO ()
main = do
opt <- solveNlpV ipoptSolver fg bx bg xguess Nothing
print opt