Machine Learning Machine - a VM for machine learning
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
Cargo.toml
README.md

README.md

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.

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