#人工智能 #工具集 #神经网络 #研究 #心灵 #理论 #大脑

应用程序 psyche-simulator-cli

Psyche AI 工具集的命令行模拟器

13 个版本

0.2.19 2019 年 6 月 20 日
0.2.18 2019 年 4 月 6 日
0.2.16 2019 年 3 月 30 日
0.2.8 2019 年 2 月 27 日

#859机器学习

每月 22 次下载

MIT 许可证

32KB
604

Logo

Psyche AI 工具集

基本概念

这是一个基于 Practopoiesis 理论 的通用人工智能系统研究项目,该理论代表了一种仅依赖于其环境的神经网络。它不像将输入转换为“机器”处理的符号那样转换输入,而是将信号作为能量潜力处理,并通过连接的进化和大脑结构的持续变化,自然地产生“意识”。

您可以在这里了解更多关于 Practopoiesis 理论的信息: http://www.danko-nikolic.com/practopoiesis/

使用的技术

所有工具集模块均使用 Rust 编程语言 编写(一种多范式系统编程语言,侧重于安全性,特别是安全并发)并在 crates.io 上作为 Rust 包提供,可作为项目依赖项。

外部函数接口

Psyche 工具集为许多语言和框架提供 FFI 库和包装器。

  • CC++ 头文件和本地静态和动态库;
  • C# 包装器;
  • Amethyst 引擎 集成包。
  • 待办事项:Unity 3D 引擎 插件(需要在集成方面修复一个错误);
  • 待办事项:Godot 引擎 插件(需要在集成方面修复一个错误);
  • 待办事项:Game Maker 引擎 插件。

工具集模块

  • 核心 - 定义大脑:神经元、神经元之间的连接、通过进化产生后代以及使大脑运行的所有处理;
  • Serde - 将大脑序列化和反序列化为不同的存储数据格式:二进制、JSON 和 YAML;
  • Host - 目前什么也不做,但它将提供将大脑放入宿主身体的能力;
  • 图形界面 - 生成波形OBJ图形数据,可用于可视化脑部活动;
  • 模拟器CLI应用 - CLI应用,逐步模拟脑部活动,并为每一步生成脑部活动帧数据,作为文件准备在外部应用程序(如Houdini进行可视化或任何分析应用)中使用。

演示

脑部活动可视化器

每条蓝色线代表两个神经元之间的连接,每个白色点代表通过神经网络传输的信号。

psyche-demo-brain-activity

流体环境中的孢子

每个孢子都有一个连接到身体传感器(嗅觉)和马达(腿部)的独立大脑,通过这种方式,它试图找到并吃掉留在水中的食物残渣。您还可以通过鼠标拖动产生流体电流来操纵环境。

psyche-demo-spore

使用方法

Docs.rs Crates.io

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);
    }
  }
}

依赖项

~7MB
~125K SLoC