https://github.com/exane/utility-ai
A small Utility Ai Framework
https://github.com/exane/utility-ai
ai artificial-intelligence framework game-development javascript js node nodejs utility utility-ai web
Last synced: about 1 year ago
JSON representation
A small Utility Ai Framework
- Host: GitHub
- URL: https://github.com/exane/utility-ai
- Owner: exane
- License: mit
- Created: 2018-02-05T13:51:32.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-05-06T11:43:21.000Z (almost 8 years ago)
- Last Synced: 2025-03-20T17:38:27.119Z (about 1 year ago)
- Topics: ai, artificial-intelligence, framework, game-development, javascript, js, node, nodejs, utility, utility-ai, web
- Language: JavaScript
- Size: 10.7 KB
- Stars: 17
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/exane/utility-ai)
[](https://badge.fury.io/js/utility-ai)
---
# Utility Ai
## A small Utility Ai Framework
### Install
```sh
npm install utility-ai
yarn add utility-ai
```
### Usage
```js
const UtilityAi = require("utility-ai")
utility_ai = new UtilityAi
// define your actions e.g "Move to Enemy", "Fire at Enemy", "Move to Cover", "Reload Gun"
utility_ai.addAction("Move to Enemy", action => {
// pre-conditions for actions, if not fulfilled all actions will be skipped
action.condition(({ player }) => {
if (player.isStuck()) {
return false
}
// explicit return of true needed to fulfill condition
return true
})
// each score expects a number as return value, the higher the better the action will be weighted
action.score("Distance to Enemy", ({ player, enemy }) => {
return player.distanceTo(enemy)
})
action.score("Gun is not loaded", ({ player }) => {
return player.gunEmpty() && -100
})
})
utility_ai.addAction("Fire at Enemy", action => {
action.score("Proximity to Enemy < 50", ({ player, enemy }) => {
return player.distanceTo(enemy) < 50 && 75
})
action.score("Cannot make it to cover", ({ player }) => {
return player.nextCoverDistance() > 25 && 50
})
action.score("Gun is not loaded", ({ player }) => {
return player.gunEmpty() && -125
})
})
utility_ai.addAction("Move to Cover", action => {
action.score("Is not in cover", ({ player }) => {
return !player.isInCover() && 50
})
action.score("Proximity to Cover < 50", ({ player }) => {
return player.nextCoverDistance() < 50 && 50
})
})
utility_ai.addAction("Reload Gun", action => {
action.score("Gun is not loaded", ({ player }) => {
return player.gunEmpty() && 75
})
action.score("Is in Cover", ({ player }) => {
return player.isInCover() && 50
})
action.score("Gun is loaded", ({ player }) => {
return !player.gunEmpty() && -125
})
})
const data = {
player: {...},
enemy: {...}
}
// starts the evaluation of a given world state and returns its best action
const result = utility_ai.evaluate(data)
// e.g. result = { action: "Move to Cover", score: 100 }
```