Copyright (c) 2013 John L. Jerz

Programming with Constraints: An Introduction (Marriott, Stuckey, 1998)

Home
A Proposed Heuristic for a Computer Chess Program (John L. Jerz)
Problem Solving and the Gathering of Diagnostic Information (John L. Jerz)
A Concept of Strategy (John L. Jerz)
Books/Articles I am Reading
Quotes from References of Interest
Satire/ Play
Viva La Vida
Quotes on Thinking
Quotes on Planning
Quotes on Strategy
Quotes Concerning Problem Solving
Computer Chess
Chess Analysis
Early Computers/ New Computers
Problem Solving/ Creativity
Game Theory
Favorite Links
About Me
Additional Notes
The Case for Using Probabilistic Knowledge in a Computer Chess Program (John L. Jerz)
Resilience in Man and Machine

PWCAI.jpg

Review
"Certainly it is a worthy, comprehensive and scholarly contribution that should help open up the field at advanced undergraduate and taught-postgraduate level." -- Jonathan Bowen,The Times Higher Education Supplement, February 5, 1999

Product Description
The job of the constraint programmer is to use mathematical constraints to model real world constraints and objects. In this book, Kim Marriott and Peter Stuckey provide the first comprehensive introduction to the discipline of constraint programming and, in particular, constraint logic programming. The book covers the necessary background material from artificial intelligence, logic programming, operations research, and mathematical programming. Topics discussed range from constraint-solving techniques to programming methodologies for constraint programming languages. Because there is not yet a universally used syntax for constraint logic programming languages, the authors present the programs in a way that is independent of any existing programming language. Practical exercises cover how to use the book with a number of existing constraint languages.
 
Review by  Amit Konar (Calcutta, India)
 
This is the best book on the subject. March 26, 2000

So simple, straight forward, highly comprehensive but elegant book on this subject is rarely available. Most topics covered in the book are readable with almost no effort. This is due to the authors' inherent capability of presentation. The foundation of the book rests on constraint simplification and optimization (chapter 2). Definitions are clear with adequate examples. Chapter 4 to 10 deal with Constraint Logic Programming. Here the authors focus various important issues that are needed to researchers in this domain. Many applications in these chapters are highlighted to introduce the concepts. The last 2 chapters deal with constraint databases and concurrent constraint programming languages. Though it is a monograph readers of general interest in AI will find the chapters 1-4 useful and highly readable for knowing the state-of-the-art of this subject.

p.1 Constraint programming is one of the most exciting developments in programming languages of the last decade. Based on a strong theoretical foundation, it is attracting widespread commercial interest and is now becoming the method of choice for modelling many types of optimization problems, in particular, those involving heterogeneous constraints and combinatorial search. Not surprisingly, therefore, constraint programming has recently been identified by the ACM (Association for Computing Machinery) as one of the strategic directions in computing research.
 
p.1 traditional programming languages, including object oriented languages, provide little support for specifying relationships or constraints among programmer-defined entities.
 
p.2 for many applications, the crux of the problem is to model the relationships and find objects that satisfy them. For this reason, since the late 1960's, there has been interest in programming languages which allow the programmer simply to state relationships between objects.
 
p.3-4 Constraint programming has allowed us to specify the problem very naturally, and at a high level, in terms of arithmetic constraints.
 
p.4 The engineering disciplines are one area in which constraint programming has been applied with notable success. Many engineering problems are extremely well suited to constraint programming since they often involve hierarchical composition of complex systems, mathematical or Boolean models, and - especially in the case of diagnosis and design - deep rule-based reasoning... Arguably, however, the most important application of the new constraint programming languages is for tackling difficult multi-faceted combinatorial problems, such as those encountered in job scheduling, timetabling and routing. These kinds of problems are very difficult to express and solve in conventional programming languages. This is because they require searching through a possibly exponentially sized solution space in order to find a good or optimal solution to the problem. To obtain reasonable efficiency, the constraints must be used to prune the search space.
 
p.6 A striking feature of constraint programming is its multi-disciplinary nature. It embraces facets of mathematics, traditional computer science and artificial intelligence. Constraint programming draws on work in constraint solving algorithms from operations research, numerical computing and on constraint solving techniques used in constraint satisfaction problems, an important area of artificial intelligence.
 
p.11-12 Constraint programming is built upon constraints and constraint solving... The most important operation is to determine if a constraint is satisfiable. The second operation, simplification, rewrites a constraint in a form which makes its information more apparent. The third operation, optimization, finds a solution which is 'best' according to some criterion... Constraints are a mathematical formalization of relationships which can hold between objects... Real world constraints and objects can be modelled by these idealized mathematical constraints. Building such models is the job of the constraint programmer... Constraints occur in all sorts of everyday reasoning.
 
p.41 Constraints are powerful tools for modelling many real-world problems.
 
p.118 Both of these algorithms for integer optimization are naive in the sense that they only use the objective function to eliminate solutions which are not better than the best solution already discovered. In particular, they do not use the objective function to direct the search to that part of the solution space in which it is likely to find better solutions. This contrasts to optimization algorithms for the real numbers, such as the simplex algorithm (see Section 2.4), in which the objective function is used to direct the search.
 
p.167 Modelling is at the heart of constraint programming... the programmer can simply state the constraints and leave the constraint solving to the underlying system... The primary role of the constraint programmer is simply to model the problem... Clearly, before starting to model the problem, the programmer needs to know what are the primitive constraints available to them, since ultimately the problem must be described in terms of these primitives.
 
p.181 Modelling in a CLP language is quite different to programming in a traditional programming language and requires an ability to reason about a problem in terms of constraints. At first, this may seem both difficult and unintuitive. However, because the resulting program uses constraints rather than Boolean tests and assignments, it is considerably more flexible than a program written in a conventional language, and may be used to answer a wide variety of questions... With experience, a constraint programmer is able to immediately define their problem in constraint terms. The most important words of advice are - practice, practice, and then practice some more.
 
p.193 Not only can we make use of data structures to store fixed values, we can also use them to store variables to represent data that is presently unknown.
 
p.208 One of the most interesting features of CLP languages is that the same mechanism, constraints, provides both control and data structures.
 
p.256-257 As this example demonstrates, constrain and generate is almost always preferable to generate and test... When possible, the constraint programmer should make use of these complex primitive constraints. One reason is that they often allow a succinct description of the problem. A second, more important reason, is that they will, usually, lead to a more efficient program since the constraint solver provides specialized propagation rules for these constraints which will be more effective at domain pruning than those for the equivalent 'simple' primitive constraints.
 
p.266,269 Ideally, the constraint programmer wishes to find a model which can be efficiently evaluated by the solver in their CLP system. However, reasoning about efficiency is quite difficult... Determining the relative efficiency of different models is a difficult problem and one which relies upon an understanding of the underlying constraint solver. The best model will be the one in which information is propagated earliest. This often means that the more direct the mapping from the problem into the primitive constraints in the program, the better the model. Another guideline is that the fewer the variables the better, so long as propagation of information is similar.
 
p.270 Efficiency is not the only criteria by which to compare models. Flexibility is also an important issue. It is unusual for an application to remain static. Often there will be a need to extend the program to model constraints which were not part of the problem's original formulation. Flexibility measures how easy it is to express these additional constraints in the model.
 
p.278 One of the more difficult tasks of the constraint programmer is to understand the tradeoff between the cost of adding redundant constraints and the reduction in search space they cause.

Enter supporting content here