Prometheus AI model, containing the following layers:
The NN and META are basic skeletons at this point.
For a basic overview of the theory and design behind Prometheus, see the reports provided in the reports
directory. For further background on the theory of Prometheus, contact Prof. Vybihal.
Java 8 is used in Prometheus for lambda expressions and Optional
objects.
This project is a Java Maven project, with library dependencies specified in the pom.xml
file. Maven allows dependencies to be specified in a file without needing to keep track of jar files. An introduction to Maven can be found here.
Google Guice is used as the backbone for the various dependencies within the code. Guice neatly allows the implementation of various important OOP principles, like dependency inversion. An introduction to Guice can be found here. For more information about the Guice package structure used for Prometheus, see the Java Package Structure section.
Mockito is used to create mock objects for behavior-driven unit tests. Mock objects are essentially "fake" versions of objects used to simulate dependencies in unit tests. Mockito couples very well with the dependency injection of Guice. An overview of Mockito can be found here and an example of behavior-driven development (BDD) with Mockito can be found here.
TestNG is a testing library much like JUnit. It is used for all the unit tests and integration tests found under the test
directory.
Apache Commons Lang provides many nice objects to avoid boilerplate code for Java objects. It is used for creating the hashCode()
, equals()
and toString()
methods of most objects in the code. Details on this library can be found here.
Graphstream is used for plotting the KNN network. Details on this library can be found here.
Here is a list of the each top-level directory and its purpose.
Directory | Contents |
---|---|
data/ |
Input data files for the KNN. |
docs/ |
Javadoc files. |
graphs/ |
Generated graphs from the various graphing tools. |
reports/ |
Reports on Prometheus. |
src/ |
Source code. |
Each Java package (with the exception of tags
) has the following structure for its sub-packages:
Package | Contents | Example |
---|---|---|
api |
Public classes and interfaces. Only code relevant for a user of the package should be present here. | es/api/ |
guice |
Public Guice module. This module will be used by a user of the package and should install an internal Guice module. See ExpertSystemModule.java for an example. |
es/guice/ |
internal |
Internal classes and interfaces. Internal code that does not concern a user is found here, as well as an internal Guice module to install internal classes. See ExpertSystemInternalModule.java for an example. |
es/internal/ |
Javadoc can be found here.