制約プログラミング

制約プログラミング#

  • 読み: せいやくぷろぐらみんぐ

  • 英名: Constraint Programming

いくつかの変数値を決定する問題を変数間の関係を宣言的な記述で表現するプログラミングパラダイムであり, 「・・・という制約をみたす・・・を求めよ」等の問題を一般的な形で表現することができる. 解の性質を記述するという意味でその他の手続き的なプログラミングパラダイムと大きく異なる. 制約充足問題や線形計画問題,非線形計画問題における制約もこのプログラミングパラダイムに含まれる.

一般に,制約プログラミングに基づいた言語は,問題の表現部分と解探索部分で分かれており,解探索部分は別途ライブラリ等で与えられることも多い. 制約の最小単位は述語であるため,問題は論理型プログラミング言語の自然な拡張で表現できるが(制約論理プログラミング),命令型言語では述語を表現する仕組みを提供する必要がある. 例えば,命令型言語である C++ で構築されている Nuorium Optimizer は,それ単体では述語を表現できず,解探索部分として機能している. このため Nuorium Optimizer とは別に連係する形で,モデリング言語 SIMPLE に基づく実装系 (C++SIMPLE, PySIMPLE など) を提供することで,問題の表現部分を担わせている.

関連