npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

consys-solver

v1.0.13

Published

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

Downloads

24

Readme

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