= architecture
:author: 
:revnumber: 
:revdate: 2016/03/17 20:48
:relfileprefix: ../../../../
:imagesdir: ../../../..
ifdef::env-github,env-browser[:outfilesuffix: .adoc]



== AtomAI

AtomAI is an innovative framework for doing AI for simulations and interactive applications, focus in Games!


=== Technologies

AtomAI built up by bleeding-edge of AI technologies based in lastest researches. Underlying, it depends in extensible framework to leverage maximum Java language in spirit of Atom framework.

Many parts of AtomAI are very innovative and actually release the developer from low level concerning and save a lot of time redo common usecases implementations; without errors.


=== Dependencies

AtomAI depend a lot in good AI opensource projects


==== Java DataStructures & Mechanisms


===== Javolution

link:http://javolution.org/[http://javolution.org/]

....
 Because real-time programming requires a time-predictable standard library. Javolution real-time goals are simple: To make your application faster and more time predictable!
....

Javolution solve some fundamental real-time problems with innovative technologies. Javolution is one of core dependencies of AtomCore and so AtomAI. 


===== Guava & Guice

Two google opensource projects that make Java developer's life easier.


===== Apache Commons

Lang

BeanUtils 

Math

Logging


[TIP]
====
Javolution, Guava, Guice, Commons Lang, BeanUtils, Math, Logging are a complete sets of libraries for Real-time applications with testable, logable capacities, fullfill each other and has just a little bit overlaps. You can setup them easily via Maven or gradle with JME3.
====



===== XXL

link:http://code.google.com/p/xxl/[http://code.google.com/p/xxl/]

....
 XXL is a Java library that contains a rich infrastructure for implementing advanced query processing functionality. The library offers low-level components like access to raw disks as well as high-level ones like a query optimizer. On the intermediate levels, XXL provides a demand-driven cursor algebra, a framework for indexing and a powerful package for supporting aggregation.
....

XXL already solved a lot of problems in spatial, relational and metadata… Upon that base, AtomAI focus in higher level of abstraction like Graph, State, Tree; Flow, Stream, Load balance;  later focus more in AI stuffs without worry about lower levels.


===== Qi4j

link:http://qi4j.org/[http://qi4j.org/]

....
 is a framework for domain centric application development, including evolved concepts from Aspect Oriented Programming, Dependency Injection and Domain Driven Design.
....

....
 Qi4j™ is an implementation of Composite Oriented Programming, using the standard Java platform, without the use of any pre-processors or new language elements. Everything you know from Java still applies and you can leverage both your experience and toolkits to become more productive with Composite Oriented Programming today.
....

Qi4j offers a way to config the system by layers and entities. More over, Entity-Composite (with relasionship enable) compare to Entity-components is a better way to compose things.


===== RxJava

link:https://github.com/Netflix/RxJava[https://github.com/Netflix/RxJava]

....
 Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
....

RxJava already provided mechanisms for composing asynchronous and event-based programs. AtomAI then focus in design the flows of events of agents. This is a win-win scenario for boths.


==== Scripting


===== Groovy

Groovy leverage Java in a very elegent way. Make itself the most valid candidate to being a scripting language for Java and AtomAI to construct a very flexible framework. AtomAI also provide better mechanisms to automatic tasks and tools, give developer more power in editing scripts and actions.


==== AI Model and source structure


===== AIMA

link:http://code.google.com/p/aima-java/[http://code.google.com/p/aima-java/]

....
 Java implementation of algorithms from Norvig and Russell's Artificial Intelligence - A Modern Approach 3rd Edition
 
....

is de-facto for AI techs. AtomAI *modify* and *add implementations* to AIMA-java that intergrate deeply with above technologies, make AIMA the most complete, powerful and open java AI framework.


===== Choco

link:https://github.com/chocoteam/choco3[https://github.com/chocoteam/choco3]

....
  Choco3 is an open-source Java library for Constraint Programming. 
  Choco3 comes with:
....

....
  various type of variables (integer, boolean, set, graph and real),
  various state-of-the-art constraints (alldifferent, count, nvalues, etc.),
  various search strategies, from basic ones (first_fail, smallest, etc.) to most complex (impact-based and activity-based search),
  explanation-based engine, that enables conflict-based back jumping, dynamic backtracking and path repair
....
