Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Constraint Solving Problem resolver for Python

License

NotificationsYou must be signed in to change notification settings

python-constraint/python-constraint

 
 

Repository files navigation

Build StatusCode HealthCode Coverage

python-constraint

Introduction

The Python constraint module offers solvers forConstraint Satisfaction Problems (CSPs) over finite domains in simple and pure Python. CSP is class of problems which may be represented in terms of variables (a, b, ...), domains (a in [1, 2, 3], ...), and constraints (a < b, ...).

Examples

Basics

This interactive Python session demonstrates the module basic operation:

>>>fromconstraintimport*>>>problem=Problem()>>>problem.addVariable("a", [1,2,3])>>>problem.addVariable("b", [4,5,6])>>>problem.getSolutions()[{'a':3,'b':6}, {'a':3,'b':5}, {'a':3,'b':4}, {'a':2,'b':6}, {'a':2,'b':5}, {'a':2,'b':4}, {'a':1,'b':6}, {'a':1,'b':5}, {'a':1,'b':4}]>>>problem.addConstraint(lambdaa,b:a*2==b,                          ("a","b"))>>>problem.getSolutions()[{'a':3,'b':6}, {'a':2,'b':4}]>>>problem=Problem()>>>problem.addVariables(["a","b"], [1,2,3])>>>problem.addConstraint(AllDifferentConstraint())>>>problem.getSolutions()[{'a':3,'b':2}, {'a':3,'b':1}, {'a':2,'b':3}, {'a':2,'b':1}, {'a':1,'b':2}, {'a':1,'b':3}]

Rooks problem

The following example solves the classical Eight Rooks problem:

>>>problem=Problem()>>>numpieces=8>>>cols=range(numpieces)>>>rows=range(numpieces)>>>problem.addVariables(cols,rows)>>>forcol1incols:...forcol2incols:...ifcol1<col2:...problem.addConstraint(lambdarow1,row2:row1!=row2,...                                   (col1,col2))>>>solutions=problem.getSolutions()>>>solutions>>>solutions[{0:7,1:6,2:5,3:4,4:3,5:2,6:1,7:0}, {0:7,1:6,2:5,3:4,4:3,5:2,6:0,7:1}, {0:7,1:6,2:5,3:4,4:3,5:1,6:2,7:0}, {0:7,1:6,2:5,3:4,4:3,5:1,6:0,7:2}, ... {0:7,1:5,2:3,3:6,4:2,5:1,6:4,7:0}, {0:7,1:5,2:3,3:6,4:1,5:2,6:0,7:4}, {0:7,1:5,2:3,3:6,4:1,5:2,6:4,7:0}, {0:7,1:5,2:3,3:6,4:1,5:4,6:2,7:0}, {0:7,1:5,2:3,3:6,4:1,5:4,6:0,7:2}, ...]

Magic squares

This example solves a 4x4 magic square:

>>>problem=Problem()>>>problem.addVariables(range(0,16),range(1,16+1))>>>problem.addConstraint(AllDifferentConstraint(),range(0,16))>>>problem.addConstraint(ExactSumConstraint(34), [0,5,10,15])>>>problem.addConstraint(ExactSumConstraint(34), [3,6,9,12])>>>forrowinrange(4):...problem.addConstraint(ExactSumConstraint(34),                              [row*4+iforiinrange(4)])>>>forcolinrange(4):...problem.addConstraint(ExactSumConstraint(34),                              [col+4*iforiinrange(4)])>>>solutions=problem.getSolutions()

Features

The following solvers are available:

  • Backtracking solver
  • Recursive backtracking solver
  • Minimum conflicts solver

Predefined constraint types currently available:

  • FunctionConstraint
  • AllDifferentConstraint
  • AllEqualConstraint
  • ExactSumConstraint
  • MaxSumConstraint
  • MinSumConstraint
  • InSetConstraint
  • NotInSetConstraint
  • SomeInSetConstraint
  • SomeNotInSetConstraint

API documentation

Documentation for the module is available at:http://labix.org/doc/constraint/

Download and install

$ pip install python-constraint

Roadmap

This GitHub organization and repository is a global effort to help tomaintain python-constraint which was written by Gustavo Niemeyerand originaly located athttps://labix.org/python-constraint

  • Create some unit tests - DONE
  • Enable continuous integration - DONE
  • Port to Python 3 (Python 2 being also supported) - DONE
  • Respect Style Guide for Python Code (PEP8) - DONE
  • Improve code coverage writting more unit tests - ToDo
  • Move doc to Sphinx or MkDocs -https://readthedocs.org/ - ToDo

Contact

But it's probably better toopen an issue.


[8]ページ先頭

©2009-2025 Movatter.jp