#permutations #permutation #combinatorial #qap #pfsp

permu-rs

A collection of utilities for permutations. It contains useful tools to create, manage and experiment with permutations.

7 releases

0.2.0 Sep 11, 2020
0.1.4 Nov 13, 2019
0.1.3 Oct 21, 2019

#347 in Science

21 downloads per month

MIT/Apache

88KB
1.5K SLoC

permu-rs

A collection of utilities for permutations. It contains useful tools to create, manage and experiment with permutations.

Build status

Documentation

You can find the documentation with examples here.

Usage

Add this to your Cargo.toml:

[dependencies]
permu-rs = "0.2.0"

Here's a simple example in order to illustrate how to transform populations from one representation space to another and how to learn and sample distributions:

use permu_rs::permutation::PermuPopulation;
use permu_rs::inversion::InversionPopulation;
use permu_rs::Population;

fn main() {
    let length = 5;     // Length of permutations
    let pop_size = 5;   // Number of individuals in the population

    // Create an identity permutation population
    let identity = PermuPopulation::<u8>::identity(pop_size, length);
    println!("Identity permutation population:\n{}", identity);

    // Initialize an inversion population to hold the inversion vector
    // representation of the population of permutations
    let mut invs = InversionPopulation::<u8>::zeros(pop_size, length-1);

    // Convert the permutation population into its inversion representation
    identity.to_inversion(&mut invs).unwrap();
    println!("Inversion population from permutations:\n{}", invs);

    // Learn a distritibution over the inversion vector population
    let mut distr = invs.learn();
    println!("Distribution of the inversion population:\n{}", distr);

    // Sample the learned distribution creating a new inversion population
    let mut samples = InversionPopulation::<u8>::zeros(pop_size, length-1);
    InversionPopulation::sample(&mut distr, &mut samples).unwrap();
    // Note that the distribution has changed. The distribution was
    // soften inside the sampling procedure.
    println!("Soften distribution of the inversion population:\n{}", distr);
    println!("Sampled solutions from the distribution:\n{}", samples);

    // Create a permutation population to hold the new permutation population
    let mut recovered = PermuPopulation::<u8>::identity(pop_size, length);

    // Convert the sampled inversion vectors to their permutation representation
    samples.to_permus(&mut recovered).unwrap();
    println!("Permutation representation of samples:\n{}", recovered);
}

License

This project is licensed under either of

at your option.

Dependencies

~320–500KB