TypeScript icon, indicating that this package has built-in type declarations

    1.0.12 • Public • Published

    consys-solver - find feasible model assignments

    npm package MIT last commit downloads week downloads total size dependencies

    Npm publish Build status Quality Gate Bugs Coverage Code Smells Duplicated Lines (%) Maintainability Rating Reliability Rating Security Rating Technical Debt Vulnerabilities

    consys-solver is a tool to find feasible model assignments for consys constraint systems.

    • Easy to integrate: This solver acts as a decorator, it just requires an instance of an existing constraint system to work.
    • Preferred values: Assign weights to domain values to increase the likelyhood of a solution with those values.
    • Configurable: In order to optimize the search process, the solver can be configured to get the best results.

    The implementation is based on a modified min-conflicts heuristic, where variables are not chosen randomly, but with a weighted probability determined by the number of occurrences in the constraint set. In addition, a preference factor is considered when calculating the score of a model, which allows the user to prefer certain values of a domain.


    consys-solver is distributed via npm, it can be installed using the following command:

    npm install consys-solver

    Quick start

    Once installed, a solver instance can be instantiated for an existing constraint system. Here is an example:

    import {ConstraintSystem} from 'consys';
    import {Solver, Set, Range} from 'consys-solver';
    type Person = {name: string; age: number};
    // Create a simple constraint system for a Person model
    const personConstraints = new ConstraintSystem<Person, {}>();
    personConstraints.addFunction('LENGTH', (str: string) => {
      return str.length;
      {constraint: 'ALWAYS: LENGTH($name) < 6'},
      {constraint: 'ALWAYS: $age > 21 && $age < 42'},
    // Now, we can create a solver instance
    const solver = new Solver(personConstraints);
    let names = ['Mike', 'Peter', 'Lara', 'Isabelle'];
    let personDomains = {
      // A set with higher preference for long names
      name: new Set(names, (name: string) => {
        return name.length;
      // Number range with preference for higher age
      age: new Range(0, 100, 1, (age: number) => {
        return age / 10;
    // Finally, search for one solution
    let solution = solver.find(1, personDomains, {});
    console.log('Solution: ', solution);


    >> Solution:  [ { name: 'Peter', age: 41 } ]


    The FireboltCasters



    npm i consys-solver

    DownloadsWeekly Downloads






    Unpacked Size

    49.7 kB

    Total Files


    Last publish


    • fireboltcaster
    • nilsbaumgartner1994
    • sdroppelmann