Next: Constraints: Representation and Solving
Up: What is Constraint (Logic)
Previous: Introduction
Subsections
As with any other computational approach, all problems are amenable to
be tackled with C(L)P; notwithstanding, there are some types of
problems which can be solved with comparatively little effort using
C(L)P based tools. Those applications share some general
characteristics:
- No general, efficient algorithms exist (NP-completeness):
specific techniques / heuristics must be used. These are usually
problems with a heavy combinatorial part, and enumerating solutions
is often impractical altogether. A fast program using usual
programming paradigms is often too hard and complicated to produce,
and normally it is so tied to the particular problem that adapting
it to a related problem is not easy.
- The problem specification has a dynamic component: it should be
easy to change programs rapidly to adapt. This has points in common
with the previous item: C(L)P tools have builtin algorithms which
have been tuned to show good behavior in a variety of scenarios, so
updating the program to new conditions amounts to changing the
setting up of the equations.
- Decision support required: either automatically in the program
or in cooperation with the user. Many decisions can be encoded in
mathematical formulae, which appear as rules and which are handled
by the internal solvers, so (although, of course, not always) there
is no need to program explicit decision trees.
Among the applications with these characteristics, the following may
be cited: planning, scheduling, resource allocation, logistics, circuit design and verification, finite state machines, financial decision making, transportation, spatial databases, etc.
Let us review some approaches to solving problems with the
aforementioned characteristics:
- Operations Research
- systems, and also genetic algorithms,
simulated annealing, etc., have a medium development effort, since
most of the core technique (e.g., the solving algorithms themselves)
are already coded an optimized, so the problem has only to be
modeled and fed into the system. They have the drawback of being
not flexible (equations cannot be updated dynamically), and
heuristic search of solutions is not always easy to include in the
problem, or the modification according to the desires of the user.
- Conventional programs
- can potentially give the most efficient
solution, but this efficiency comes at a high cost: reaching a
solution needs a uphill development phase, in which all
solving--not only the particular problem conditions--has to be
explicitly described; usually the solving/search part of the problem
is tailored for the particular application (which accounts for the
high performance of the program), which in turn makes the program
not amenable to be adapted to other scenarios, even related
ones. Success in this approach also requires a deep knowledge of
constraint solving algorithms, which in CLP systems is built in.
- Rule-based systems
- receive a good rate in heuristic
possibilities, but on the other hand they lack constraint solving
capabilities, and an algorithmic style is difficult to embed.
- Constraint-based approaches
- especially when combined with Logic
Programming, try to combine the best of all the previous points.
Not only constraint solving is included as a part of the systems,
but algorithmic components are provided for being used when needed
(e.g., in the cases in which parts of a problem can be worked out
more advantageously using an explicit algorithm). Also, this
algorithmic part interacts with the constraint solving part by
creating dynamically the equations to be solved, and communicating
the solutions by means of the variables of the language. Also,
rules as means of expressing heuristics are available when using
logic programming-based constraint tools.
Since usual programming techniques are commonly well understood, we
will review the tradeoffs between using Operation Research and
Constraint Programming approaches:
OR is a good approach when the problems to be
solved have some specific characteristics:
- A good degree of staticity in the problem to be solved: the only
differences among runs of the program are some coefficients which
can be easily changed or tuned, and that in no way affect the
modeling of the problem (which is the most difficult part to
change).
- Can be expressed using classical, well-known OR models. This
makes good, efficient algorithms available, and guidelines and
examples for modeling the problem clear and well understood.
- The size of the problem (usually measured in the number of
variables needed) is very large. If well suited OR methods are
available, then probably they will be highly optimized, and then
large problems could be solved within a reasonable amount of time.
CP has short development time, flexibility,
and good efficiency as main advantages:
- Fast prototyping is easy with CP; preliminary models of the
problem, often working correctly as reduced versions of the final
program are fast to build. The program evolves through successive
refinements, in which experiments to find the best approach can be
performed.
- Flexibility, adaptability, and maintainability are also strong
points in favor of constraint programming. Due to the dynamic
equation set up, the code tends to be adaptable, easy to change,
and to maintain: conditions are not encoded directly in the
equations, but rather in the way they are created.
- The performance of CP systems is good: in fact, internal solving
algorithms are usually very optimized (in most cases they are
inherited from O.R.), and can deal with sizeable problems exhibiting
a reasonably good performance. The fact that prototyping is fast
also adds to the global performance of the approach, and since
successive refinements are used to reach to a solution, there is no
need to perform a complete rewriting of the code to obtain a
``robust'' production program.
Next: Constraints: Representation and Solving
Up: What is Constraint (Logic)
Previous: Introduction
MCL
1998-12-03