-- |

module Modelling.PetriNet.PetriDeadlock.Config where

import Modelling.PetriNet.Reach.Deadlock (DeadlockConfig(..))
import Modelling.PetriNet.Reach.Filter  (defaultFilterConfig, FilterConfig(absentTransitionsRequirement, forbiddenCycleLengths, requireCycleLengthsAny))
import Modelling.PetriNet.Reach.Type    (Capacity(..), TransitionBehaviorConstraints(..), ArrowDensityConstraints(..))
import Data.GraphViz.Commands           (GraphvizCommand(..))

{-|
points: 0.2
-}
task2023_29 :: DeadlockConfig
task2023_29 :: DeadlockConfig
task2023_29 = DeadlockConfig {
  numPlaces :: Int
numPlaces = Int
4,
  numTransitions :: Int
numTransitions = Int
4,
  capacity :: Capacity Place
capacity = Capacity Place
forall s. Capacity s
Unbounded,
  graphLayouts :: [GraphvizCommand]
graphLayouts = [GraphvizCommand
Circo],
  maxTransitionLength :: Int
maxTransitionLength = Int
7,
  minTransitionLength :: Int
minTransitionLength = Int
7,
  transitionBehaviorConstraints :: TransitionBehaviorConstraints
transitionBehaviorConstraints = TransitionBehaviorConstraints { allowedTokenChanges :: Maybe Ordering
allowedTokenChanges = Maybe Ordering
forall a. Maybe a
Nothing, areNonPreserving :: Maybe Int
areNonPreserving = Maybe Int
forall a. Maybe a
Nothing },
  arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
    incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    incomingArrowsPerPlace :: (Int, Maybe Int)
incomingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    outgoingArrowsPerPlace :: (Int, Maybe Int)
outgoingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    totalArrowsFromPlacesToTransitions :: (Int, Maybe Int)
totalArrowsFromPlacesToTransitions = (Int
4, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8),
    totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
4, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8)
    },
  maxPrintedSolutions :: Int
maxPrintedSolutions = Int
10,
  rejectLongerThan :: Maybe Int
rejectLongerThan = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
7,
  showLengthHint :: Bool
showLengthHint = Bool
False,
  showMinLengthHint :: Bool
showMinLengthHint = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  fusableTransitionsConsumingAreExactly :: Maybe Int
fusableTransitionsConsumingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  fusableTransitionsProducingAreExactly :: Maybe Int
fusableTransitionsProducingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { forbiddenCycleLengths = [], absentTransitionsRequirement = 0, requireCycleLengthsAny = [] }
  }

{-|
points: 0.25
-}
task2023_30 :: DeadlockConfig
task2023_30 :: DeadlockConfig
task2023_30 = DeadlockConfig {
  numPlaces :: Int
numPlaces = Int
6,
  numTransitions :: Int
numTransitions = Int
8,
  capacity :: Capacity Place
capacity = Capacity Place
forall s. Capacity s
Unbounded,
  graphLayouts :: [GraphvizCommand]
graphLayouts = [GraphvizCommand
Circo],
  maxTransitionLength :: Int
maxTransitionLength = Int
14,
  minTransitionLength :: Int
minTransitionLength = Int
14,
  transitionBehaviorConstraints :: TransitionBehaviorConstraints
transitionBehaviorConstraints = TransitionBehaviorConstraints { allowedTokenChanges :: Maybe Ordering
allowedTokenChanges = Maybe Ordering
forall a. Maybe a
Nothing, areNonPreserving :: Maybe Int
areNonPreserving = Maybe Int
forall a. Maybe a
Nothing },
  arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
    incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    incomingArrowsPerPlace :: (Int, Maybe Int)
incomingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    outgoingArrowsPerPlace :: (Int, Maybe Int)
outgoingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    totalArrowsFromPlacesToTransitions :: (Int, Maybe Int)
totalArrowsFromPlacesToTransitions = (Int
8, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
16),
    totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
8, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
16)
    },
  maxPrintedSolutions :: Int
maxPrintedSolutions = Int
10,
  rejectLongerThan :: Maybe Int
rejectLongerThan = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
14,
  showLengthHint :: Bool
showLengthHint = Bool
False,
  showMinLengthHint :: Bool
showMinLengthHint = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  fusableTransitionsConsumingAreExactly :: Maybe Int
fusableTransitionsConsumingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  fusableTransitionsProducingAreExactly :: Maybe Int
fusableTransitionsProducingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { forbiddenCycleLengths = [], requireCycleLengthsAny = [] }
  }

{-|
points: 0.2
-}
task2024_27 :: DeadlockConfig
task2024_27 :: DeadlockConfig
task2024_27 = DeadlockConfig
task2023_29

{-|
points: 0.25
average generation time per instance: 1:49min
CPU usage: 99%
-}
task2024_28 :: DeadlockConfig
task2024_28 :: DeadlockConfig
task2024_28 = DeadlockConfig
task2023_30

{-|
points: 0.08
-}
task2024_61 :: DeadlockConfig
task2024_61 :: DeadlockConfig
task2024_61 = DeadlockConfig {
  numPlaces :: Int
numPlaces = Int
4,
  numTransitions :: Int
numTransitions = Int
4,
  capacity :: Capacity Place
capacity = Capacity Place
forall s. Capacity s
Unbounded,
  graphLayouts :: [GraphvizCommand]
graphLayouts = [GraphvizCommand
Circo],
  maxTransitionLength :: Int
maxTransitionLength = Int
8,
  minTransitionLength :: Int
minTransitionLength = Int
8,
  transitionBehaviorConstraints :: TransitionBehaviorConstraints
transitionBehaviorConstraints = TransitionBehaviorConstraints { allowedTokenChanges :: Maybe Ordering
allowedTokenChanges = Maybe Ordering
forall a. Maybe a
Nothing, areNonPreserving :: Maybe Int
areNonPreserving = Maybe Int
forall a. Maybe a
Nothing },
  arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
    incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
    incomingArrowsPerPlace :: (Int, Maybe Int)
incomingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    outgoingArrowsPerPlace :: (Int, Maybe Int)
outgoingArrowsPerPlace = (Int
0, Maybe Int
forall a. Maybe a
Nothing),
    totalArrowsFromPlacesToTransitions :: (Int, Maybe Int)
totalArrowsFromPlacesToTransitions = (Int
4, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8),
    totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
4, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8)
    },
  maxPrintedSolutions :: Int
maxPrintedSolutions = Int
10,
  rejectLongerThan :: Maybe Int
rejectLongerThan = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8,
  showLengthHint :: Bool
showLengthHint = Bool
False,
  showMinLengthHint :: Bool
showMinLengthHint = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  fusableTransitionsConsumingAreExactly :: Maybe Int
fusableTransitionsConsumingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  fusableTransitionsProducingAreExactly :: Maybe Int
fusableTransitionsProducingAreExactly = Maybe Int
forall a. Maybe a
Nothing,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { absentTransitionsRequirement = 0, forbiddenCycleLengths = [], requireCycleLengthsAny = [] }
  }