Skip to content
/ mlem Public

Machine Learning Machine - a VM for machine learning

Notifications You must be signed in to change notification settings

NoraCodes/mlem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MLeM

Crates.io version badge Docs.rs version badge

The Machine Learning Machine is a 64-bit virtual Harvard-arch machine for evolutionary algorithms to program against.

The machine has eight GPRs (R0 through R7), a hardware stack with SP and BP, and hardware I/O with Input and Output.

These I/O instructions write out whole u64s in big endian using byteorder.

Features

The serialize feature imports serde and derives Serialize and Deserialize on all types. It is enabled by default.

Example

This example shows a simple program being executed by the MLeM managed execution routine.

use mlem::{execute, Instruction, Address, Register, Outcome};
let input = vec![2, 2, 2, 2];
let expected = vec![4, 0];
let program = vec![
    // Get all input values
    Instruction::Input(Address::RegAbs(Register::R0)),
    Instruction::Input(Address::RegAbs(Register::R1)),
    Instruction::Input(Address::RegAbs(Register::R2)),
    Instruction::Input(Address::RegAbs(Register::R3)),
    // Perform arithmetic
    Instruction::Add(Address::RegAbs(Register::R0), Address::RegAbs(Register::R1)),
    Instruction::Sub(Address::RegAbs(Register::R2), Address::RegAbs(Register::R3)),
    // Output computed values
    Instruction::Output(Address::RegAbs(Register::R0)),
    Instruction::Output(Address::RegAbs(Register::R2)),
    // Halt
    Instruction::Halt
];
//!
let (outcome, _, output) = execute(program, input);
assert!(outcome == Outcome::Halt, "Program did not successfully halt! {:?}", outcome);
assert!(output == expected, "Program did not produce {:?} as expected, but rather {:?}.", expected, output);

About

Machine Learning Machine - a VM for machine learning

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages