Microsoft Visual Studio
Microsoft Visual Studio
Microsoft Visual Studio Code
Microsoft Visual Studio Code
Unreal Engine
Unreal Engine
Unity Engine
3ds Max
Adobe Photoshop
Adobe Photoshop cc

Status: Currently looking for an internship

Utility AI

C++ AI FrameworkWork In Progress

The goal of this project was to write an AI (DLL) that could survive as long as possible in a world with houses, loot and enemies.
The world is random generated by a framework provided for us and we write a plugin (DLL) for it. We have certain methods we can call to from inside the dll but we know nothing of the world.
The houses are random placed, enemies getting stronger over time. You also lose energy over time and when your energy is 0 you lose health. When your health reaches 0, you die. Inside houses there are pickups going from pistol, medkit, food(energy) to garbage. The AI must also manage the inventory besides exploring and surviving.

For this AI I decided to write my own implementation of Utility AI. We have list of actions(Buckets) which are evaluated at the same time by conditions. These conditions generate a utilityscore based on mathematical curves(linear, quadratic, logaritmic, custom,..)and input parameters. The curves always return a normalized value between [0-1] to know how important an action is without having to guess is it 15% or 15/20. The highest scoring action will execute his action behaviour.
With this score I can also switch on/off bucktes. Every action also has a weight to enable priority over the actions.

By using these curves, weights and buckets I can easily switch my AI behaviour without having to rewrite half of my tree if I was using behaviour tree's. I can also make a more complex and tactical AI that isn't very predictable over time. Also the AI is easily managed and scaled.

AI Gameplay

AI Framework

UtilityAI Framework
Framework Graph
UtilityAI Implementation
AI Implementation Graph (Heavily simplified - Buckets on top with actions)

AI Code

UtilityAI Conditions
UtilityAI Actions
UtilityAI Buckets
UtilityAI UpdateLoop
Update Loop