The Ludii general game system, developed as part of the ERC-funded Digital Ludeme Project.

Overview

The Ludii General Game System

Build Status Maintenance twitter

Ludii is a general game system being developed as part of the ERC-funded Digital Ludeme Project (DLP). This repository hosts the publicly available source code for Ludii. A precompiled build (Ludii.JAR) can be downloaded from Ludii's downloads page.

Requirements

Working with Ludii's source code requires Java Development Kit (JDK) version 8 or higher.

Getting Started

After (optionally forking) and cloning this repository, we recommend importing all projects into the Eclipse IDE. The main method to launch Ludii from your IDE is located in /Ludii/PlayerDesktop/src/app/StartDesktopApp. At this time we do not use any more sophisticated build tools (such as Maven) in our day-to-day programming with Ludii. There are some relatively simple Ant build scripts, but we only use these -- specifically, the /Ludii/PlayerDesktop/build.xml script -- for generating the releases published on the Ludii downloads page.

Note on IDEs: Other IDEs than Eclipse should ideally work as well, but we have no extensive experience working with Ludii in other IDEs, and are aware of at least some issues. For example, some parts of Ludii's code assume that, when launching Ludii from your IDE, that the current working directory is the one of the module containing the main method (i.e., /Ludii/PlayerDesktop). This is the case in Eclipse, but does not (by default) appear to be the case in some other IDEs such as IntelliJ. If you prefer working with different IDEs and are able to write a clear set of instructions for that IDE, we would be happy to see it in a new Pull Request!

Other Resources

We have various other resources available at the following links:

Contributing Guidelines

While we of course cannot guarantee that we will accept every suggested change or contribution, in principle we welcome contributions and are excited to see what you come up with! Please send contributions on GitHub as new Pull Requests, and provide brief descriptions of what has changed and in what ways these changes improve Ludii (or other aspects of the repo, such as documentation). Please ensure that any new or changed code follows the same code style as the rest of the repository.

Note: pull requests should be used for code or documentation contributions, but not for new games (i.e., .lud files). We prefer that new games are submitted through our forums.

Citing Information

When using Ludii's source code in any publications, please cite our paper describing Ludii: https://ecai2020.eu/papers/1248_paper.pdf

The following .bib entry may be used for citing the use of Ludii in papers:

@inproceedings{Piette2020Ludii,
        author      = "{\'E}. Piette and D. J. N. J. Soemers and M. Stephenson and C. F. Sironi and M. H. M. Winands and C. Browne",
        booktitle   = "Proceedings of the 24th European Conference on Artificial Intelligence (ECAI 2020)",
        title       = "Ludii -- The Ludemic General Game System",
        pages       = "411-418",
        year        = "2020",
        editor      = "G. De Giacomo and A. Catala and B. Dilkina and M. Milano and S. Barro and A. Bugarín and J. Lang",
        series      = "Frontiers in Artificial Intelligence and Applications",
        volume      = "325",
    publisher	= "IOS Press"
}

Contact Info

The preferred method for getting help with troubleshooting, suggesting or requesting additional functionality, or asking other questions about Ludii's source code, is posting a message on the Ludii Forum. Alternatively, the following email address may be used: ludii(dot)games(at)gmail(dot)com.

Acknowledgements

