Skip to content

Considerations

In Utility Intelligence, a consideration represents an aspect of the game world that influences the utility of a decision. And its score indicates how appealing the decision is based on that aspect.

For instance, imagine our agent has a decision called AttackEnemy, which includes a consideration caled EnemyHealthLow. Suppose the enemy’s health is 20, then the utility score of this consideration would be 0.8, indicating high appeal to the agent. However if the agent’s health rises to 60, then the utility score decreases to 0.4, making the decision less appealing to the agent.

How Considerations work

A consideration is made up of three components:

These represent the three stages for calculating the score of a consideration. In the above example, the EnemyHealthLow consideration has the following components:

  • An input that returns the enemy’s health.
  • An input normalization that normalizes the enemy’s health into [0,1]
  • A response curve that linearly inverts the normalized enemy’s health. It returns the consideration score that indicates how appealing the decision is based on the enemy’s health input.

After that, the consideration scores will be multiplied together to determine the decision score. This means that if even one consideration has a score of 0, the decision score becomes 0 as well.

You can take advantage of this property of multiplication to enable or disable a decision based on a condition.

center|600

Infinite Number of Considerations

  • Since consideration scores are clamped within the range [0,1], multiplying them guarantees that the decision score also remains within [0, 1]. This allows us to add as many considerations as we want to a decision without breaking the score range.
    • This idea comes from Dave Mark’s Infinite Axis Utility System.
  • The downside of this method is that as more considerations are added, the decision score steadily approaches 0. To address this, we introduced a compensation factor.

Compensation Factor

The more considerations you add to a decision, the lower its score becomes. This is the drawback of using multiplication. For example, if a decision contains 9 considerations and each consideration has a score of 0.9, the decision score will be 0.99 = 0.387.

As a result, if a decision has an infinite number of considerations, then even if the consideration scores are high, the decision score will be close to 0.

To address this issue, we introduced a compensation factor, which takes the number of considerations into account to balance the result. This method originally presented in Building a Better Centaur: AI at Massive Scale (9:10).

To enable/disable the compensation factor, you need to check/uncheck the Compensation Factor option in the Intelligence Editor.

center|300

Response Curves

After an input is normalized to the range [0, 1], we need a way to translate that input into a consideration score, which indicates how appealing the decision is based on that input. This is the purpose of response curves.

In the previous example, the EnemyHealthLow consideration use the InverseLinear curve, which linearly inverts the normalized enemy’s health. The score it returns indicates how appealing the decision is based on the enemy’s health. As a result, the higher the enemy’s health, the less appealing the decision becomes.

A response curve has 5 parameters:

  • Curve Type
  • Slope
  • Exponent
  • XShift
  • YShift

You can adjust these parameters to modify the shape of the response curve to suit your needs.

Utility Intelligence provides a list of useful presets for response curves, you can use one of them to get started. All you need to do is select one and click Apply.

center|600

Creating Considerations

To create a new consideration, go to the Consideration Tab, enter a name in the
Name field, then click the Create button.

center|600

After creating the consideration, you can assign an input normalization to it and adjust either the input or the response curve to observe how the changes affect the consideration score.

Consideration Statuses

Considerations only have two statuses at both runtime and editor time:

 : Executed


 : Discarded


If you haven’t already, please consider leaving a review on the Asset Store. Whether good or bad, your feedback helps shape the future of this framework, and lets others determine whether it’s a good fit for their games. Thank you so much!💘 I love you all!🥰


Last update : October 11, 2025
Created : September 16, 2024