Crystal AI  1.0.0
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 123456]
 CCrystal.ActionBaseBase class for non-generic T:Crystal.IActions. All actions should derive either from this class or its generic version T:Crystal.ActionBase`1.
 CCrystal.ActionSequenceAn AI action that is comprised of one or more other actions, which are executed in order.
 CCrystal.AiTransitionAiTransition is an T:Crystal.IAction that when executed triggers a selection of an action in another AI.
 CCrystal.BehaviourTransitionBehaviourTransition is an T:Crystal.IAction which when executed triggers the selection of an T:Crystal.IAction using a linked T:Crystal.IBehaviour.
 CCrystal.AiConstructorA convenience class used to streamline the process of creating a utility AI.
 CCrystal.CircularBuffer< float >
 CCrystal.CommandStreamThe CommandStream processes a given fraction of the AI events on every loop.
 CCrystal.ConsiderationBaseBase class for considerations.
 CCrystal.DeferredCommandDeferredCommand is a command whose execution is delegated to a future time and/or executes repeatedly.
 CException
 CCrystal.MinEqualMaxExceptionMinimum equal max exception.
 CCrystal.MinGreaterThanMaxExceptionMinimum greater than max exception.
 CCrystal.IActionCollectionA collection of T:Crystal.IActions.
 CCrystal.ActionCollectionAI Actions collection.
 CCrystal.IAiCollectionInterface for AiCollections. AiCollections contain the building blocks for spawning concrete AI instances. An AiCollection also contains all sub-collections used in its composition.
 CCrystal.AiCollectionAn AiCollection is a container of all AI building blocks necessary for the construction of utility AI instances.
 CCrystal.IAiPrototype< T >Interface to all AiPrototypes.
 CCrystal.IAiPrototype< IAction >
 CCrystal.IActionAI Actions Interface. This is the "bottom-line" in that all decision making eventually leads to the execution of a class that implements this interface.
 CCrystal.ActionBase< TContext >Base class for generic T:Crystal.IActions. All actions should derive either from this class or its non-generic version T:Crystal.ActionBase.
 CCrystal.ActionBase< TContext >Base class for generic T:Crystal.IActions. All actions should derive either from this class or its non-generic version T:Crystal.ActionBase.
 CCrystal.ITransitionInterface to Transitions. A transition is an T:Crystal.IAction that transfers control to a behaviour or another AI.
 CCrystal.AiTransitionAiTransition is an T:Crystal.IAction that when executed triggers a selection of an action in another AI.
 CCrystal.BehaviourTransitionBehaviourTransition is an T:Crystal.IAction which when executed triggers the selection of an T:Crystal.IAction using a linked T:Crystal.IBehaviour.
 CCrystal.IAiPrototype< IConsideration >
 CCrystal.IConsiderationInterface to a consideration.
 CCrystal.ConsiderationBase< TContext >Base class for considerations.
 CCrystal.ConsiderationBase< TContext >Base class for considerations.
 CCrystal.ICompositeConsiderationInterface for considerations that themselves calculate a Utility based on the Utility of T:Crystal.IConsiderations. T:Crystal.IOption and T:Crystal.IBehaviour derive from this interface.
 CCrystal.CompositeConsiderationAn aggregate of considerations. Although it is possible to create fully functioning AIs using only T:Crystal.IConsiderations, this class allows for such considerations to be combined. This is quite useful as it can reduce the complexity of individual considerations allowing them to be seen as building blocks.
 CCrystal.BehaviourAn AI behaviour is a set of T:Crystal.IOptions. The behaviour itself is a composite consideration and therefore, unless this is the only behaviour in a T:Crystal.IUtilityAi, it will be selected only if its considerations "win" against competing behaviours in the AI.
 CCrystal.OptionNormally this option class should serve all the "option" related needs of an AI.
 CCrystal.ConstantUtilityOptionThis option always returns the same utility irrespective of the context.

See also
T:Crystal.Option
 CCrystal.IBehaviourInterface to Behaviours.
 CCrystal.BehaviourAn AI behaviour is a set of T:Crystal.IOptions. The behaviour itself is a composite consideration and therefore, unless this is the only behaviour in a T:Crystal.IUtilityAi, it will be selected only if its considerations "win" against competing behaviours in the AI.
 CCrystal.IOptionDecision related options interface.
 CCrystal.OptionNormally this option class should serve all the "option" related needs of an AI.
 CCrystal.IAiPrototype< IMeasure >
 CCrystal.IMeasureThe measure interface. Note this refers to the mathematical measure https://en.wikipedia.org/wiki/Measure_(mathematics)
 CCrystal.ChebyshevCalculates the Chebyshev measure https://en.wikipedia.org/wiki/Chebyshev_distance.
 CCrystal.ConstrainedChebyshevCalculates the Chebyshev measure https://en.wikipedia.org/wiki/Chebyshev_distance for all elements whose P:Crystal.Utility.Combined is above the set lower bound.
 CCrystal.ConstrainedWeightedMetricsCalculates a constrained version of the l-p weighted metrics https://en.wikipedia.org/wiki/Lp_space.
 CCrystal.MultiplicativePseudoMeasureCalculates a multiplicative pseudo-measure, namely, this class calculates the product of P:Crystal.Utility.Combined in T:System.Collections.ICollection
 CCrystal.WeightedMetricsCalculates the l-p weighted metrics https://en.wikipedia.org/wiki/Lp_space.
 CCrystal.IAiPrototype< ISelector >
 CCrystal.ISelectorInterface for Selectors. Selectors are functions that accept a vector of T:Crystal.Utilitys and return an index that corresponds to the selected T:Crystal.Utility.
 CCrystal.MaxUtilitySelectorThis selector returns the index of the T:Crystal.Utility whose P:Crystal.Utility.Combined value is highest compared to any T:Crystal.Utility in the supplied T:System.Collections.Generic.ICollection.
 CCrystal.RandomSelectorThis selector returns a random T:Crystal.Utility from the supplied T:System.Collections.ICollection.
 CCrystal.SequentialSelectorThis selector returns all indices in sequence from the given T:System.Collections.ICollection of T:Crystal.Utility. The assumption here is that every time the collection size is the same. If that is not the case, then the count is reset and starts from 0.
 CCrystal.WeightedRandomSelectorThis selector uses roulette wheel selection of the top P:Crystal.WeightedRandomSelector.Proportion percent utilities in the given T:System.Collections.ICollection of utilities.
 CCrystal.IAiPrototype< IUtilityAi >
 CCrystal.IUtilityAiInterface for all utility based AIs.
 CCrystal.UtilityAiThe Utility AI.
 CCrystal.IBehaviourCollectionInterface for BehaviourCollections. A behaviour collection contains behaviours and all sub-collections required for these behaviours. Namely, options, considerations and actions.
 CCrystal.BehaviourCollectionA collection of T:Crystal.IBehaviours.
 CCrystal.ICircularBuffer< T >Circular buffer interface.
 CCrystal.CircularBuffer< T >A circular buffer https://en.wikipedia.org/wiki/Circular_buffer.
 CIComparable
 CCrystal.EvaluatorBaseEvaluatorBase serves as a base class for all evaluators, i.e. functions with arbitrary domain of definition and a range equal to any sub-interval of [0,1].
 CCrystal.CompositeEvaluatorThe CompositeEvaluator class allows the composition, or combination, of one or more T:Crystal.IEvaluators whose domain of definition does not overlap! Note that addition of an T:Crystal.IEvaluator that has a domain of definition that is covered (even in part) by another T:Crystal.IEvaluator already added to the CompositeEvaluator, will not be added and will have no effect in the evaluation process.
 CCrystal.LinearEvaluatorThe LinearEvaluator returns a normalized utility value based on a linear function. Powerfor an interactive plot.
 CCrystal.PowerEvaluatorThe PowerEvaluator returns a normalized utility based on a power function that has effectively 1 parameter ( 0 leq p le 10000 ) bounded by the box defined by PtA and PtB with PtA.x being strictly less than PtB.x! Powerfor an interactive plot.
 CCrystal.SigmoidEvaluatorThe SigmoidEvaluator returns a normalized utility based on a sigmoid function that has effectively 1 parameter ( -0.99999f leq k leq 0.99999f ) bounded by the box defined by PtA and PtB with PtA.x being strictly less than PtB.x! Parametrized Sigmoidfor an interactive plot.
 CCrystal.UtilityThis struct is used throughout Crystal AI to communicate the utility (or usefulness) of a particular option, consideration or behaviour.
 CCrystal.IConsiderationCollectionInterface for a collection that contains T:Crystal.IConsiderations and T:Crystal.ICompositeConsiderations.
 CCrystal.ConsiderationCollectionA collection of T:Crystal.IConsiderations and T:Crystal.ICompositeConsiderations
 CCrystal.IContextThe context interface enables the communication and sharing of information between the agent and the AI.
 CCrystal.IContextProviderInterface for context provider responsible for supplying the T:Crystal.IContext implementing context instances.
 CCrystal.IDecisionMakerInterface for the decision maker. The only responsibility of the decision maker is to manage its associated AI.
 CCrystal.DecisionMakerBaseThe decision maker, every agent will have one or more of these to execute different AIs.
 CCrystal.DecisionMakerThe decision maker, every agent will have one or more of these to execute different AIs.
 CCrystal.IDeferredCommandHandleInterface to represent items added to the load balancer, which allows a number of operations to be called.
 CIEnumerable
 CCrystal.CircularBuffer< T >A circular buffer https://en.wikipedia.org/wiki/Circular_buffer.
 CIEquatable
 CCrystal.PointfRepresents a point in 2D space.
 CCrystal.UtilityThis struct is used throughout Crystal AI to communicate the utility (or usefulness) of a particular option, consideration or behaviour.
 CCrystal.IEvaluatorUtility evaluator interface.
 CCrystal.EvaluatorBaseEvaluatorBase serves as a base class for all evaluators, i.e. functions with arbitrary domain of definition and a range equal to any sub-interval of [0,1].
 CCrystal.Interval< T >Represents an interval of the form [a, b] or (a, b) or any combination of exclusive and inclusive end points.
 CCrystal.IOptionCollectionInterface to a collection containing T:Crystal.IOptions.
 CCrystal.OptionCollectionA collection of AI T:Crystal.IOptions.
 CCrystal.IPriorityQueue< TItem, in in TPriority >Priority queue interface.
 CCrystal.IPriorityQueue< QueuedCommand, float >
 CCrystal.IPriorityQueue< TItem, TPriority >
 CCrystal.PriorityQueue< TItem, TPriority >Priority queue.
 CCrystal.ThreadSafePriorityQueue< TItem, TPriority >Thread safe priority queue.
 CCrystal.ISchedulerAI Scheduler interface.
 CCrystal.SchedulerThe AI Scheduler class distributes the execution of the think and update methods of the contained AIs in time to avoid excessive lag spikes.
 CCrystal.MovingAverageUses a circular buffer to adaptively calculate the moving average of the contained elements.
 CCrystal.PcgPCG (Permuted Congruential Generator) is a C# port from C the base PCG generator presented in "PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation" by Melissa E. O'Neill. The code follows closely the one made available by O'Neill at her site: http://www.pcg-random.org/download.html To understand how exactly this generator works read this: http://www.pcg-random.org/pdf/toms-oneill-pcg-family-v1.02.pdf
 CCrystal.PcgExtendedPCG (Permuted Congruential Generator) Extended is a C# port from C++ of a part of the extended PCG family of generators presented in "PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation" by Melissa E. O'Neill. The code follows closely the one made available by O'Neill at her site: http://www.pcg-random.org/using-pcg-cpp.html To understand how exactly this generator works read this: http://www.pcg-random.org/pdf/toms-oneill-pcg-family-v1.02.pdf its a fun read, enjoy! The most important difference between this version and PCG is that the generators produced by this class can have extremely large periods (extremely!) and have configurable k-dimensional equidistribution. All this at a very small speed penalty! (Upto 1024-dimensionally equidistributed generators perform faster than System.Random, at least on the machines I have access to). Fun fact, the period of PCG Extended for _table_mask = 14 is 2^(524352) which is more than 10^(157846). To put this in context, the number particles in the known Universe is about 10^(80 to 81ish) if we also count photons that number goes up (with a lot of effort) to 10^(90ish). Now, there are estimates that say that visible matter (counting photons, energy-matter same thing...) accounts for 5% of the matter in the visible Universe, so if these estimates are correct the total visible+invisible particles/(energy particles) in the visible Universe would approximately be 10^(91). That means that this generator has a period that is 157755 orders of magnitude larger than the number of all particles in the visible Universe... Also, if the universe had an equal number of particles (to the period of PCG 14), that would mean that its mean density (at its current volume) would be so high that the entire Universe would collapse unto its weight into a black hole.
 CCrystal.PriorityQueueNode< TPriority >Priority queue node.