Genetic algorithm which evolves aoe2 DE ai scripts

Overview

AlphaScripter

Use the power of genetic algorithms to evolve AI scripts for Age of Empires II : Definitive Edition. For now this package runs in AOC Userpatch 1.5 to train. In theory, scripts generated this way should be compatible with Age of Empires II : Definitive Edition, but in practice a certain amount of porting will need to take place. This is currently a work in progress.

Dependencies

  • msgpackrpc >= 0.4.1 : A package used to communicate with running AOE processes. (To install, pip install msppack-rpc-python)
  • psutil >= 5.8.0 : A package used to manage running processes.
  • tornado == 4.3.5 : Should be automatically installed with msgpackrpc.

How to install and run

  1. Install 32-bit (!) Python (tested with version 3.9) and the dependencies listed above.
  2. Install Age of Empires II - The Conquerors and install UserPatch 1.5. The UserPatch can be found here: https://userpatch.aiscripters.net/
  3. Download the aoc-auto-game.dll and paste it in the same folder as the AOC executable. You can download this DLL file here.
  4. Open the Python file Main.py, adjust parameters and run the script. (WIP)

What does it do? - Explanation per script

The Main Script Main.py

On run, the script will generate an AI named "Alpha," load it into a game versus the training ai (Alpha must be in the second slot). The script will automatically start new games from the post game menu -- you may want to speed up the game in the first round, and/or end the first round early as it won't count for scoring.

Your game may crash. If it does, you can pause the script with control-v and reset. It will save the progress.

The best script so far will be saved as "best.per" in the .ai directory. It will be overwritten if you restart the script.

The png files are necessary for the auto-load new game function.

I will expand this later -- if you would like to help with this project, you can find me on the AI scripters discord for aoe2 de and dm me. I specifically need help from those knowledgeable about scripting or engine modification.

Run types: You can run vs, run score, or run FFA.

run vs: load alpha into p1 and beta into p2. Game will pick winner as new parent - this is a good adversarial AI but is best for late stage training once the AI is good enough to possibly defeat another player

run score: load training AI (HD, barbarian, extreme) into p1 and alpha into p2 Game will pick all-time-highest scorers as new parent.

run FFA: load alpha-h into slots 1-8, make sure no teams are selected Game will pick two best in each round and crossover their traits. Very good for fast training early on.

Game Launcher game_launcher.py

The game launcher is used to, surprise, launch games. To successfully launch a game, the class Launcher needs to be instantiated. This will take 1 optional argument: path that specifies the path to the AOC executable. If you don't pass this argument, the game will look for the executable in the default path: C:\Program Files\Microsoft Games\age of empires ii\Age2_x1\age2_x1.exe. If the executable cannot be found, the launcher will raise an Exception.

After correctly instantiating this Launcher, you can launch a game using the Launcher.launch_game function. This function takes 2 required and 3 optional arguments:

  • (Required) names : list[str] - This is a list of strings that represent the names of the AI .per files that the game will look for when starting the game. These should be in the ..\age of empires ii\ai folder.
  • (Required) game_settings - This should be an instance of the GameSettings class, which is also declared in game_launcher.py.
  • (Optional) real_time_limit : int - The number of real time seconds after which the game(s) should be automatically quit and closed. If not given, there will not be a real-time limit.
  • (Optional) game_time_limit : int - The number of in-game seconds after the game(s) should be quit and closed.
  • (Optional) instances : int - The number of games to run simultaneously. This currently a little experimental, so keep in mind that your mileage with this setting.

The GameSettings class is used to store settings for the game. To instantiate a GameSettings object, you will have to pass 1 required argument and a lot of optional arguments. See below for a description.

  • (Required) civilisations - A list of strings or int (can also be mixed) that represent the civs that the AI players will use. It must be the same length as the names given to the launcher, otherwise the launcher will raise an Exception. If an element in the given list is not a valid civ, that element will be replaced by 'huns'.
  • (Optional) map_id - A string or int that represents the map. Default 'arabia'
  • (Optional) map_size - A string or int that represent the map size. Default 'medium'
  • (Optional) difficulty - A string or int that represents the difficulty of the game. Default 'hard'
  • (Optional) game_type - Specifies the game type. Default 'random_map'
  • (Optional) resources - Specifies the starting resources of each player. Default 'low'
  • (Optional) reveal_map - Whether the map should be revealed. Default 'normal'
  • (Optional) starting_age - Which age the players should start in. Default 'dark'
  • (Optional) victory_type - The victory type. Doesn't work (yet). Default 'conquest'
Algorithms-in-Python - Programs related to DSA in Python for placement practice

Algorithms-in-Python Programs related to DSA in Python for placement practice CO

MAINAK CHAUDHURI 2 Feb 02, 2022
A lightweight, object-oriented finite state machine implementation in Python with many extensions

