21 个版本
0.2.19 | 2019 年 6 月 20 日 |
---|---|
0.2.18 | 2019 年 4 月 6 日 |
0.2.16 | 2019 年 3 月 30 日 |
0.2.8 | 2019 年 2 月 27 日 |
0.1.0 | 2019 年 2 月 20 日 |
#851 in 机器学习
每月下载量 57
在 6 个 工具包中使用(4 个直接使用)
74KB
2K SLoC
Psyche AI 工具集
总体思路
这是一个基于 Practopoiesis Theory 的通用人工智能系统研究项目,该理论代表的是完全依赖于其环境的神经网络。它不是将输入转换为符号,由“机器”处理以给出输出,而是将信号作为能量潜力进行处理,并通过连接的演化和大脑结构的持续变化,自然地产生“意识”。
您可以在此处了解更多关于 Practopoiesis Theory 的信息: http://www.danko-nikolic.com/practopoiesis/
技术使用
所有工具集模块均使用 Rust 编程语言(一种多范式的系统编程语言,专注于安全性,特别是安全的并发)编写,并作为 Rust 工具包在 crates.io 上提供,可供您的项目依赖。
外部函数接口
Psyche 工具集提供了对许多语言和框架的 FFI 库和包装器。
- C 和 C++ 标头以及本地静态和动态库;
- C# 包装器;
- Amethyst 引擎 集成工具包。
- 待办事项: Unity 3D 引擎 插件(需要在集成方面修复一个错误);
- 待办事项: Godot 引擎 插件(需要在集成方面修复一个错误);
- 待办事项: Game Maker 引擎 插件。
工具集模块
- 核心 - 定义大脑:神经元、它们之间的连接、通过进化产生后代以及所有使大脑正常工作的处理过程;
- Serde - 将大脑信息序列化和反序列化成不同的存储数据格式:二进制、JSON 和 YAML;
- Host - 目前没有功能,但将来将能够将大脑放入宿主体内;
- Graphics - 生成波形 OBJ 图形数据,可用于可视化大脑活动;
- Simulator CLI app - 命令行应用程序,可以逐步模拟大脑活动,并为每个步骤生成大脑活动帧数据作为文件,以便在外部应用程序(如 Houdini 用于可视化或任何分析应用程序)中使用。
演示
大脑活动可视化器
每条蓝色线代表两个神经元之间的连接,每个白色圆点代表通过神经网络传播的信号。
流体环境中的孢子
每个孢子都有自己的大脑,连接到身体传感器(嗅觉)和马达(腿部),并通过这种方式尝试找到并吃掉留在水中的食物。您也可以通过用鼠标拖动产生流体电流来操纵环境。
使用方法
在 Cargo.toml
中记录
[dependencies]
psyche = "0.2"
您的 crate 模块
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);
}
}
}
依赖关系
~1.2–2.3MB
~42K SLoC