A comprehensive autonomous decentralized systems framework for AI control architects.
Spawn a system of concurrent, distributed, fault tolerant, and highly available intelligent agents for coordinated and/or uncoordinated action in one or many environments with no central point of failure. This project is Open Source.
The Automata Project combines the state-of-the-art AI control techniques with the latest research in autonomous decentralized systems, providing AI designers a flexible framework for creating valuable emergent properties in real world systems.
See the current milestones here.
Testing is currently happening using the mock sequence in world/mock_world/mock_automata/mock_seq_1.ex
. This is currently our canonical example of how to design a behavior tree (one type of Automaton
), and eventually communicates with other heterogeneous agents that you define in world/<mock_world>/<mock_automata>/<mock_automaton>
.
Currently, you can run the mock sequence in an iex shell as follows:
iex -S mix
iex(1)> Automata.spawn()
and tests can be run with debugging capabilities as follows:
MIX_ENV=test iex -S mix test test/unit/automaton/automaton_test.exs:23
where you are running a specific context/it block containing line 23.
Elixir & OTP provide the primitives for robust concurrent, fault-tolerant, highly available, self-healing distributed systems. The main point of the Erlang model is an application that can be expected to run forever, as stated by the language designer. Talk about unstoppable agents! Read more about the many benefits of Elixir and OTP.
Heterogeneous agents equipped with reasoning and knowledge components provide AI architects a selection of graphical, reinforcement learning, and neuroevolution based orchestrated agent constellations for a variety of real world environments.
Why and How Elixir? Elixir for world class communication & control fault tolerance and distribution. Nx is used for numerical computation. We primarily focus on unsupervised learning and architecture search. Evolutionary architecture novelty search (EANS) evolves populations of feed-forward neural networks without computationally expensive backpropagation and uses novelty to explore the search space. Mixture of Experts (MoE) Deep Learning is on the roadmap.
Automata
framework has three abstract semantic layers:The maps of the territory. Without good maps, any explorer could easily get lost. To fit the information available to the problem at hand, we separate representations into distinct layers with well defined boundaries.
All agents have some formulation of action selection, otherwise they would never achieve their goals. To keep agent decision making correct, we fit the mode of reasoning to the representation.
Interchangeable memory modules across short term working memory, blackboards, and knowledge bases.
Automata
.It combines five complementary aspects:
Note that the five aspects are orthogonal. The first two aspects deal with “understanding” the map of the environment. The third and the forth aspects deal with autonomy of decision. Self adaptation ensures adequacy of decisions with respect to the environment map. See MMLC2.
Autonomous Controllability: Even if any subsystem fails, is repaired, and/or is newly added, the other subsystems can continue to manage themselves and function.
Autonomous Coordinability: Even if any subsystem fails, is repaired, and/or is newly added, the other subsystems can coordinate their individual objectives among themselves and can function in a coordinated fashion.
Planned builtin and/or custom third-party agent types include:
Graphical Model Based
Reinforcement Learning (RL) Based
Neuroevolution
The central problem of artificial intelligence is how to express the knowledge needed in order to create intelligent behavior. — John McCarthy, M.I.T/Stanford Professor, Creator of Lisp
Automata
defmodule MyAutomaton do
use Automaton,
# required
type: :behavior_tree,
# the remainder are required with type :behavior_tree.
node_type: :selector,
# the heartbeat for this node(subtree), in milliseconds
# the default is 50ms (mimics the average human brain perception cycle time)
# heartbeat adaption as meta-level(automata) action, to be changed at runtime
tick_freq: 50, # 50ms
# excluded for execution nodes
# list of child control/action(execution) nodes
# these run in order for type :selector and :sequence nodes and in parallel
# for type :parallel, and in a user-defined dynamic order for :priority
children: [ChildAction1, ChildSequence1, ChildAction2]
@doc """
Required with `type: :behavior_tree`
- Called every tick, must return `{:ok, status}` or `{:error, reason}`
## Reactively and Proactively Change the World
> ie.. effect the current environment in phases using
either actuator *effectors* or via *communication* with
other agents and/or internal/external systems
"""
def update do
{:ok, status}
end
end
Below is a simplified hypothetical example of a :behavior tree
sequence control node(subtree) for an autonomous "Forex Trader". The first two leafs are condition nodes, and the last two are action nodes.
If available in Hex, the package can be installed
by adding Automata
to your list of dependencies in mix.exs
:
def deps do
[
{:automata, "~> 0.1.0"}
]
end
See also the list of contributors who participated in this project.
This project is licensed under the Apache 2.0 License - see the License.md file for details or