HOME | English Version

last update: 26 October 2007


制約プログラミングとは

制約プログラミングって何?

制約プログラミングは、

ことを目指すプログラミング・パラダイムのことだと言えます。
重要な点は、制約による問題の記述とその問題を解く手順・方法とを区別すること です。制約による問題の記述は「宣言的」な性質を持ちます。制約の重要な特徴と して、「処理の方向が固定されない」点が挙げられますが、これは「宣言性」という 性質を徹底化したものと考えることができます。
一方、問題解決の方法は、さまざまな方法がありえるでしょうが、狭義での制約 プログラミングでは、問題に存在する制約を上手に利用して効率よく答を見つける 技法が研究の対象となっているようです。制約を充たす解を求めるプログラムの ことを制約解消系、制約ソルバーと呼びます。
実際の制約解消のアルゴリズムは、制約の種類(どのような変数に対する どのような制約か)に依存して異なります。

何が制約プログラミングではないのか?--関連分野

上記のような定義では、「どのように解くか」について、具体的なアルゴリズムが 指定されているわけではありませんから、広義にとれば非常に多くの領域が含まれ ます。制約充足問題(CSP)に対する解法としては、思い付くままに挙げても、

など、数多くの手法が考えられます。 また、広義での制約パラダイムということであれば、 などを思い浮かべることもできるでしょう。
何が制約プログラミングか、何がそうでないかについては、色々な立場があると思われ ますし、厳密な定義を行うことに意味があるとは思えません。
けれども、制約プログラミングのカバーする領域の「中心」にあたる部分については、 概ね、以下のように言えるのではないでしょうか? 問題の計算領域を問わずに制約として扱う、というパラダイム的な側面は特に重要 だと思われます。
もちろん具体的にはそのうちの特定領域のみに絞った研究や、応用がなされますし、 ある領域については関連領域で優れた手法が提案されている場合には、そうした手法を 取り込む枠組みとして、制約に基づくパラダイムを考えることができるからです。
その意味で、広義での制約プログラミングは、これまで様々な分野で研究されてきた 手法を関連付ける結節点のような役割を果たしているといえると思います。
従って、本サイトでは、狭義の制約プログラミングのみではなく、可能な限り、広義の 制約充足問題(CSP)のパラダイム、制約パラダイムについても扱っていく方針です。

制約論理プログラミングという言葉を聞いたことはあるけど、、、

制約論理プログラミング(Constraint Logic Programming)というのは、上述の ような制約プログラミングを論理プログラミングの拡張として実現したものです。 論理プログラミングは、制約プログラミングと多くの特徴を共有しており、 制約プログラミングの一部であると言ってもよいほどです。実際、論理プログラミング 言語の代表とされているPrologの処理系の多くは、現在、制約ソルバーを備えて いますし、必ずしもPrologをベースとしていなくても、多くの制約プログラミングの ためのシステムは、論理プログラミングの考え方に基づいています。狭い意味での 制約プログラミングは、制約論理プログラミングと同じものと言ってもよいと 思います。

どのような特徴があるの?

制約プログラミングには、以下のような特徴があると言えるでしょう。

宣言性は、制約プログラミングの最も大きな特徴です。これは問題の定義と解法を分離することに関係します。関数プログラミングも、論理プログラミングも宣言性という特徴は持っていますが、関数プログラミングにおいては、情報の流れは決まっています。また、論理プログラミング言語も実装上は情報の流れが決まっていることがありました。勿論、情報の流れが固定できることは、多くの場合、問題解決の効率を考えると有利です。また、いつも双方向性が可能であるとは限りません。しかしながら、宣言性という点では、制約プログラミングは最も徹底的であると言えるでしょう。

更に、制約を利用することにより探索の効率化を図るという点で、問題解決の効率にも配慮しているといえます。ただし、制約される対象領域によって制約解消の定義も解法も異なるため、制約ソルバーは対象領域毎に用意する必要があります。逆に見れば、いろいろな効率のよい解法を、制約プログラミングの枠組みの中に集めることができるため、非常に柔軟でオープンであるとも考えられます。

プロトタイピングが容易であるとか、開発生産性が高いという特徴は、その多くを宣言性に負っているといえます。また、制約をオブジェクト間の関係と考えれば、オブジェクト指向パラダイムとの親和性が高いことは予想されますが、実際、多くの制約処理系はオブジェクト指向になっています。

実用になるの?

制約プログラミングは、様々な実用的なシステムを開発するための基礎技術の一つ であり、様々な分野への適用が可能です。商用のシステムが販売されてから10年ほどに なりますが、その間に数多くの実用システムが制約プログラミングに基づいて開発 され、運用されてきました。
どのような分野に適用されてきたかについては応用分野を、 実際の事例については応用事例をご覧ください。

どういう点が優れているの?

特徴として述べた項目と重複しますが、制約プログラミングの長所としてあげられるのは以下のような点です。

欠点は?

一方、制約プログラミングの欠点として挙げられるのは以下のような点です。

なぜ流行らないの?

すでに述べたように、制約プログラミングには長所も短所もあり、必ずしも良いことづくめではありませんが、それにしても、制約プログラミングが流行しないのはなぜなのでしょう?これについては、以下のように考えられます。

実際、制約プログラミングが実用化された初期の時代には、制約プログラミングは最先端の技術であるという側面を強調した宣伝がされていたように思われますし、それに応じて商用のツールも非常に高価なもので、利用できるのは大規模なプロジェクトにかぎられていました。

しかし、今や時代が変わり、以下のような状況になっています。

まだ、制約プログラミング技術は若く、条件が整ってきたこれからが本格的な実用の時代といえるのではないでしょうか?


HOME | TOP
Copyright(C) 2001-2007 by NTT DATA SEKISUI SYSTEMS CORPORATION All rights reserved.