@startuml

class GeneticAlgorithm {
- ModularNetwork deepNetworkSeed
- int size
- float selectionRatio
- int epochs
- list(ModularNetwork) networks
__
+ GeneticAlgorithm(ModularNetwork, int, float, int)
+ list(ModularNetwork) evolution()
+ list(ModularNetwork) evaluation(list(ModularNetwork)
+ list(ModularNetwork) selection(list(ModularNetwork))
+ ModularNetwork mutation(ModularNetwork)
}

class Checkers {
- int turn
- int maxTurns
- tuple(int) dimensions
- dict gameBoard
- array(string) currentDirections
- array(string) otherDirections
__
+ Checkers(int)
+ dicts initialState()
+ dict createAndLinkSquares()
+ dicts fillSquares(dict)
+ dict treeOfPlays(dict, array(string))
+ dict sweepPawnMoves(dict, tuple(int), array(string))
+ dict sweepPawnCaptures(dict, tuple(int), dict)
+ dict sweepKingMoves(dict, tuple(int))
+ dict sweepKingCaptures(dict, tuple(int), dict, dict)
+ dict admissibleCaptures(dict)
+ int heightOfTree(dict)
+ array(array(tuple(int))) listOfPaths(dict)
+ int play(Player, Player)
+ void moveToken(dict, tuple(int), tuple(int))
+ void captureToken(dict, dict, tuple(int), tuple(int), tuple(int))
+ dict stateAfterMove(dict, array(dict) array(string))
+ dict stateAfterCapture(dict, array(dict) array(string))
+ array(string) overview(dict, boolean)
+ array(dict) potentialStates(dict, array(string))
}


class DeepHeuristic {
+ DeepHeuristic(ModularNetwork)
+ float evaluation(array(array(int)))
+ array(string) boardMapping(array(array(int)))
}

class AlphaBeta {
+ AlphaBeta(int, Checkers, Heuristic, int)
+ dict play()
+ float alphaBeta(dict, int, float, float, boolean)
}

class Tournament {
- array(Contestant) contestants
- int maxRounds
__
+ Tournament(arary(ModularNetwork)
+ array(Contestant) swissRounds()
+ confront(Contestant, Contestant)
}

Tournament --> AlphaBeta
Tournament --> DeepHeuristic
Tournament --> Checkers


GeneticAlgorithm --> Tournament







@enduml
