So this site is an application of my PhD work on solving complex acquisition problems to the League of Legends Rune/Item systems. It works by combining genetic algorithms with goal modelling.

Simple explanation:

Watch this video by CGP Grey on Genetic Algorithms:

And take a look at this acquisition graph:

Goal Model showing Hextech Protobelt-01 satisfying various stats including AP, HP and skills

The bots wire up the acquisition graph (rather than a neural network) and teacher bot looks at the wired up acquisition graphs and rates the build by the stats they produce (over time rather than just the end stats).

We are using learning in an environment rather presenting training examples to bots. Therefore we use the factory method rather than linear algebra. You can see learning in an environment in the video below. Our bots are build orders and the environment is the League of Legend's math formulas.

Currently modelling:

  • Champion Actives
  • Champion Passives
  • Item Actives
  • Item Passives
  • All basic stats
  • Stats now are better than stats later
  • The fully optimal build order for all items and their component items
  • Effects that alter the effects of other stats
  • Different collections of stats that are wanted in the different roles and positions

Example model of Hextech Protobelt-01:

    "acquirable": 1,
    "costs": [
        {"amount": 650, "name": "Gold"},
        {"amount": -1, "name": "Slot"},
        {"amount": -1, "name": "Waveclear"}
    "depends": [
        {"name": "Hextech Revolver"},
        {"name": "Kindlegem"}
    "name": "Hextech Protobelt-01",
    "provides": [
        {"name": "HP Base", "providedValue": 300.0},
        {"name": "Ability Power Base", "providedValue": 60.0},
        {"name": "Cooldown Reduction Percentage", "providedValue": 10.0},
            "name": "Active Skills",
            "scriptValues": {
                "activeAbility": true,
                "apBase": [82.5, 103, 124, 151, 165],
                "apRatio": 0.275,
                "cooldown": 40000,
                "name": "Hextech Protobelt-01 Ability 1"
        {"name": "Gap Close", "providedValue": 2},
        {"name": "Sudden Impact Trigger", "providedValue": 1.0}

Each different build contains a set of stats that are wanted with various ratios, which you can vary with the controls. Damage is measured as an average over 1.5 seconds, except for sustain builds that measure over 4 seconds and ADC builds that increase from 1.5 to 4.0 seconds as the game progresses.

Generating builds currently takes 10 minutes (per champion per build) on a 32 core AMD Ryzen Threadripper 2990WX and involves searching over 400,000 possible plans. The number of plans searched is effectively increased further by mixing populations from different champions together raising the effective number of searched builds into the tens of millions.

The thesis is on adapting genetic algorithms to allow them to be used for acquisition problems. A large general class of acquisition problems that LoL build orders happens to fall into (There is nothing LoL related in the thesis.)

Thesis download