Issues in Problem Modelling

## 11.2 Issues in Problem Modelling

A good formalism for problem modelling should fulfil the following criteria:

- Expressive power - Can we write a formal model of the real world problem?
- Clarity for humans - How easily can the model be written, read, understood or modified?
- Solvability for computers - Are there good known methods to solve it?

Higher-level models are typically closer to the user and close to the problem and therefore easier to understand and to trust, easier to debug and to verify, and easier to modify when customers change their mind. On the other hand, it is not necessarily easy to see how they can be solved, because high-level models contain high-level notions (e.g. sets, tasks) and heterogeneous constraints.
The constraint programming approach also addresses one of the classical sources of error in application development with traditional programming languages: the transition from a formal description of the problem to the final program that solves it. The question is: Can the final program be trusted? The Constraint (Logic) Programming solution is to

- Keep the initial formal model as part of the final program
- Enhance rather than rewrite

The process of enhancing the initial formal model involves for example

- Adding control annotations, e.g. algorithmic information or heuristic information.
- Transformation: Mapping high-level (problem) constraints into low-level (solver) constraints, possibly exploiting multiple, redundant mappings.

There are many other approaches to problem modelling software. The following is a brief comparison:

Formal specification languages (e.g. Z, VDM)
  More expressive power than ECLiPSe, but not executable
Mathematical modelling languages (e.g. OPL, AMPL)
  Similar to ECLiPSe, but usually limited expressive power, e.g. fixed set of constraints.
Mainstream programming languages (e.g. C++ plus solver library)
  Variables and constraints are "aliens" in the language. Specification is mixed with procedural control.
Other CLP/high-level languages (e.g. CHIP)
  Most similar to ECLiPSe. Less support for hybrid problem solving. Harder to define new constraints.