Skip to content

Considerations

Mike Lewis edited this page Mar 30, 2017 · 1 revision

Using Utility Considerations to Control Behavior

Considerations are the workhorse of the Curvature AI model. In a nutshell, a consideration is a rule for controlling the utility of a given behavior - that is, how "appealing" the behavior is at a given moment. This utility score is always normalized, i.e. it is on the range [0, 1]. A consideration with a score of zero means that, for some reason, the behavior is invalid at the current moment. If a consideration scores one, it indicates that with respect to that consideration the behavior is optimal.

Since behaviors typically have many considerations, it is possible to build complex rule sets describing the utility of a behavior. To compute the score of an overall behavior, Curvature multiplies the scores of each associated consideration. This has an important property: if any one consideration scores zero, the entire behavior is considered to have zero utility, i.e. it is invalid in the current situation. If all considerations yield scores of one, the behavior is considered optimal, because the product of the consideration scores will also be one.

The Structure of Considerations

A single consideration is made up of a few parts:

  • A symbolic name
  • An input
  • A response curve
  • Optionally some parameters

The name allows considerations to be given a mnemonic title to help keep track of what the rule signifies. These are freeform text and can be virtually anything, but careful naming of considerations can make life a lot easier!

In order for a consideration to connect to the world state and examine the situation, each one requires an input. Inputs are built from the Knowledge Base and define ways of plumbing data about the world into a consideration. One great example is distance to the target. This input provides a number that can be fed to the consideration to make a decision. Let's look at how to make a target more appealing the closer it is to the agent.

To do this, we need to first define some parameters which control the input's raw numbers. In other words, we need to know what value of raw distance will correspond to an input value of 1.0. A range is a good way to express this. Suppose the range we care about is [0, 100] meters. A distance of 0.0 will yield an input value of 0.0, and a distance of 100.0 will yield an input value of 1.0. Similarly, a distance of 50.0 will translate to an input of 0.5, and a distance of 200.0 will be capped to an input of 1.0 (because input values, like consideration scores, are always normalized).

Now that we have an input value, we map the input to the consideration score using a response curve. These curves allow for complex relationships to be set up between input values and final consideration scores. To make a target more appealing as it gets closer, we need to think about how the input value will change and how that relates to the desired output score.

Ideally, a 0.0 distance should yield an optimal score (1.0). By the same token, a 1.0 distance (i.e. 100 meters or greater) should yield an invalidation score (0.0). The simplest way to do this is to set up a response curve that starts at (0.0, 1.0) and trends downwards towards (1.0, 0.0). A number of shapes are available that can do this, but "basic quadric" and "inverse linear" are the best candidates. (These shapes can be found in the Preset window of Curvature.)