This section contains instructions to extend LARA by specific implementations of certain components. Also consider LARA's .
In case one wants to a add a new decision mechanism one needs to implement a new LaraDecider and a decider factory that builds these decider objects. The factory can then be assigned to the agent's LaraDecisionData} in the LaraDecisinModeSelector (see source code of LDefaultDecisionModeSelector).
The simplest implementation of LaraDecider is certainly LExplorativeDecider. The general idea is to select a certain BO, possibly from the set of stored BOs at the LaraDecisionData object, when decide() is performed. The result should be stored in the decider and be accessible via getSelectedBO() or getKSelectedBOs() respectively. BTY: decide() is called internally by the event bus! Furthermore, getDecisionMode() needs to be implemented which returns the LaraDecisionMode this decider is associated with. This is important for purposes of analysis.
Usually, what is required and done in the decider defines the steps of the pre-processor that are necessary. Therefore, a new implementation of LaraDecider should state which pre-processor steps need to be performed.
LaraDeciderFactorys manage the life cycle of LaraDecider object. For some deciders a global instance is sufficient which can be shared among all agents. For others, each agents requires its own decider instance which then only needs to be present during decision making.
The simples decision factory is probably LExplorativeDeciderFactory. It just implements getDecider() where it returns a new decder for each agent.
LaraDecisionModes are used to identify decision modes in LARA. Every LaraDecider has a method getDecisionMode() which return the LaraDecisionMode the decider is associated with. To add new LaraDecisionMode you may greate a new enumeration that implements LaraDecisionMode. Every decisin mode is also associated with a number, deliberative decision modes with a low number, heuristics with a higher one.