pyconstraints

A simple constraints satisfaction solver
Download

pyconstraints Ranking & Summary

Advertisement

  • Rating:
  • License:
  • BSD License
  • Price:
  • FREE
  • Publisher Name:
  • Jeff Hui
  • Publisher web site:
  • http://jeffhui.net

pyconstraints Tags


pyconstraints Description

pyconstraints is a simple, constraints satisfaction problem solver used for the YACS course scheduler project.UsageThe Problem is the primary interface: >>> from pyconstraints import ProblemAnd then specify your problem to solve with various constraints: >>> p = Problem() >>> p.add_variable('x', range(4)) # variable-name, domain >>> p.add_variable('y', range(4)) # give constraint function and list of variables used >>> p.add_constraint(lambda x, y: x != y, ) >>> p.add_constraint(lambda x: x % 2 == 0)Then get your solutions: >>> p.get_solutions() # => ({'y': 0, 'x': 2}, # {'y': 1, 'x': 0}, # {'y': 1, 'x': 2}, # {'y': 2, 'x': 0}, # {'y': 3, 'x': 0}, # {'y': 3, 'x': 2})Or iteratively: >>> p.iter_solutions().next() # => {'y': 0, 'x': 2}And that's it!Using Another SolverSimply pass the solver to the Problem constructor: >>> from pyconstraints import BruteForceSolver, BacktrackingSolver >>> p = Problem(BacktrackingSolver()) # BruteForceSolver is defaultBecause the BruteForceSolver uses itertools, there may be cases where it is faster than the BacktrackingSolver.Writing Your Own SolverFor convinence, there is a ``pyconstraints.SolverInterface`` Abstract-Base Class if you want toimplement all the features manually: @abstractproperty def solutions_seen(self): "Returns the number of solutions currently seen by the solver." @abstractproperty def solutions_at_points(self): """Returns a dictionary of {iteration_index: solution} of all known solutions while iterating. """ @abstractmethod def set_conditions(self, variables, constraints): """Called by the Problem class to assign the variables and constraints for the problem. variables = {variable-name: list-of-domain-values} constraints = """ @abstractmethod def restore_point(self, starting_point=None): "Restores the iteration state to a given starting point." @abstractmethod def save_point(self): """Returns data to indicate a way to restore to the current iteration point. """ @abstractmethod def __iter__(self): "Yields solutions."But for convinence, you can inherit from the ``pyconstraints.SolverBase`` class which provides a primitive implementation for all the interface methods except for ``__iter__`` and ``set_conditions``.Product's homepage


pyconstraints Related Software