Utility Curve

What is a Utility Curve?


In Total AI Utility Curves are used to transform a value with a known range into a new value between 0-1. This is simlar to normalization, taking a value subtracting by its min and dividing by its range (max - min) to get a 0-1 value, except there is an extra step of transforming the normalized value by the Utility Curve. Utility Curves allows these 0-1 values to be much more expressive. An extreme example is the curve could be 0 from [0-0.5] and 1 from (0.5-1] thus causing it to become a boolean operator. Although it is more common is to see S curves and various exponential curves.

Utility Curves are currently used in TAI to determine an Agent's Drive Type priority, used in Target Factors to determine the best Entity Target for a Mapping, and can be used by Selector Types determine values for Output Changes or Behaviors.

For a more in depth talk on Utility Curves and Utility AI in general see an excellent GDC Talk by Kevin Dill and Dave Mark:

Improving AI Decision Modeling Through Utility Theory

Also check out more info in External Links.

MinMaxCurve


A MinMaxCurve is a ScriptableObject that holds a min, a max, and an AnimationCurve. The min and max value represents the range for the Output. The input value will be normalized by the MinMaxClass and then inputed into the Curve as the x value. The y value of the curve will then be denormalized based on the min and max.

The MinMaxCurve ScriptableObject asset is used throughout TAI. Although it can be slightly annoying in locations when you just need a constant value overall it helps to reduce memory and provides a central location for logic around evaluating curves.