Why functional programming matters
The Computer Journal - Special issue on Lazy functional programming
An introduction to functional programming
An introduction to functional programming
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Structuring depth-first search algorithms in Haskell
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A high-level derivation of global search algorithms (with constraint propagation)
Science of Computer Programming - Special issue: on formal specifications: foundations, methods, tools and applications: selected papers from the FMTA '95 conference (29–31 May 1995, Konstancin n. Warsaw, Poland)
Purely functional data structures
Purely functional data structures
The OPL optimization programming language
The OPL optimization programming language
Encodings of non-binary constraint satisfaction problems
AAAI '99/IAAI '99 Proceedings of the sixteenth national conference on Artificial intelligence and the eleventh Innovative applications of artificial intelligence conference innovative applications of artificial intelligence
Search algorithms in type theory
Theoretical Computer Science - Special issue on proof-search in type-theoretic languages
Representation Selection for Constraint Satisfaction: A Case Study Using n-Queens
IEEE Expert: Intelligent Systems and Their Applications
A Generic Program for Sequential Decision Processes
PLILPS '95 Proceedings of the 7th International Symposium on Programming Languages: Implementations, Logics and Programs
On the Forward Checking Algorithm
CP '95 Proceedings of the First International Conference on Principles and Practice of Constraint Programming
Dynamic Variable Ordering in CSPs
CP '95 Proceedings of the First International Conference on Principles and Practice of Constraint Programming
Algorithms and heuristics for constraint satisfaction problems
Algorithms and heuristics for constraint satisfaction problems
AAAI'96 Proceedings of the thirteenth national conference on Artificial intelligence - Volume 1
Purely functional lazy non-deterministic programming
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
We describe a unified, lazy, declarative framework for solving constraint satisfaction problems, an important subclass of combinatorial search problems. These problems are both practically significant and computationally hard. Finding solutions involves combining good general-purpose search algorithms with problem-specific heuristics. Conventional imperative algorithms are usually implemented and presented monolithically, which makes them hard to understand and reuse, even though new algorithms often are combinations of simpler ones. Lazy functional languages, such as Haskell, encourage modular structuring of search algorithms by separating the generation and testing of potential solutions into distinct functions communicating through an explicit, lazy intermediate data structure. But only relatively simple search algorithms have been treated this way in the past. Our framework uses a generic generation and pruning algorithm parameterized by a labeling function that annotates search trees with conflict sets. We show that many advanced imperative search algorithms, including conflict-directed backjumping, backmarking, minimal forward checking, and fail-first dynamic variable ordering, can be obtained by suitable instantiation of the labeling function. More importantly, arbitrary combinations of these algorithms can be built by simply composing their labeling functions. Our modular algorithms are as efficient as the monolithic imperative algorithms in the sense that they make the same number of consistency checks, and most of our algorithms are within a constant factor of their imperative counterparts in runtime and space usage. We believe our framework is especially well-suited for experimenting to find good combinations of algorithms for specific problems.