This repository is part of the European Research Council-funded Digital Ludeme Project (ERC Consolidator Grant #771292) run by Cameron Browne at Maastricht University's Department of Data Science and Knowledge Engineering.

European Research Council Logo

Comments
  • Random Game Generation Miscellaneous Bug Fixes

    Random Game Generation Miscellaneous Bug Fixes

    I noticed that only 2% of the games could be parsed on my machine. I think this was largely because, in the Italian locale, DecimalFormat uses commas instead of dots. The other important fix is to sort the clauses before randomly selecting the next one. Previously, clause ordering was not guaranteed to be the same across different runs. Now, setting randomSeed to true will produce the same output across different runs.

    opened by PadLex 3
  • Ludii - Analysis metric outputing conflicting numbers with swap rules

    Ludii - Analysis metric outputing conflicting numbers with swap rules

    Hello, I'm currently conducting some experiments on the game Hex using the "Evaluation Dialog" and I noticed that when I allow swap rules, the Player 1 win rate and AdvantageP1 numbers do not match and Balance also doesn't reflect the reported win rates at times. Here is the console output for an experiment on 100 trials, with no timeouts and no draws, using MC-GRAVE AI agent:

    Analysing Hex [Board Size/11x11, Swap Rules/On, End Rules/Standard]

    Please don't touch anything until complete! Generating trials: .................................................................................................... Calculating metrics: AdvantageP1 Balance Completion Drawishness Timeouts Board Coverage Default Decisiveness Moves Ideal Duration

    Agent type: MC-GRAVE Draw likelihood: 0% Timeout likelihood: 0% Average number of moves per game: 30.76 Player 1 win rate: 58% Player 2 win rate: 42%

    AdvantageP1: 0.56 (weight: 1.0) Balance: 0.88 (weight: 1.0) Completion: 1 (weight: 1.0) Drawishness: 0 (weight: 1.0) Timeouts: 0 (weight: 1.0) Board Coverage Default: 0.25405 (weight: 1.0) Decisiveness Moves: 0.42 (weight: 1.0) Ideal Duration: 0.43987 (weight: 1.0) Final Score: 3.55391

    When I look into EvaluateGame function, the win rate is calculated using "RankUtils.agentUtilities(context);" where it is explicitly checked if players swapped positions, but metrics for Advantage and Balance are calculated using "trial.status().winner()" with no further checks. If the winner is wrongly attributed to a player index before the swap, this would explain this discrepancy.

    I'm not that well versed in Java and maybe I overlooked something, but can you please check my findings? The problem is reproducible on Ludii-1.2.8 and a version close to the current master.

    Thank you,

    David

    opened by David-Ciz 2
  • Random Game Generation Miscellaneous Bug Fixes v2

    Random Game Generation Miscellaneous Bug Fixes v2

    I noticed that only 2% of the games could be parsed on my machine. I think this was largely because, in the Italian locale, DecimalFormat uses commas instead of dots. The other important fix is to sort the clauses before randomly selecting the next one. Previously, clause ordering was not guaranteed to be the same across different runs. Now, setting randomSeed to true will produce the same output across different runs.

    opened by PadLex 0
  • Taikyoku shogi: Dog's move is incorrect

    Taikyoku shogi: Dog's move is incorrect

    The Dog piece as shown on the English Wikipedia moves to either one of the three forward squares. But it appears the Dog pieces in front of the pawns are either Left Dog or Right Dog, so they will need to be changed to a regular Dog.

    opened by Smooshy30 0
  • add POMs so we can build with maven and use IDEs other than Eclipse

    add POMs so we can build with maven and use IDEs other than Eclipse

    • Adapted the POMs to the existing structure.
    • Isolate (as far as possible) tests from production code.

    Additionally this will enable to add tests with more ease.

    opened by aliedperezmartinez 2
  • Remove trailing whitespaces from .lud files

    Remove trailing whitespaces from .lud files

    Purpose

    Remove 143437 white spaces from ludii game files (human linter :) ) in dev

    Specifications

    Use simple python script:

    for ludii_file in ludii_files:
        lud = open(ludii_file, 'r').read()
        n_lud = '\n'.join(line.rstrip() for line in lud.splitlines())
        # append a newline to the end of the file
        n_lud += '\n'
        open(ludii_file, 'w').write(n_lud)
    
    opened by fbarbe00 1
  • Remove trailing whitespaces from .lud files

    Remove trailing whitespaces from .lud files

    Purpose

    Remove 143445 white spaces from ludii game files (human linter :) )

    If there's any change you'd like me to make to the script I can easily change it and run it again.

    Specifications

    Use simple python script:

    for ludii_file in ludii_files:
        lud = open(ludii_file, 'r').read()
        n_lud = '\n'.join(line.rstrip() for line in lud.splitlines())
        # append a newline to the end of the file
        n_lud += '\n'
        open(ludii_file, 'w').write(n_lud)
    
    opened by fbarbe00 3
Owner
Digital Ludeme Project
Account for repositories related to the Ludii general game system, developed for the ERC-funded Digital Ludeme Project.
Digital Ludeme Project
A platform for intelligent agent learning based on a 3D open-world FPS game developed by Inspir.AI.

Wilderness Scavenger: 3D Open-World FPS Game AI Challenge This is a platform for intelligent agent learning based on a 3D open-world FPS game develope

null 46 Nov 24, 2022
General Vision Benchmark, a project from OpenGVLab

Introduction We build GV-B(General Vision Benchmark) on Classification, Detection, Segmentation and Depth Estimation including 26 datasets for model e

null 174 Dec 27, 2022
This is a Machine Learning Based Hand Detector Project, It Uses Machine Learning Models and Modules Like Mediapipe, Developed By Google!

Machine Learning Hand Detector This is a Machine Learning Based Hand Detector Project, It Uses Machine Learning Models and Modules Like Mediapipe, Dev

Popstar Idhant 3 Feb 25, 2022
Repository for the electrical and ICT benchmark model developed in the ERIGrid 2.0 project.

Benchmark Model Electrical and ICT System This repository contains the documentation, code, and models for the electrical and ICT benchmark model deve

ERIGrid 2.0 1 Nov 29, 2021
Computer Vision Script to recognize first person motion, developed as final project for the course "Machine Learning and Deep Learning"

Overview of The Code BaseColab/MLDL_FPAR.pdf: it contains the full explanation of our work Base Colab: it contains the base colab used to perform all

Simone Papicchio 4 Jul 16, 2022
Node for thenewboston digital currency network.

Project setup For project setup see INSTALL.rst Community Join the community to stay updated on the most recent developments, project roadmaps, and ra

thenewboston 27 Jul 8, 2022
Provided is code that demonstrates the training and evaluation of the work presented in the paper: "On the Detection of Digital Face Manipulation" published in CVPR 2020.

FFD Source Code Provided is code that demonstrates the training and evaluation of the work presented in the paper: "On the Detection of Digital Face M

null 88 Nov 22, 2022
Histocartography is a framework bringing together AI and Digital Pathology

Documentation | Paper Welcome to the histocartography repository! histocartography is a python-based library designed to facilitate the development of

null 155 Nov 23, 2022
Digital Twin Mobility Profiling: A Spatio-Temporal Graph Learning Approach

Digital Twin Mobility Profiling: A Spatio-Temporal Graph Learning Approach This is the implementation of traffic prediction code in DTMP based on PyTo

chenxin 1 Dec 19, 2021
MATLAB codes of the book "Digital Image Processing Fourth Edition" converted to Python

Digital Image Processing Python MATLAB codes of the book "Digital Image Processing Fourth Edition" converted to Python TO-DO: Refactor scripts, curren

Merve Noyan 24 Oct 16, 2022
A fast, dataset-agnostic, deep visual search engine for digital art history

imgs.ai imgs.ai is a fast, dataset-agnostic, deep visual search engine for digital art history based on neural network embeddings. It utilizes modern

Fabian Offert 5 Dec 14, 2022
HistoSeg : Quick attention with multi-loss function for multi-structure segmentation in digital histology images

HistoSeg : Quick attention with multi-loss function for multi-structure segmentation in digital histology images Histological Image Segmentation This

Saad Wazir 11 Dec 16, 2022
Bib-parser - Convenient script to parse .bib files with the ACM Digital Library like metadata

Bib Parser Convenient script to parse .bib files with the ACM Digital Library li

Mehtab Iqbal (Shahan) 1 Jan 26, 2022
Game Agent Framework. Helping you create AIs / Bots that learn to play any game you own!

Serpent.AI - Game Agent Framework (Python) Update: Revival (May 2020) Development work has resumed on the framework with the aim of bringing it into 2

Serpent.AI 6.4k Jan 5, 2023
Gesture-controlled Video Game. Just swing your finger and play the game without touching your PC

Gesture Controlled Video Game Detailed Blog : https://www.analyticsvidhya.com/blog/2021/06/gesture-controlled-video-game/ Introduction This project is

Devbrat Anuragi 35 Jan 6, 2023
Hand-distance-measurement-game - Hand Distance Measurement Game

Hand Distance Measurement Game This is program is made to calculate the distance

Priyansh 2 Jan 12, 2022
Dcf-game-infrastructure-public - Contains all the components necessary to run a DC finals (attack-defense CTF) game from OOO

dcf-game-infrastructure All the components necessary to run a game of the OOO DC

Order of the Overflow 46 Sep 13, 2022
Torchlight2 lan game server tool - A message forwarding tool for Torchlight 2 lan game

Torchlight 2 Lan Game Server Tool A message forwarding tool for Torchlight 2 lan

Huaijun Jiang 3 Nov 1, 2022
Pytorch implementation of Each Part Matters: Local Patterns Facilitate Cross-view Geo-localization https://arxiv.org/abs/2008.11646

[TCSVT] Each Part Matters: Local Patterns Facilitate Cross-view Geo-localization LPN [Paper] NEWs Prerequisites Python 3.6 GPU Memory >= 8G Numpy > 1.

null 46 Dec 14, 2022