config file + first network layer

This commit is contained in:
fabolous005 2025-10-07 12:16:58 +02:00
parent 95f602b0a3
commit be9af4c7b1
7 changed files with 115 additions and 3 deletions

View File

@ -4,3 +4,5 @@ version = "0.1.0"
edition = "2024"
[dependencies]
serde = { version = "1.0.228", features = ["derive"] }
toml = "0.9.7"

44
src/config.rs Normal file
View File

@ -0,0 +1,44 @@
use serde::Deserialize;
use std::collections::HashMap;
use std::fs;
#[derive(Deserialize, Clone)]
pub struct BrainRegionConfig {
name: String,
input_size: usize,
connection_likeliness: i8,
}
impl BrainRegionConfig {
pub fn set_name(&mut self, name: String) {
self.name = name
}
}
impl BrainRegionConfig {
pub fn input_size(&self) -> usize {
self.input_size
}
}
#[derive(Deserialize, Clone)]
pub struct BrainConfig {
region: HashMap<String, BrainRegionConfig>,
network_file: String
}
impl BrainConfig {
pub fn from_string(path: &str) -> Self {
let toml_str = fs::read_to_string(path).unwrap();
toml::from_str(&toml_str).unwrap()
}
pub fn regions(self) -> HashMap<String, BrainRegionConfig> {
std::mem::take(&mut self.region.clone())
}
pub fn network_file(self) -> String {
self.network_file
}
}

View File

@ -5,6 +5,20 @@
mod structure;
mod sensors;
mod config;
use crate::structure::network::Network;
use std::{path::Path};
use crate::config::BrainConfig;
fn main() {
println!("Hello, world!");
let config_file = "./config.toml";
let config = BrainConfig::from_string(config_file);
let network = if ! Path::exists(Path::new(&config_file)) {
Network::new(config.regions())
} else {
Network::from_file(config.network_file())
};
}

View File

@ -12,11 +12,14 @@ change rate of structures
focus <= prediction
*/
pub struct Sight;
pub enum Senses {
Sight,
Hearing,
}
const SIZE: usize = 1024;
impl Sensor<SIZE> for Sight {
impl Sensor<SIZE> for Senses {
fn input(&self, input: [f32; SIZE]) {
todo!()

View File

@ -1,2 +1,3 @@
pub mod neuron;
pub mod sensoric;
pub mod network;

36
src/structure/network.rs Normal file
View File

@ -0,0 +1,36 @@
use std::str;
use std::array;
use crate::structure::neuron::Neuron;
use crate::config::BrainRegionConfig;
use std::collections::HashMap;
pub struct BrainRegion {
config: BrainRegionConfig,
nodes: Vec<Neuron>
}
impl BrainRegion {
fn new(mut config: BrainRegionConfig, name: String) -> Self {
config.set_name(name);
Self {
nodes: vec![Neuron::default(); config.input_size()],
config,
}
}
}
pub struct Network {
parts: Vec<BrainRegion>
}
impl Network {
pub fn new(region_config: HashMap<String, BrainRegionConfig>) -> Self {
let parts = region_config.into_iter().map(|config| BrainRegion::new(config.1, config.0)).collect();
Self { parts }
}
pub fn from_file(path: String) -> Self {
todo!()
}
}

View File

@ -17,4 +17,16 @@ systems
*/
#[derive(Clone)]
struct Connection {
weight: u8,
id: usize
}
#[derive(Default, Clone)]
pub struct Neuron {
id: usize,
connections: Vec<Connection>,
state: f32,
difference: f32
}