Brief Overview of
Ludii

Competitive AI Seminar 2022

What is Ludii?

Ludii is a general game system designed to play, evaluate and design a wide range of games, including board games, card games, dice games, mathematical games, and so on. Download the Ludii player to explore our ever-growing database of games, test your AI search algorithms, and design your own games.

​Games are described as structured sets of ludemes (units of game-related information). This allows the full range of traditional strategy games from around the world to be modelled in a single playable database for the first time. Ludii is being developed as part of the ERC-funded Digital Ludeme Project.

Digital Ludeme Project

The Digital Ludeme Project is a five year ERC-funded research project hosted by Maastricht University. This project is a computational study of the world's traditional strategy games throughout recorded human history. It aims to improve our understanding of traditional games using modern AI techniques, to chart their historical development and explore their role in the development of human culture and the spread of mathematical ideas.

Competitions

 

  • IEEE CoG 2020
    • 0 submissions
  • Computer Olympiad 2020
    • 75 submissions
    • 37 games
  • IEEE CoG 2021
    • (I couldn't find any info)
  • Computer Olympiad 2022
    • 17 submissions
    • 3 tracks

Documentation

Example Game

(game "Amazons"

















    (end (if (no Moves Next) (result Mover Win)))
  ))

  (players 2)


  (equipment {
    (board (square 10))
    (piece "Queen" Each (move Slide (then (moveAgain))))
    (piece "Dot" Neutral)
  })







  (rules
    (start {
      (place "Queen1" {"A4" "D1"  "G1"  "J4"})
      (place "Queen2" {"A7" "D10" "G10" "J7"})
    })












    (play
      (if (is Even (count Moves))
          (forEach Piece)
          (move Shoot (piece "Dot0"))
      ))

Random Agent

public Move selectAction
(
  final Game game,
  final Context context,
  final double maxSeconds,
  final int maxIterations,
  final int maxDepth
)
{
  FastArrayList<Move> legalMoves = game
    .moves(context)
    .moves();
  if (!game.isAlternatingMoveGame())
    legalMoves = AIUtils
      .extractMovesForMover(legalMoves, player);
  int moves = legalMoves.size();
  int index = ThreadLocalRandom.current().nextInt(moves);
  return legalMoves.get(index);
}

GUI

Fin