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



== AtomAI

Hi,

This is the wiki for Atom AI framework.


image::http://blogs.ifsworld.com/wp-content/uploads/2012/11/AI-lowres.jpg[AI-lowres.jpg,width="200",height="",align="right"]



=== Questions and Answers

*Question:* What's the h#$ll is AI or why should I bother in this thingy anyway emoji:

*Answer:* It's big, over-complicated and also attractive subject in Game developing.. emoji: emoji:sunglasses

*Question:* What can be use in my game?

*Answer:* Everything… You can use this lib to:

*   solve the common path finding,
*  let your creature know how to think and learn,
*  direct your vehicle the way to move,
*  your camera to interact with the screen,
*  teach your characters to walk/ talk/ shoot/ trading…
*  You can also use it in various type of simulations and
*  even try to solve a mathematic problem.

*Question:* Sound wonderful…? But wait… It should be soooooooo freaking big and heavy, is it *real-time* shit?

*Answer:* Yes, partly… Some parts are real heavy for real time computing. They just can be used in non real time application or few kind of games. Others apx 60% are designed well enough to run in real time, and also provided with JME examples. It also comes with architectures/ functions that can config, optimize, balance, cache, and batch it selfs for real-time applications…

*Question:* Eh… Universal solution can not be true…

*Answer:* Let's me explain. Consider this a warper of every good open-source java AI libraries you can name out and hook in to JME architecure (AppState, Sptial, Entity, Control, Update cycle…etc). Under the hood, I use Guice| OSGi |Felix to dynamicly link/bind them, when you need it. The full explaination you will find below.

*Question:* Nice, I want to try it?

*Answer:* Everything is here at once, sir/ madam !
More questions ? Not convinced yet? Go to <<FAQ,FAQ>>


=== Introducing Atom AI framework

This Atom AI framework are more or less a “framework to bring AI to jME3 game (also means real-time application)!


[TIP]
====
Here is my picked list of <<jme3/advanced/atom_framework/ai/researches#,researches>> and articles you can read in AI field (game and none-game)
====



=== Idea & Buzz

*  It contains warpers for various java AI libraries build on top of light-weight, configable module architecture and provide the way to hook seamlessly to jME3 games.
*  It's also come up with a lot of working examples in several game genre (RTS, RPG, FPS, Sport,…).
*  40% of components, AI algorimth are rewritten by the author (@atomix) to be light-weight and usable in real-time application.
*  Tend to be used in production application and games and suppose to support broadest cases it can.
*  Users can use the pieces to build up their own AI part of their games and apps
*  Pushed to future java techs: dependencies injection, parallel as its core…


=== Features

(T) means additional Tools are supported

(C) means with examples cases

(E) means use| depend on external libs


[IMPORTANT]
====
Note that: despite of the fact, the lib has a lot of dependencies, the author always try have simple fallback - homegrown implemention.  Of course, support a fewer use cases, mainly for specific game genres, but it's better than nothing, that's the bright side
====



[IMPORTANT]
====
Read alternatives and searches if you want to go further than Atom!
====



==== Framework

*  Modulize (E)
*  Dependency free (E)
*  Configable , balancable , profilable , level of detail (T)
*  Paralel (E)


==== Data Structure

*  State (T)
*  Tree (T)
*  Graph (T)(E)
*  Geometric (T)(E)


==== General algorimth and Support techs

*  Optimizing problem(E)
*  Constraint programming(E)
*  Fuzzy logic(E)
*  Probability
*  Genetic (T)(E)
*  Neutral network (T)(E)
*  Rule base (T)(E)
*  Scripting (T)


==== General AI Techs

*  Movement
**  Kinematic
**  Physics embed
**  Steering
***  Boid
***  Swarm

**  Formation

*  FSM , HFSM , FFSM for AI (T)
*  Searching
**  Path finding
***  algorimth: A Star, theta Star
***  space: Grid, Hex, Tris, Polys, 3D Block, 3D Terrain, NavMesh, points cloud/, graphs… [more]
***  generate methods: navmesh gen,jump points, choke points, viewset points, … [more]
***  re-touch methods: smooth, reduce, prunning, time-wise, cahing, progessive
***  highly extensible, hookable, configableready to use as corporated with lower and higher techs

**  General path finding
***  Iterative deepending
***  Some academic stuffs …


*  Reasoning
**  Decision Tree
**  Minimax
**  Some academic stuffs …

*  Planning
**  Goal base

*  Problem sovling
*  Learning


==== Character AI


===== Human

*  Chatbot  (T)(E)(C)
*  Dialoge (T)(C)
*  Emotion (T)(C)
*  Facial (T)(C)
*  Voice (T)(E)
*  Gesture (T)(E)
*  CommonSense (C)
*  Common Human AI usecases (C)


===== Animal


=== Architecture and components

Here are its <<jme3/advanced/atom_framework/ai/architecture/architecture#,Architecture>> and <<jme3/advanced/atom_framework/ai/components/components#,Components>>.

iframe::http://bubbl.us/view/1860d6/2fd76d/15vmlQSf.3GMg/[width="98%", height="400px", alt="600px,600px", scroll="true",border="true",align="false"]



=== Vision

As the framework grown up, I will bring more unit tests and example cases.

Also it should has even better integration with the JME SDK and other Netbean's plugins like (weka, neuphons…). Corporate with Code gen, it's can easily replace Alice, Manson,etc…  as much better 3D non-coding enviroment and one day maybe become the most advanced AI simulation enviroment on earth!


=== FAQ

*Question*: Why warpers?

*Answer*: Not reinventing the wheel, trust in good opensource project, broader use caces, broader user… And last but not least, it's just work!
'''

*Question*: Why java 1.5+?

*Answer* : Consider this lib is a push to java techs and java's game techs. The user are forced to get familiar with the changing world… Yes, AI is a rapid changing subject and we (java game devs) should keep up.
'''

*Question*: Why f$#kin heavy and not light-weight, real-time, etc???

*Answer*: This libs provide some features which just optimized enough to run in “quite high performance machine. But it also have sotiphicated methods to config it self. Consider this key feature to keep in mind. Get fit!
'''

*Question*: Big jar?

*Answer*: Nope, consider not too big… thanks to Guice, size &lt; 6MBs and can even smaller if you compile it your self and cut the unneccesary things. In some case you want to use *ALL* the features, the whole dependencies will take about *78MB* and *45MB* for the SDK plugins! And Maven should be to used to get every artifacts!
'''

*Question*: Documentations and javadoc?

*Answer* : On its way, the orginal author (me, @atomix) are slow (busy) , volunteers are welcome! Also read all the external wel-documented open source libs <<jme3/advanced/atom_framework/ai/libs#, Full list here>> that this lib depend on are quite enough. Cause its idiom is simple.
'''

*Question*: I have ideas?

*Answer* : Tell me , @atomix in the forum.


=== Other open-source dependencies

As said, even if I try to rewriten some parts that most critical for real time game, I cannot against the ideas of including every good functions of other libs. So, I provide good way to communicate between them and the way to link them on demand…

Let name the libs can be used:
As category

*  Neutral Network
*  Machine Learning
*  Search
*  Constraint programming
*  Geometry constraint
*  Human language processing
**  Chatbot



== Documentation


=== Basic


=== Examples & Usecases


=== API


== Alternatives


=== Open sources


=== Commercial


=== Toolset


== Researches

Go to <<jme3/advanced/atom_framework/researches#,researches>>