transitions A lightweight, object-oriented state machine implementation in Python with many extensions. Compatible with Python 2.7+ and 3.0+. Installa

4.7k Jan 01, 2023
A simple library for implementing common design patterns.

PyPattyrn from pypattyrn.creational.singleton import Singleton class DummyClass(object, metaclass=Singleton): # DummyClass is now a Singleton!

1.7k Jan 01, 2023
Python algorithm to determine the optimal elevation threshold of a GNSS receiver, by using a statistical test known as the Brown-Forsynthe test.

Levene and Brown-Forsynthe: Test for variances Application to Global Navigation Satellite Systems (GNSS) Python algorithm to determine the optimal ele

Nicolas Gachancipa 2 Aug 09, 2022
This is a Python implementation of the HMRF algorithm on networks with categorial variables.

Salad Salad is an Open Source Python library to segment tissues into different biologically relevant regions based on Hidden Markov Random Fields. The

1 Nov 16, 2021
Distributed Grid Descent: an algorithm for hyperparameter tuning guided by Bayesian inference, designed to run on multiple processes and potentially many machines with no central point of control

Distributed Grid Descent: an algorithm for hyperparameter tuning guided by Bayesian inference, designed to run on multiple processes and potentially many machines with no central point of control.

Martin 1 Jan 01, 2022
implementation of the KNN algorithm on crab biometrics dataset for CS16

crab-knn implementation of the KNN algorithm in Python applied to biometrics data of purple rock crabs (leptograpsus variegatus) to classify the sex o

Andrew W. Chen 1 Nov 18, 2021
Policy Gradient Algorithms (One Step Actor Critic & PPO) from scratch using Numpy

Policy Gradient Algorithms From Scratch (NumPy) This repository showcases two policy gradient algorithms (One Step Actor Critic and Proximal Policy Op

1 Jan 17, 2022
This application solves sudoku puzzles using a backtracking recursive algorithm

This application solves sudoku puzzles using a backtracking recursive algorithm. The user interface is coded with Pygame to allow users to easily input puzzles.

Glenda T 0 May 17, 2022
A minimal implementation of the IQRM interference flagging algorithm for radio pulsar and transient searches

A minimal implementation of the IQRM interference flagging algorithm for radio pulsar and transient searches. This module only provides the algorithm that infers a channel mask from some spectral sta

Vincent Morello 6 Nov 29, 2022
PickMush - A mini study/project on boosting algorithm

PickMush A mini project implementing Boosting Author Shashwat Vaibhav What does it do? Classifies whether Mushroom is edible or is non-edible (binary

Shashwat Vaibahav 3 Nov 08, 2022
There are some basic arithmatic in Pattern Recognization and Machine Learning writed in Python in this repository

There are some basic arithmatic in Pattern Recognization and Machine Learning writed in Python in this repository

1 Nov 19, 2021
Programming Foundations Algorithms With Python

Programming-Foundations-Algorithms Algorithms purpose to solve a specific proplem with a sequential sets of steps for instance : if you need to add di

omar nafea 1 Nov 01, 2021
causal-learn: Causal Discovery for Python

causal-learn: Causal Discovery for Python Causal-learn is a python package for causal discovery that implements both classical and state-of-the-art ca

589 Dec 29, 2022
Sorting-Algorithms - All information about sorting algorithm you need and you can visualize the code tracer

Sorting-Algorithms - All information about sorting algorithm you need and you can visualize the code tracer

Ahmed Hossam 15 Oct 16, 2022
Exact algorithm for computing two-sided statistical tolerance intervals under a normal distribution assumption using Python.

norm-tol-int Exact algorithm for computing two-sided statistical tolerance intervals under a normal distribution assumption using Python. Methods The

Jed Ludlow 1 Jan 06, 2022
Provide player's names and mmr and generate mathematically balanced teams

Lollo's matchmaking algorithm Provide player's names and mmr and generate mathematically balanced teams How to use Fill the input.json file with your

4 Aug 04, 2022
8 Puzzle with A* , Greedy & BFS Search in Python

8_Puzzle 8 Puzzle with A* , Greedy & BFS Search in Python Python Install Python from here. Pip Install pip from here. How to run? 🚀 Install 8_Puzzle

I3L4CK H4CK3l2 1 Jan 30, 2022
Algoritmos de busca:

Algoritmos-de-Buscas Algoritmos de busca: Abaixo está a interface da aplicação: Ao selecionar o tipo de busca e o caminho, então será realizado o cálc

Elielson Barbosa 5 Oct 04, 2021
Pathfinding visualizer in pygame: A*

Pathfinding Visualizer A* What is this A* algorithm ? Simply put, it is an algorithm that aims to find the shortest possible path between two location

0 Feb 26, 2022