AIMContext builds the foundation of the AI system by providing access to all important modules (front-end component).
Every GameObject having this component becomes a moving agent controlled by the Polarith AI. This component enables you to control the general AI configuration right from the inspector, for example, how much objectives the agent should have, if the objectives should be normalized or minimized and many other settings. In addition, it holds and visualizes all environmental data sampled through active AIMBehaviour components. With the help of this data, the AIMContext executes all the algorithms necessary to evaluate the world of its agent and to find the best decision/solution for the current movement situation. The made decision can directly be obtained via properties like DecidedDirection and DecidedValues and so forth.
By default, an AIMContext component processes everything within Unity's update method, or, if a certain UpdateFrequency greater than 0 is specified, it uses its own coroutine for updating. When you set Threaded to true
and there is an AIMPerformance component (Pro only) within the scene, the evaluation of all AIMContext components which are Threaded and ThreadSafe are distributed equally over the configured sub-threads where they get evaluated in parallel. An AIMContext is considered ThreadSafe if all of its associated Behaviours are also thread-safe. Through multithreading, the overall system might run about two to three times faster than without multithreading. Of course, this mainly depends on the number of agents, active behaviours and the number of perceived objects per agent. Multithreading performs best on large-scale scenes which have got hundreds of agents.
Furthermore, this component provides you with a lot of methods to quickly access and modify the underlying data, e.g. AddObjective(bool, bool, float, bool), GetObjective(int) and so forth. Note, you can achieve the same through modifying the data directly using the context object hierarchy, e.g. Problem<T>.AddObjective(bool) or, Problem<T>.GetObjective(int) within Context.
Front-end component of the underlying Move.Context class. Only one single component can be attached to one GameObject at a time.
Public Fields | |
readonly IList< IEvaluationPreparer > | EvaluationPreparers = new List<IEvaluationPreparer>() |
Contains references of instances which need to prepare certain things before Context.Evaluate must be called. More... | |
readonly IList< AIMBehaviour > | Behaviours = new List<AIMBehaviour>() |
All associated AIMBehaviour components which are attached on the GameObject of this agent (read only). More... | |
float | UpdateFrequency = 20.0f |
Specifies how often the AI system should update this agent per second. More... | |
bool | Threaded |
Specifies if this movement AI context should be evaluated in parallel to other existing agents. More... | |
bool | SensorShared = true |
If set to false , this agent clones the associated Sensor on start so that it can safely be manipulated at runtime without disturbing other agents having the same sensor specified in its inspector. More... | |
AIMSensor | Sensor |
The currently used sensor asset which determines how this agent observes the world. More... | |
bool | BehaviourSortRequired = true |
If true , this component re-sorts all known Behaviours to match the specified CriteriaBehaviour.Order during the next PrepareEvaluation call. More... | |
bool | ThreadSafetyCheckRequired = true |
Indicates whether this instance needs to re-check all of the associated Behaviours for thread-safety to figure out if is ThreadSafe itself. More... | |
Properties | |
static ReadOnlyCollection< AIMContext > | ThreadedComponents [get] |
Contains all AIMContext instances corresponding to the ThreadedContexts which are suitable for multithreading (read only). More... | |
static ReadOnlyCollection< AIMContext > | NonThreadedComponents [get] |
Contains all AIMContext instances that are not suitable for multithreading (read only). More... | |
static ReadOnlyCollection< Context > | ThreadedContexts [get] |
Contains all Move.Context instances corresponding to the ThreadedComponents which are suitable for multithreading (read only). More... | |
Context | Context [get] |
The underlying back-end class representing the movement AI context (read only). More... | |
int | ObjectiveCount [get] |
The number of objectives (read only). More... | |
int | ValueCount [get] |
The number of values per objective (read only). More... | |
IList< float > | DecidedValues [get] |
The objective values of the current decision made by the movement AI system (read only). More... | |
Vector3 | DecidedDirection [get] |
The result direction of the current decision made by the movement AI system (world coordinates, read only). More... | |
Vector3 | LocalDecidedDirection [get] |
The DecidedDirection in local coordinates (read only). More... | |
float | DecidedMagnitude [get] |
The magnitude of the winning sensor receptor corresponding to the decision made by the movement AI system. More... | |
Vector3 | DecidedReceptorPosition [get] |
The position of the winning sensor receptor corresponding to the decision made by the movement AI system (world coordinates, read only). More... | |
Vector3 | LocalDecidedReceptorPosition [get] |
The DecidedReceptorPosition in local coordinates (read only). More... | |
float | DecidedReceptorSensitivity [get] |
The sensitivity of the winning sensor receptor corresponding to the decision made by the movement AI system. More... | |
bool | ThreadSafe [get] |
Indicates whether this AIMContext instance is suitable for multithreading (read only). More... | |
GameObject | SelfObject [get, set] |
Can be used to receive the self percept data of this agent. More... | |
List< string > | ObjectiveLabels [get] |
Returns a list containing labels which can be used to identify objectives instead of using indices. More... | |
Public Methods | |
void | BuildContext () |
Prepares the underlying Move.Context instance to be used, and if requested, clones the associated Sensor asset. More... | |
void | Evaluate () |
In most cases, this method must not be manually called at all because the system does that automatically. More... | |
void | PrepareEvaluation () |
Updates everything which is necessary before Context.Evaluate can be called. More... | |
void | ObtainEvaluatedResults () |
This method needs to be called in order to get the evaluated results from the AI back-end into this front-end component so that the corresponding properties like DecidedDirection and DecidedValues are updated to the latest results. More... | |
ReadOnlyCollection< float > | AddObjective (bool minimized, bool normalized, float constraint=0.0f, bool unlimited=false) |
Adds an objective (one row to the problem matrix). More... | |
void | AddValues (float value) |
Adds a value to every objective (one column to the problem matrix). More... | |
void | AddValues (float[] values) |
Adds a value to every objective (one column to the problem matrix). More... | |
ReadOnlyCollection< float > | GetObjective (int index) |
Gets the objective (problem matrix row) belonging to the specified index . More... | |
float | GetValue (int objectiveIndex, int valueIndex) |
Gets an objective value (single element of the problem matrix). More... | |
float | GetEpsilonConstraint (int index) |
If the given objective index is valid, the corresponding epsilon-constraint is returned. More... | |
bool | IsObjectiveMinimized (int index) |
Determines if an objective is considered to be minimized or maximized. More... | |
bool | IsObjectiveNormalized (int index) |
Determines whether the objective with the specified index is normalized when calling Context.Evaluate. More... | |
bool | IsObjectiveUnlimited (int index) |
Determines whether the objective with the specified index is unlimited. More... | |
void | SetValue (int objectiveIndex, int valueIndex, float value) |
Sets a value (single element of the problem matrix). More... | |
void | SetEpsilonConstraint (int index, float value) |
If the given objective index is valid, the corresponding epsilon-constraint is set to the specified value . More... | |
void | SetObjectiveMinimized (int index, bool minimized) |
Specifies if an objective is considered to be minimized or maximized. More... | |
void | SetObjectiveNormalized (int index, bool normalized) |
Allows to set whether the objective with the specified index is normalized when calling Context.Evaluate. More... | |
void | SetObjectiveUnlimited (int index) |
Determines if the objective with the specified index is unlimited. More... | |
void | ResetValues () |
Resets all objective values to the default value 0. More... | |
void | RemoveObjectiveAt (int index) |
Removes the objective (problem matrix row) at the specified index . More... | |
void | RemoveValuesAt (int index) |
Removes the objective values (problem matrix column) at the specified index . More... | |
void | ResizeObjectives (int valueCount) |
Changes the number of values (column length) for each objective to the specified valueCount . More... | |
void | ClearAgent () |
Removes every behaviour, steering filter or steering tag from the agent and resets the AIMContext component to its default values. More... | |
void | ClearObjectives () |
Removes all objectives including all values. More... | |
void | ClearValues () |
Removes all values but preserves the number of objectives. More... | |
void | UpdateIndicator () |
A signal for the indicator gizmo that the current results from evaluating the context were properly obtained. More... | |
void | Reset () |
Reset to default values. More... | |
void | UpdateThreadSafety () |
Forces a recheck against thread-safety for all attached behaviours. More... | |