A fast lean and clean modern constraint programming solver implementation (in rust)

Overview

MaxiCP-rs

Rust codecov

This project aims at implementing a fast, and clean constraint programming solver with a focus on correctness, simplicity, maintainability and performance. It is largely inspired by both minicp (https://www.minicp.org) and maxicp (https://pschaus.github.io/maxicp/).

NOTE: This is pretty much a pet project and a work in progress. We'll see where this leads.

maxicp-rs-logo

Roadmap to minimum viable product

  • State
    • Implement a trailing mechanism
    • Implement reversible sparse set
    • Implement reversible interval
  • Engine
    • Implement bool var
    • Implement int variables
    • Define constraint and propagator traits
    • Implement the solver with propagation fixpoint
    • Test the solver propagation
    • Implement views
    • Implement the basic constraints
      • Abs value :: x == |y|
      • not equal const :: x != v
      • not equal :: x != y
      • is not equal :: b <==> (x != v)
      • is not equal (var) :: b <==> (x != y)
      • equal :: x == y
      • is equal :: b <==> x == v
      • is equal (var) :: b <==> x == y
      • LE :: x <= v
      • LE :: x <= y
      • GE :: x >= v
      • GE :: x >= y
      • is LE :: b <==> x <= v
      • is LE (var) :: b <==> x <= y
      • is GE :: b <==> (x >= v)
      • is GE (var) :: b <==> (x >= y)
      • is or (var) :: b <==> (x || y)
      • must be true x
      • maximum
      • sum
      • All diff binary
      • All diff dc
      • All diff fwc
      • All diff binary
      • circuit
      • cumulative
      • cumulative decomp
      • disjunctive
      • element_1d
      • element_1d DC
      • element_2d
  • Search
    • Implement search strategies
  • Bindings
    • For Python3 (with pyo3)
    • For C++ (with cxx)
    • For Java (maybe consider)

Maybe later

  • State
    • Implement reversible lazy sparse set
    • Implement fast and efficient bitsets
    • Implement reversible bitset
    • Implement reversible tri partition
    • Implement reversible stack (push only)
  • Engine
    • Implement sequence variables
    • Implement more constraints (tables)
You might also like...
A set of Zero Knowledge modules, written in Rust and designed to be used in other system programming environments.

Zerokit A set of Zero Knowledge modules, written in Rust and designed to be used in other system programming environments. Initial scope Focus on RLN

Orion lang is a lispy programming language that is strongly and statically typed.
Orion lang is a lispy programming language that is strongly and statically typed.

Orion Orion is a lisp inspired statically typed programming language written in Rust Install To install orion you can either: Download binary from the

Mote is a systems-programming language designed to be practical, performant, and simple.
Mote is a systems-programming language designed to be practical, performant, and simple.

Mote NOTE: this following lists the goals for what Mote is supposed to be. It does not promise that any of the features here will be accomplished or a

lints and suggestions for the nix programming language

statix Lints and suggestions for the Nix programming language. statix highlights antipatterns in Nix code. statix --fix can fix several such occurrenc

A turing-complete programming language using only zero-width unicode characters, inspired by brainfuck and whitespace.

Zero-Width A turing-complete programming language using only zero-width unicode characters, inspired by brainfuck and whitespace. Currently a (possibl

Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.
Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

Nyah is a programming language runtime built for high performance and comes with a scripting language.

🐱 Nyah ( Unfinished ) Nyah is a programming language runtime built for high performance and comes with a scripting language. 🎖️ Status Nyah is not c

🐱 A high-speed JIT programming language and its runtime, meow~

🐱 A high-speed JIT programming language and its runtime, meow~

A statically-typed, interpreted programming language, with generics and type inference

Glide A programming language. Currently, this includes: Static typing Generics, with monomorphization Type inference on function calls func identityT

Owner
Xavier Gillard
PhD student in computer science at UCLouvain. Interested in operations research (combinatorial optimization), systems programming, finance
Xavier Gillard
Featured Dioxus projects on how to build clean user interfaces in Rust

Example projects with Dioxus This repository holds the code for a variety of example projects built with Dioxus. Each project has information on how t

Dioxus 189 Jan 8, 2023
A traditional web forum built in Rust with modern technology to be fast, secure, scalable, and stable.

Volksforo A traditional web forum built in Rust with modern technology to be fast, secure, scalable, and stable. Stack Rust actix-web askama ScyllaDB

Josh 5 Mar 21, 2023
Blazing fast, memory safe & modern Linux package manager written in Rust.

paket Blazing fast, memory safe & modern Linux package manager written in Rust. Roadmap Version: 0.1 Paket.toml file parsing. (#1, #2) CLI handling (p

null 4 Oct 19, 2023
The Devils' Programming Language (Quantum Programming Language)

devilslang has roots in Scheme and ML-flavored languages: it's the culmination of everything I expect from a programming language, including the desire to keep everything as minimalistic and concise as possible. At its core, devilslang is lambda-calculus with pattern-matching, structural types, fiber-based concurrency, and syntactic extension.

Devils' Language 2 Aug 26, 2022
Modern Rust utility library delivering modularity, performance & extras; or simply Rust version of Lodash

Lorust - API Documentation Lorust is the Rust version of Lodash, which is a modern Javascript utilty library delivering modularity, performance & extr

Imamuzzaki Abu Salam 2 Jul 9, 2023
A gitweb/cgit-like interface for the modern age

rgit See it in action! A gitweb/cgit-like interface for the modern age. Written in Rust using Axum, git2, Askama and Sled. Sled is used to store all m

jordan 14 Apr 8, 2023
Rust implementation of µKanren, a featherweight relational programming language.

µKanren-rs This is a Rust implementation of µKanren, a featherweight relational programming language. See the original Scheme implementation here for

Eric Zhang 99 Dec 8, 2022
fast rust implementation of online nonnegative matrix factorization as laid out in the paper "detect and track latent factors with online nonnegative matrix factorization"

ONMF status: early work in progress. still figuring this out. code still somewhat messy. api still in flux. fast rust implementation of online nonnega

null 2 Apr 10, 2020
A repository for showcasing my knowledge of the Rust programming language, and continuing to learn the language.

Learning Rust I started learning the Rust programming language before using GitHub, but increased its usage afterwards. I have found it to be a fast a

Sean P. Myrick V19.1.7.2 2 Nov 8, 2022
A simple programming language for something between C and Rust.

inuc inuc is a systems programming language that is something between C and Rust. Features : [] Strong , static typing (type inference not a priority

Sagnik Chatterjee 1 Feb 7, 2022