{-# LANGUAGE OverloadedStrings #-}

module ASExamples where

import Interfaces.MZBuiltIns
import Interfaces.MZinHaskell
import Interfaces.MZAST
import TimeSpaceConstr.ActionSequences
import TimeSpaceConstr.TimeSpaceConstr

main = iRunModel example2

example1 = [ include "regular.mzn"
           , var (Array [CT $ 1...20] Dec (CT $ 1...4)) "x"
           , actionSequence 2 "x" (atmost 1 3)
           , solve satisfy
           ]

example2 = (useCostPreds [uniformCostPred, discountCostPred, dependentCostPred])
        ++ [ include "regular.mzn"
           , var (Array [CT $ 1...10] Dec (CT $ 1...8)) "x"
           , actionSequence 6 "x" (atleast_cells 2)
           , actionSequence 6 "x" (atleast 1 1)
           , actionSequence 6 "x" (or_as 2 3)
           , actionSequence 6 "x" (or_as 3 4)
           , actionSequence 6 "x" (or_as 5 6)
           , actionSequence 6 "x" (implication 2 6)
           , actionSequence 6 "x" (value_precedence 3 5)
           , var Int "c1", var Int "c2", var Int "c3"
           , var Int "c4", var Int "c5", var Int "c6"
           , actionSequenceCost "x" "c1" (uniformCost 1 5)
           , actionSequenceCost "x" "c2" (uniformCost 2 3)
           , actionSequenceCost "x" "c3" (uniformCost 3 7)
           , actionSequenceCost "x" "c4" (discountCost 4 7 5 3 False)
           , actionSequenceCost "x" "c5" (discountCost 5 7 10 6 False)
           , actionSequenceCost "x" "c6" (dependentCost 6 3 7 8 4 False)
           , var Int "cost" =. "c1" +. "c2" +. "c3" +. "c4" +. "c5" +. "c6"
           , solve satisfy
           ]