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.
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.
Description of book, Academic Press, release 1993: programs from book.
Description of book, MIT Press, release March 1998: programs from book, slides for courses for use with book.
Java applet that solves non-linear real arithmetic constraints.
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.
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 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.
Covering all aspects of computing with constraints; on paper or online; fee required.
For incremental dataflow constraint solver, implemented in varied languages, each in a subdirectory named after the language: C DEC, C SUN4; Common Lisp, Smalltalk.
Efficient, incremental local propagation constraint solver. Like most local propagation algorithms, it cannot accommodate cyclic constraints. University of Washington site.
Home of Explanation-based Constraint Programming. Definitions, applications, libraries, links.
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.
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.
Personal page of Garnet inventor and lead researcher. Describes Garnet motives, rationale.
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.
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]
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.
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.
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.
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.
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.
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.
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.
2001 November 26 - December 1, Paphos, Cyprus.
Free, reusable iterative optimization library for combinatorial problems with fuzzy constraints. GNU LGPL.
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.
Thanks to DMOZ, which built a great web directory for nearly two decades and freely shared it with the web. About us