Skip to content

melahi/Konquest

Repository files navigation

CS-E4800 Tournament
###################

Welcome to the "CS-E4800 Tournament"!

In this tournament, we will develop an agent to play the Konquest game.


Konquest
^^^^^^^^
This game is based on the Konquest game in KDE/Ubuntu. The game starts with some
planets scattered in space and two players. Each planet can produce some ships.
Using ships, players can attack other planets to conquer them. The goal is to
build a unified interstellar empire by eliminating the other player.

In the beginning, each player owns one planet. The other planets are neutral.
A planet can be described by the following properties:
    * Name
    * Owner: its owner, or it might be neutral if it belongs to nobody
    * Position: its position in 2D space
    * Ships: number of ships currently located on the planet
    * Capacity: maximum number of ships that can be stationed on the planet
    * Production: the rate of producing ship

In each turn, players can send some ships from one of their planets to any
other planet. The source planet should be owned by the current player, and it
must contain at least the specified number of ships in the order. Depending on
the distance between the source and the destination it takes some turns for the
fleet to reach the destination. The fleet size can be 2, 4, or 8 ships. At the
time of arrival, if the destination and the fleet are owned by the same
player, then the fleet reinforces the planet.  Otherwise, it attacks the
destination. The kill rate in an attack is 70 percent. For example, if a fleet
with 2 ships attacks some planet, it can destroy 1.4 ships of the defender. If
the attacker defeats the defender, the ownership of the planet will change to
the owner.

Players have a specified amount of time to make a decision (e.g., 5 seconds).
This time limit may be varied at different stages of the game. As it would be 
difficult to adjust to any given time-bound, each player can generate a sequence
of increasing good actions in each turn, and the last action within the time
limit will be considered as the chosen action for that turn. If a player does
not choose any action within the time limit or chooses an invalid move, a random
action will be selected for the player. When all players make their decisions,
the simulation for that turn begins in the following order:
    1. fleets depart from their source planets
    2. planets produce new ships based on their production rate
    3. If there is any combat, it begins after the production.

Ultimately, the game ends when:
    1. A player loses all of its planets and ships to the winner of the game
    2. Both players can survive for 200 turns; in this case, the winner is the
       player who has the most ships in the game. If they have the same amount
       of ships, the game ends with a draw.


This game is a modified version of the Konquest game in KDE/Ubuntu. You can
play the original version from here:
    * https://apps.kde.org/konquest/


Requirements
^^^^^^^^^^^^
To run this program, we need to install `Pillow==9.4.0` and `numpy==1.24.2`.
You can install these dependencies by using the following command:
`pip3 install -r requirements.txt`

NOTE: We use `python3.9` for the tournament (more precisely, we disable the
      visualization and use `pypy` compatible with `python3.9` to improve the
      performance).


Instructions
^^^^^^^^^^^^
0. (Optional) Watch the game to learn and understand its rules.
   You can watch the game by running the following command:
   `python3 main.py`
   You can compare the performance of different agents, by choosing them as the
   players. To specify the type of players, you can modify the `players`
   variable in the `main.py`.

1. Copy `agent-template.py` to `agent.py`.

2. Read and understand the `agent.py`.

3. Take a brief look at the following agents:
3.1. the `RandomAgent` in `random_agent.py`,
3.2. the `MarkovAgent` in `markov_agent.py`,
3.3. the `MinimaxAgent` in `minimax_agent.py`,
3.4. the `IterativeDeepening` in `iterative_deepening.py`, and,
3.5. the `IDMinimaxAgent` in `id_minimax_agent.py`.

4. Complete the `info` method of the `Agent` class

5. Complete the `decide` method of the `Agent` class by developing an algorithm
   to overcome all opponents. You are free to choose any kind of game-playing 
   agent to implement. Some obvious approaches are the following:
5.1 Implement alpha-beta (and investigate its potential for searching deeper
    than what is possible with Minimax). Also, the order in which the actions
    are tried in a given node impacts the effectiveness of alpha-beta: you could
    investigate different ways of ordering the actions/successor states.
5.2 Try out better heuristics.
5.3 You could try out more advanced Monte Carlo search methods; however, we do
    not know whether MCTS is competitive because of the high cost of the full
    gameplay.
5.4 You could, of course, try something completely different if you are willing to
    invest more time.


Simulation
^^^^^^^^^^
For simulating the game, you can use the `main.py` script. Just import your agent
and `play` the game with an instance of your agent.


GL HF :)

About

The third Tournament in Aatlo AI course

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages