# Directory of Constraint Resources

Constraint programming was invented, or discovered, in the early 1960s. A main idea in constraint programming is to tell a computer what you want without specifying an exact procedure and/or process to follow. Constraints are relations that must be satisfied; examples: a line must remain horizontal, a component in an electrical circuit simulation must obey Ohm's Law, one column in a web page table must be at least twice as wide as another. Constraints have been used in many types of languages and systems, especially in user interface toolkits, planning and scheduling, and simulation. It is often easy to write constraints where the answer is hard to compute. Example: In constraint programming, X * X = 2 will find X even if you don't tell a program exactly how to do it. For this, it solves by iteratively changing X and converging on an answer, without knowing how to do the square root algorithm; this was Isaac Newton's method for finding square roots. In programming and mathematics, constraints can be algebraic or logical (Boolean): often an equality or inequality relation, between the values of one or more variables, often between two; example: x > 2 is a constraint on x. Constraint satisfaction is the process of assigning values to variables so all constraints are true. In programming, constraints are relationships that are declared once, and then maintained automatically by a system. Constraints are automatically evaluated when needed, rather than needing programmers to call them when needed. They should have no side effects. Constraints can also serve as a type of inheritance. Constraint programming uses methods from mathematics, artificial intelligence, and operations research. It allows fast development, economic maintenance, and high performance. Directly representing a problem as constraints results in shorter, simpler programs, easier to understand and adapt to changing needs. On this page, languages are arranged in three groups and levels: 1) Top group: types or classes of languages. 2) Middle group: languages for which there are more than one instance of a language of this name/type, a language family. 3) Bottom group: specific languages, individual instances; there is only one language of this name/type.

## Resources in This Category

• #### A Differential Approach to Graphical Interaction

http://www.cs.wisc.edu/graphics/Papers/Gleicher/Thesis/
The ad hoc manner in which direct manipulation interfaces have been designed and implemented restricts the types of interactive controls. This dissertation presents a new approach for a systematic method to implement flexible, combinable interactive controls.

• #### Book: Foundations of Constraint Satisfaction

http://www.bracil.net/edward/FCS.html
Description of book, Academic Press, release 1993: programs from book.

• #### Book: Programming with Constraints: an Introduction

http://www.cs.mu.oz.au/~pjs/book/book.html
Description of book, MIT Press, release March 1998: programs from book, slides for courses for use with book.

• #### Brandeis Interval Arithmetic Constraint Solver

http://www.cs.brandeis.edu/~tim/Applets/IAsolver.html
Java applet that solves non-linear real arithmetic constraints.

• #### Cassowary

http://www.cs.washington.edu/research/constraints/cassowary/
Incremental constraint solving toolkit, efficiently solves systems of linear equalities, inequalities. Constraints can be requirements or preferences. Client code specifies constraints to maintain, and the solver updates constrained variables to have values that satisfy the constraints.

• #### Constraints Archive

http://4c.ucc.ie/web/archive/index.jsp
Holds comp.constraints FAQ, pages of constraint-related pointers, source code for various systems, benchmarks, directory of people interested in constraints, constraint bibliographies, collection of online papers, links. Clearly the product of much work.

• #### Constraints for the Web

http://www.cs.washington.edu/research/constraints/web/mm97.dir/
Constraints can specify desired layout of web documents, and behavior of embedded applets: 2 system architectures where author and viewer can make layout constraints, needed and optional. Final appearance of page comes from negotiation between author and viewer, via solving all the constraints.

• #### Constraints: An International Journal

http://www.springer.com/computer/artificial/journal/10601
Covering all aspects of computing with constraints; on paper or online; fee required.

• #### DeltaBlue Code Archive

ftp://ftp.cs.washington.edu/pub/constraints/code/DeltaBlue/
For incremental dataflow constraint solver, implemented in varied languages, each in a subdirectory named after the language: C DEC, C SUN4; Common Lisp, Smalltalk.

• #### DeltaBlue Constraint Solver

http://www.cs.washington.edu/research/constraints/deltablue/
Efficient, incremental local propagation constraint solver. Like most local propagation algorithms, it cannot accommodate cyclic constraints. University of Washington site.

• #### E-constraints.net

