制約プログラミング
制約プログラミングにおける制約は何らかの特定の領域に関するものであることが多い。制約プログラミングでの一般的な領域としては次のものがある:
ブーリアン領域: 真/偽の制約だけが適用される
整数領域、有理数領域
線形領域: 線形関数のみを記述し、解析する(非線形問題を扱う手法もある)
有限領域: 有限集合について制約を定義する
混合領域: 上記のうち2つ以上を同時に扱う
このうち、有限領域が最も成功している。オペレーションズリサーチなどの分野では、制約プログラミングと言えば有限領域の制約プログラミングを指す。
有限領域の制約プログラミングは制約充足問題を解くのに便利であり、局所整合やその近似に基づいているものが多い。
有限領域の制約の記法はホスト言語によって異なる。以下ではPrologで制約論理プログラミングを使って古典的な覆面算 SEND+MORE=MONEY を解くプログラムを示す:
インタプリタはパズルの各文字に対応して変数を生成する。