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'
An implementation of ordered dithering algorithm in python as multimedia course project

One way of minimizing the size of an image is to simply reduce the number of bits you use to represent each pixel.

7 Dec 02, 2022
Algorithm for Cutting Stock Problem using Google OR-Tools. Link to the tool:

Cutting Stock Problem Cutting Stock Problem (CSP) deals with planning the cutting of items (rods / sheets) from given stock items (which are usually o

Emad Ehsan 87 Dec 31, 2022
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 demo for AAD algorithm.

Asynchronous-Anisotropic-Diffusion-Algorithm This is a demo for AAD algorithm. The subroutine of the anisotropic diffusion algorithm is modified from

3 Mar 21, 2022
Silver Trading Algorithm

Silver Trading Algorithm This project was done in the context of the Applied Algorithm Trading Course (FINM 35910) at the University of Chicago. Motiv

Laurent Lanteigne 1 Jan 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
A simple python implementation of A* and bfs algorithm solving Eight-Puzzle

A simple python implementation of A* and bfs algorithm solving Eight-Puzzle

2 May 22, 2022
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
Genetic algorithm which evolves aoe2 DE ai scripts

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 Us

6 Nov 04, 2022
This repository explores an implementation of Grover's Algorithm for knights on a chessboard.

Grover Knights Welcome to my Knights project! Project Description: I explore an implementation of a quantum oracle for knights on a chessboard.

Will Sun 8 Feb 22, 2022
Python based framework providing a simple and intuitive framework for algorithmic trading

Harvest is a Python based framework providing a simple and intuitive framework for algorithmic trading. Visit Harvest's website for details, tutorials

100 Jan 03, 2023
zoofs is a Python library for performing feature selection using an variety of nature inspired wrapper algorithms. The algorithms range from swarm-intelligence to physics based to Evolutionary. It's easy to use ,flexible and powerful tool to reduce your feature size.

zoofs is a Python library for performing feature selection using a variety of nature-inspired wrapper algorithms. The algorithms range from swarm-intelligence to physics-based to Evolutionary. It's e

Jaswinder Singh 168 Dec 30, 2022
Our implementation of Gillespie's Stochastic Simulation Algorithm (SSA)

SSA Our implementation of Gillespie's Stochastic Simulation Algorithm (SSA) Requirements python =3.7 numpy pandas matplotlib pyyaml Command line usag

Anoop Lab 1 Jan 27, 2022
Algorithmic virtual trading using the neostox platform

Documentation Neostox doesnt have an API Support, so this is a little selenium code to automate strategies How to use Clone this repository and then m

Abhishek Mittal 3 Jul 20, 2022
Path tracing obj - (taichi course final project) a path tracing renderer that can import and render obj files

Path tracing obj - (taichi course final project) a path tracing renderer that can import and render obj files

5 Sep 10, 2022
Python Sorted Container Types: Sorted List, Sorted Dict, and Sorted Set

Python Sorted Containers Sorted Containers is an Apache2 licensed sorted collections library, written in pure-Python, and fast as C-extensions. Python

Grant Jenks 2.8k Jan 04, 2023
Implemented page rank program

Page Rank Implemented page rank program based on fact that a website is more important if it is linked to by other important websites using recursive

Vaibhaw 6 Aug 24, 2022
Infomap is a network clustering algorithm based on the Map equation.

Infomap Infomap is a network clustering algorithm based on the Map equation. For detailed documentation, see mapequation.org/infomap. For a list of re

347 Dec 23, 2022
A Python Package for Portfolio Optimization using the Critical Line Algorithm

A Python Package for Portfolio Optimization using the Critical Line Algorithm

19 Oct 11, 2022
marching rectangles algorithm in python with clean code.

Marching Rectangles marching rectangles algorithm in python with clean code. Tools Python 3 EasyDraw Creators Mohammad Dori Run the Code Installation

Mohammad Dori 3 Jul 15, 2022