# Wizard

The wizard allows you to create a full working package of a multi-agent simulation. You get a zip file which contains a full working Maven project. You can follow-up our 15 minutes tutorial step 4 to build AgentSpeak and after that the wizard generated code can be used directly. The code is tested up to 2.500.000 agents with communication, environment, external and internal actions and create an executable jar file.

Note: We are currently testing the wizard with different workflows and examples, so bugs can occure. Please report us any problems and feel free to ask questions if there is anything ambiguous

### General

Information

This main information are needed to define your own application structure. Here you can define a general name and projekt description for this simulation. This data will be used for the Maven build process. The generated Maven build script is defined for Maven 3.0 or higher, so you need the correct version of Maven and a built LightJason AgentSpeak(L++) Maven package.

The project domain specifies the package e.g.: org.lightjason
The project name specifies the program name, which also is used for the file name
The version of the program it can be set to any number

(*) Mandatory

### Meta-Information

Information

The meta-information contains project description and project url. The data are not neccessary and will if exists added to the readme and project configuraton.

### Runtime

Information

The runtime is the main structure to execute the simulation, so here can you define the main runtime. The runtime is build with parallel execution, so keep in mind, that the execution can be return different arguments. The runtime does not contains a (statistical) analysis of, so this must be written by yourself.

### Agent & Internal Actions

Information

Agents will be generated by an agent-generator. For each agent-class an agent-generator is needed, but a generator can be instatiated multiple time for using different ASL files. An agent is an object, which depends on an AgentScript(L++) file (ASL file) and a generator can process one file, so multiple agents can be generated by the same ASL file. For the most scenarios only one agent and one generator is needed which can be used with multiple ASL files, so the default configuration is sufficient.

Agents Types
Agents (minimum one agent), new agent name, add to / remove from list

Internal Action Definition
Return type, action name and parameter must follow the Java type definition and will be defined as a comma separated list

### External Action

Information

The external- or standalone-actions are calls from the agent which can define any kind of behaviour. The action can be used to define any kind of calculation or logging, data export and import. Take a look on the current built-in actions to get an overview.

External Action Definition
External actions with action name and neccessary number of arguments

### Environment

Information

The environment defines a shared data structure for all agents, so in this configuration you can define a set of actions which will definied within each agent. All agents get access to the same environment instance and the simulation can suppor different environment types (you need to add some further environment classes). Please keep in mind that all access to the environment must be thread-safe and mostly not in a synchronized way, because of performance issues. It make sense that you take a look on thread-safe Java data structure to develop the details of your environment.

Environment Action Definition
Return type, action name and parameter must follow the Java type definition and will be defined as a comma separated list

### Code Generation

Information

Here can create the code examples based on the LightJason framework. We recommand to understand the code especially consideration of performance and object-orientated programming and design. This wizad cannot create a full performant example for each domain definition and problem definition, so in some cases you must create your own structure.

The wizard should help beginners to understand the architecture of the framework without writing the full boilerplate code yourself. Please read the tutorials first to understand the main concepts of the code. All generated codes are for Java 1.8 or higher, so a downgrade is not possible.

We recommand that the readme.md within in the zip file is read before start working.