-- |

module Modelling.PetriNet.PetriReach.Config where

import Modelling.PetriNet.Reach.Reach   (ReachConfig(..), NetGoalConfig(..))
import Modelling.PetriNet.Reach.Filter  (defaultFilterConfig, FilterConfig(..))
import Modelling.PetriNet.Reach.Type    (Capacity(..), TransitionBehaviorConstraints(..), ArrowDensityConstraints(..))
import Data.GraphViz.Commands           (GraphvizCommand(..))
import Data.Ratio                       ((%))

{-|
points: 0.2
-}
task2023_27 :: ReachConfig
task2023_27 :: ReachConfig
task2023_27 = ReachConfig {
  netGoalConfig :: NetGoalConfig
netGoalConfig  = NetGoalConfig {
    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,
    arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
      incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
      outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      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
8),
      totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
8, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12)
      },
    maxPlacesChanged :: Int
maxPlacesChanged = Int
4,
    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
      }
    },
  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,
  showTargetNet :: Bool
showTargetNet = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { absentTransitionsRequirement = 0, forbiddenCycleLengths = [], requireCycleLengthsAny = [] }
  }

{-|
points: 0.25
-}
task2023_28 :: ReachConfig
task2023_28 :: ReachConfig
task2023_28 = ReachConfig {
  netGoalConfig :: NetGoalConfig
netGoalConfig = NetGoalConfig {
    numPlaces :: Int
numPlaces = Int
6,
    numTransitions :: Int
numTransitions = Int
6,
    capacity :: Capacity Place
capacity = Capacity Place
forall s. Capacity s
Unbounded,
    graphLayouts :: [GraphvizCommand]
graphLayouts = [GraphvizCommand
Circo],
    maxTransitionLength :: Int
maxTransitionLength = Int
12,
    minTransitionLength :: Int
minTransitionLength = Int
12,
    arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
      incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
      outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      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
12, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12),
      totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
12, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
18)
      },
    maxPlacesChanged :: Int
maxPlacesChanged = Int
6,
    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
      }
    },
  maxPrintedSolutions :: Int
maxPrintedSolutions = Int
10,
  rejectLongerThan :: Maybe Int
rejectLongerThan = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12,
  showLengthHint :: Bool
showLengthHint = Bool
False,
  showMinLengthHint :: Bool
showMinLengthHint = Bool
True,
  showTargetNet :: Bool
showTargetNet = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { forbiddenCycleLengths = [], requireCycleLengthsAny = [] }
  }

{-|
points: 0.2
-}
task2024_25 :: ReachConfig
task2024_25 :: ReachConfig
task2024_25 = ReachConfig
task2023_27

{-|
points: 0.25
-}
task2024_26 :: ReachConfig
task2024_26 :: ReachConfig
task2024_26 = ReachConfig
task2023_28

{-|
points: 0.08
-}
task2024_60 :: ReachConfig
task2024_60 :: ReachConfig
task2024_60 = ReachConfig {
  netGoalConfig :: NetGoalConfig
netGoalConfig = NetGoalConfig {
    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,
    arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
      incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
      outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      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
8),
      totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
8, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12)
      },
    maxPlacesChanged :: Int
maxPlacesChanged = Int
4,
    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
      }
    },
  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,
  showTargetNet :: Bool
showTargetNet = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  filterConfig :: FilterConfig
filterConfig = FilterConfig
defaultFilterConfig { absentTransitionsRequirement = 0, forbiddenCycleLengths = [], requireCycleLengthsAny = [] }
  }

{-|
points: 0.2
the amount of generated instances: 100
maximum concurrent amount of tasks: 50
average generation time per instance on the cluster (without considering concurrency): 1.96s
total run time on the cluster (not including queuing time): 1:41min
average CPU usage: 95.72%
average memory usage: 342.53 MB
-}
task2025_27 :: ReachConfig
task2025_27 :: ReachConfig
task2025_27 = ReachConfig {
  netGoalConfig :: NetGoalConfig
netGoalConfig  = NetGoalConfig {
    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,
    arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
      incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
      outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      incomingArrowsPerPlace :: (Int, Maybe Int)
incomingArrowsPerPlace = (Int
1, Maybe Int
forall a. Maybe a
Nothing),
      outgoingArrowsPerPlace :: (Int, Maybe Int)
outgoingArrowsPerPlace = (Int
1, Maybe Int
forall a. Maybe a
Nothing),
      totalArrowsFromPlacesToTransitions :: (Int, Maybe Int)
totalArrowsFromPlacesToTransitions = (Int
8, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8),
      totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
9, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
9)
      },
    maxPlacesChanged :: Int
maxPlacesChanged = Int
1,
    transitionBehaviorConstraints :: TransitionBehaviorConstraints
transitionBehaviorConstraints = TransitionBehaviorConstraints {
      allowedTokenChanges :: Maybe Ordering
allowedTokenChanges = Ordering -> Maybe Ordering
forall a. a -> Maybe a
Just Ordering
GT,
      areNonPreserving :: Maybe Int
areNonPreserving = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1
      }
    },
  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,
  showTargetNet :: Bool
