Socket
Socket
Sign inDemoInstall

consys-solver

Package Overview
Dependencies
1
Maintainers
3
Versions
16
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    consys-solver

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


Version published
Maintainers
3
Created

Readme

Source

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.

Installation

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;
});
personConstraints.addConstraints([
  {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);

Output:

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

Contributors

The FireboltCasters

Contributors

Keywords

FAQs

Last updated on 24 Sep 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc