21 releases
0.2.19 | Jun 20, 2019 |
---|---|
0.2.18 | Apr 6, 2019 |
0.2.16 | Mar 30, 2019 |
0.2.8 | Feb 27, 2019 |
0.1.0 | Feb 20, 2019 |
#883 in Machine learning
49 downloads per month
Used in 6 crates
(4 directly)
74KB
2K
SLoC
Psyche AI Toolset
General idea
This is a research project about General Artificial Intelligence system loosely based on Practopoiesis Theory which stands for neural network that depends purely on its environment and instead of converting inputs into symbols that are processed by "machine" to give output, it processes signals as energy potentials and by evolution of connections and constant change of brain structure, it produces "consciousness" naturally.
You can read more about Practopoiesis Theory here: http://www.danko-nikolic.com/practopoiesis/
Tech used
All toolset modules are written in Rust programming language (a multi-paradigm systems programming language focused on safety, especially safe concurrency) and is available on crates.io as Rust Crate ready to be your project dependency.
Foreign Function Interface
Psyche toolset provides FFI libraries and wrappers for many languages and frameworks.
- C and C++ headers with native static and dynamic libraries;
- C# wrapper;
- Amethyst engine integration crate.
- TODO: Unity 3D engine plugin (there is a bug to fix on the integration side);
- TODO: Godot engine plugin (there is a bug to fix on the integration side);
- TODO: Game Maker engine plugin.
Toolset modules
- Core - defines brain: neurons, connections between them, production of offsprings by evolution and all processing that makes brain functioning;
- Serde - serialization and deserialization brains into different storing data formats: Binary, JSON and YAML;
- Host - for now does nothing but it will gives ability to put brain in host body;
- Graphics - produces Waveform OBJ graphics data that may be used to visualize brain activity;
- Simulator CLI app - CLI application that simulate brain activity step by step and for each step it produces brain activity frames data as files ready to use in external applications such as Houdini for visualizations or any analizer application.
Demos
Brain activity visualizer
Every blue line is a connection between two neurons and every white dot is a signal traveling through neural network.
Spores in fluid environment
Each spore has its own brain connected to body sensors (smell) and motors (legs) and by that it tries to find and eat food portions left in water. You can also manipulate environment by producing fluid currents with mouse dragging.
Usage
Record in Cargo.toml
:
[dependencies]
psyche = "0.2"
Your crate module:
extern crate psyche;
use psyche::core::brain_builder::BrainBuilder;
use psyche::core::config::Config;
use psyche::core::Scalar;
// prepare config for brain.
let mut config = Config::default();
config.propagation_speed = 50.0;
config.synapse_reconnection_range = Some(15.0);
config.neuron_potential_decay = 0.1;
config.synapse_propagation_decay = 0.01;
config.synapse_new_connection_receptors = Some(2.0);
// build brain.
let mut brain = BrainBuilder::new()
.config(config)
.neurons(100)
.connections(200)
.min_neurogenesis_range(5.0)
.max_neurogenesis_range(15.0)
.radius(30.0)
.sensors(10)
.effectors(10)
.brain();
loop {
// trigger sensors.
for sensor in brain.get_sensors() {
brain.sensor_trigger_impulse(sensor, 1.0);
}
// process brain step.
brain.process(1.0);
// read effectors and act based on their stored potential.
for effector in brain.get_effectors() {
if let Ok(potential) = brain.effector_potential_release(effector) {
println!("{:?} = {:?}", effector, potential);
}
}
}
Dependencies
~1.2–2.3MB
~44K SLoC