http://www.e-constraints.net/
Home of Explanation-based Constraint Programming. Definitions, applications, libraries, links.

• #### Garnet Project

http://www.cs.cmu.edu/~garnet/
Generating an Amalgam of Real-time, Novel Editors and Toolkits; developed by User Interface Software Group, Human Computer Interaction Institute, School of Computer Science, Carnegie Mellon University. Free: public domain.

• #### Garnet Toolkit FAQ

http://www.faqs.org/faqs/garnet-faq/
Frequently Asked Questions about Garnet user interface development environment for Common Lisp and X11 or Macintosh developed by User Interface Software Group, Human-Computer Interaction Institute, Carnegie Mellon University.

• #### Garnet: Brad A. Myers

http://www.cs.cmu.edu/~bam/
Personal page of Garnet inventor and lead researcher. Describes Garnet motives, rationale.

• #### Garnet: Multi-Garnet: Integrating Multi-Way Constraints with Garnet

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.6287
ResearchIndex: Constraints provide a useful mechanism to maintain relations in user interface toolkits. Garnet is a widely used user interface toolkit with high functionality, based on one way, required constraints. Multi-Garnet extends this by adding support for multi-way constraints and hierarchies.

• #### Gecode

http://www.gecode.org/
Generic Constraint Development Environment. Constraint solver implemented as C++ library. Main goals: modifiability, extensibility, speed. Features: integer and set variables, large constraint set, copying-based search. [Open Source, BSD]

• #### Guide to Constraint Programming

http://ktiml.mff.cuni.cz/~bartak/constraints/
Online tutorial/textbook for beginners to the area of constraint programming. This area is of the set of less known software technologies, but is evolving rapidly and has a growing, significant commercial interest.

• #### ICOT Free Software

ftp://ftp.icot.or.jp/ifs/
Free constraint software developed by Institute for New Generation Computer Technology (ICOT), Japan: Constraint MGTP (CMGTP) model generation theorem prover (MGTP), MGTP-G, KLIC, some cu-Prologs, and documents. FTP site.

• #### ILOG CP

http://www.ilog.com/products/cp/
Constraint-programming optimization engine, providing cutting-edge optimization technology and an optimization library for workforce scheduling, league scheduling, sequencing, configuration, dispatching and resource-allocation applications with logical constraints.

• #### MAC and Combined Heuristics: Two Reasons to Forsake FC (and CBJ?) on Hard Problems

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.4042
ResearchIndex: In the last 20 years, many algorithms and heuristics were developed to find solutions in constraint networks. Their number increased so much that it quickly became vital to compare performance to propose a small number of good methods.

• #### Natural Programming

http://www.cs.cmu.edu/~NatProg/
Attempt to make a system that is easier to learn and use than anything available to novice programmers today: HANDS: Human-centered Advances for Novice Development of Software. School of Computer Science, Carnegie Mellon University; NSF funded.

• #### Omega Project

http://www.cs.umd.edu/projects/omega/
Frameworks and algorithms for analyzing and transforming scientific programs; 2 major components: the Omega test system to manipulate sets of affine constraints over integer variables; and developing frameworks to analyze and transform programs.

• #### ResearchIndex: Kaleidoscope: A Constraint Imperative Programming Language

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.1523
The Constraint Imperative Programming CIP family of languages integrates constraints and imperative, object oriented programming. Besides merging useful features of both paradigms, such integration has synergistic effects.

• #### Seventh International Conference on Principles and Practice of Constraint Programming

http://www2.cs.ucy.ac.cy/~iclpcp01/CP01home.html
2001 November 26 - December 1, Paphos, Cyprus.

• #### StarFLIP++

http://www.dbai.tuwien.ac.at/proj/StarFLIP/
Free, reusable iterative optimization library for combinatorial problems with fuzzy constraints. GNU LGPL.

• #### ThingLabII: Constraint-based user interfaces

http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/constrnt/systems/thinglab/0.html
Supports exploration of constraint-based user interfaces; consists of a set of classes that define constraints and constrainable objects called things. Incremental constraint satisfier, module compiler, construction-set style user interface, many tools, extensible set of primitive user interface building blocks.

## Related Categories

Thanks to DMOZ, which built a great web directory for nearly two decades and freely shared it with the web. About us