

import Optimize.ASA
import Optimize.Parameter
import Random


f :: (Bool,(Double,Double)) -> Double
f (tf,(x,y)) = if  tf then x*x + y*y else x + x*x - log y 

g :: Either (Int,Int) Int -> Double
g (Left (x,y)) = realToFrac $ x * y
g (Right r) = pi*(realToFrac r)^2

main =  do
    v1 <- minimize (empty,(limit (-10) 3, limit 4 7)) f  
    v2 <- minimize (empty,(limit (-10) 3, limit 4 7)) (negate . f)  
    v3 <- minimize ((limit 10 100,limit 3 1000), limit 4 1000) g  
    v4 <- minimize ((limit 10 100,limit 3 1000), limit 4 1000) (negate . g)  
    print v1
    print v2
    print v3
    print v4