showTargetNet = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  filterConfig :: FilterConfig
filterConfig = FilterConfig {
    rejectGroupedRepeats :: Bool
rejectGroupedRepeats = Bool
True,
    repetitiveSubsequenceThreshold :: Maybe Int
repetitiveSubsequenceThreshold = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
4,
    spaceballsPrefixThreshold :: Maybe Int
spaceballsPrefixThreshold = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
4,
    forbiddenCycleLengths :: [Int]
forbiddenCycleLengths = [Int
4],
    requireCycleLengthsAny :: [Int]
requireCycleLengthsAny = [],
    solutionSetLimit :: Maybe Int
solutionSetLimit = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
15,
    requireSolutionsArePermutations :: Bool
requireSolutionsArePermutations = Bool
False,
    absentTransitionsRequirement :: Int
absentTransitionsRequirement = Int
0,
    transitionCoverageRequirement :: Ratio Int
transitionCoverageRequirement = Int
3 Int -> Int -> Ratio Int
forall a. Integral a => a -> a -> Ratio a
% Int
4
    }
  }

{-|
points: 0.25
the amount of generated instances: 100
maximum concurrent amount of tasks: 50
average generation time per instance on the cluster (without considering concurrency): 7.48s
total run time on the cluster (not including queuing time): 1:47min
average CPU usage: 98.74%
average memory usage: 374.26 MB
-}
task2025_28 :: ReachConfig
task2025_28 :: ReachConfig
task2025_28 = ReachConfig {
  netGoalConfig :: NetGoalConfig
netGoalConfig  = NetGoalConfig {
    numPlaces :: Int
numPlaces = Int
6,
    numTransitions :: Int
numTransitions = Int
6,
    capacity :: Capacity Place
capacity = Capacity Place
forall s. Capacity s
Unbounded,
    graphLayouts :: [GraphvizCommand]
graphLayouts = [GraphvizCommand
Circo],
    maxTransitionLength :: Int
maxTransitionLength = Int
12,
    minTransitionLength :: Int
minTransitionLength = Int
12,
    arrowDensityConstraints :: ArrowDensityConstraints
arrowDensityConstraints = ArrowDensityConstraints {
      incomingArrowsPerTransition :: (Int, Maybe Int)
incomingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2),
      outgoingArrowsPerTransition :: (Int, Maybe Int)
outgoingArrowsPerTransition = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      incomingArrowsPerPlace :: (Int, Maybe Int)
incomingArrowsPerPlace = (Int
2, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      outgoingArrowsPerPlace :: (Int, Maybe Int)
outgoingArrowsPerPlace = (Int
1, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3),
      totalArrowsFromPlacesToTransitions :: (Int, Maybe Int)
totalArrowsFromPlacesToTransitions = (Int
12, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12),
      totalArrowsFromTransitionsToPlaces :: (Int, Maybe Int)
totalArrowsFromTransitionsToPlaces = (Int
14, Int -> Maybe Int
forall a. a -> Maybe a
Just Int
14)
      },
    maxPlacesChanged :: Int
maxPlacesChanged = Int
1,
    transitionBehaviorConstraints :: TransitionBehaviorConstraints
transitionBehaviorConstraints = TransitionBehaviorConstraints {
      allowedTokenChanges :: Maybe Ordering
allowedTokenChanges = Ordering -> Maybe Ordering
forall a. a -> Maybe a
Just Ordering
GT,
      areNonPreserving :: Maybe Int
areNonPreserving = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2
      }
    },
  maxPrintedSolutions :: Int
maxPrintedSolutions = Int
10,
  rejectLongerThan :: Maybe Int
rejectLongerThan = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
12,
  showLengthHint :: Bool
showLengthHint = Bool
False,
  showMinLengthHint :: Bool
showMinLengthHint = Bool
True,
  showTargetNet :: Bool
showTargetNet = Bool
True,
  showPlaceNamesInNet :: Bool
showPlaceNamesInNet = Bool
False,
  filterConfig :: FilterConfig
filterConfig = FilterConfig {
    rejectGroupedRepeats :: Bool
rejectGroupedRepeats = Bool
True,
    repetitiveSubsequenceThreshold :: Maybe Int
repetitiveSubsequenceThreshold = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3,
    spaceballsPrefixThreshold :: Maybe Int
spaceballsPrefixThreshold = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
4,
    forbiddenCycleLengths :: [Int]
forbiddenCycleLengths = [],
    requireCycleLengthsAny :: [Int]
requireCycleLengthsAny = [Int
4, Int
6],
    solutionSetLimit :: Maybe Int
solutionSetLimit = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
15,
    requireSolutionsArePermutations :: Bool
requireSolutionsArePermutations = Bool
True,
    absentTransitionsRequirement :: Int
absentTransitionsRequirement = Int
1,
    transitionCoverageRequirement :: Ratio Int
transitionCoverageRequirement = Int
2 Int -> Int -> Ratio Int
forall a. Integral a => a -> a -> Ratio a
% Int
3
    }
  }

{-|
points: 0.1
the amount of generated instances: 100
maximum concurrent amount of tasks: 100
average generation time per instance on the cluster (without considering concurrency): 9.06s
total run time on the cluster (not including queuing time): 12s
average CPU usage: 81.44%
average memory usage: 367.35 MB
-}
task2025_58 :: ReachConfig
task2025_58 :: ReachConfig
task2025_58 = ReachConfig
task2025_28