Considerations
In Utility Intelligence, a consideration (also called axis) 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 EnemyHealthIsLow. 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.
Infinite Number of Considerations (Axes)
- You can add an infinite number of considerations (axes) to a decision. That’s why Dave Mark called it: Infinite Axis Utility System.
- For more information about Infinite Axis Utility System, you can watch his presentations here.
- However, the more considerations you add, the closer decision score approaches 0. To address this, we introduced Compensation Factor.
Understanding how considerations work¶
A consideration is made up of three components:
- An Inputs
- An Input Normalizations
- A Response Curve
These represent three phases to calculate the score of a consideration. In the previous example, the EnemyHealthIsLow consideration has the following components:
- An Inputs that returns the enemy’s health.
- An Input Normalizations 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 aspect.
Then these consideration scores will be multiplied together to get the final score of the decision. Therefore, if the score of any consideration is 0
, then the score of the decision will also be 0
.
Compensation Factor¶
The more considerations a decision has, the lower the score it will be due to the multiplication. For example, if a decision has 9 considerations and the score of each consideration is 0.9
, then the final score of it will be 0.99 = 0.387.
Therefore, theoretically, if a decision has an infinite number of considerations, even if the consideration scores are high, the final score of the decision will be close to 0
.
To address this issue, we added the Compensation Factor calculation, which takes into account the number of considerations to balance it. This calculation originally presented in Building a Better Centaur: AI at Massive Scale (9:10).
Here’s how the compensation factor calculation is implemented in code:
public static float CompensateScore(float considerationScore, float considerationCount)
{
float modificationFactor = 1.0f - 1.0f / considerationCount;
float makeUpValue = (1.0f - considerationScore) * modificationFactor;
return considerationScore + makeUpValue * considerationScore;
}
To enable/disable Compensation Factor, you need to check/uncheck the Compensation Factor option in the Intelligence Editor.
Creating Considerations¶
To create a new consideration, you need to go to the Consideration Tab, fill in the
Name field, and then click the Create button:
After creating a consideration, you can select an Input Normalizations for it, and adjust the Response Curve and observe how these changes affect the consideration score.
Consideration Statuses¶
Considerations only have two statuses at both runtime and editor time:
: Executed
: Discarded
Response Curves¶
After an input is normalized into [0, 1]
by an input normalization, we need a way to map the normalized input to a consideration score that indicates how appealing the decision is based on the consideration aspect. This is the role of response curves.
In the previous example, the consideraton EnemyHealthIsLow has a response curve that linearly inverts the normalized enemy’s health. This curve returns the consideration score that indicates how appealing the decision is based on the enemy’s health aspect. Therefore, the higher the enemy’s health, the lower the appeal of the decision.
A response curve has 5 parameters:
- Curve Type
- Slope
- Exponent
- XShift
- YShift
You can change these parameters to adjust the shape of the response curve based on your needs.
Utility Intelligence also provides a list of useful presets for response curves. If you want to use our presets, you just need to select one and click the Apply button.
Tip
You can adjust the input values and response curves in the Consideration Tab to observe how they affect the consideration scores.
If you like Utility Intelligence, please consider supporting it by leaving a 5-star review on the Asset Store.
Your positive feedback motivates me to keep improving and delivering more updates for this framework.
Thank you so much for your support. I love you all! 🥰

Created : September 16, 2024