-
Notifications
You must be signed in to change notification settings - Fork 0
melahi/Konquest
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published