A module of SkyAI is a C++ class; in order to be compatible with the SkyAI system, each module should be a subclass of TModuleInterface. Of course, a module can be inherited from any subclass of TModuleInterface.
Each module consists of the following elements:
Generally in C++, classes communicate with each other through their member functions. In SkyAI, a port is a kind of member function for the inter-module communication, but is encapsulated as a port class in order to enable the user to connect and disconnect the ports in an agent script. Each module can have any number of ports. Ports can be connected and disconnected at any time in execution, which enables to reconfigure the modular structure.
There are four kinds of ports:
A configuration box is the configuration-parameter manager of a module. The configuration box manages configuration parameters, such as a learning rate, a time step, and a discount rate; it provides an interface to access these parameters from an agent script. Namely, the variables of C++ registered to the configuration box can be manipulated by an agent script.
A memory box is the memory-parameter manager of a module. The memory box is almost the same as the configuration box; the difference is that the memory box manages memory parameters, such as an action value table.