|
制約論理プログラミング(せいやくろんりプログラミング、)は制約プログラミングの一種で、制約という問題表現・解決の考え方を導入することによって論理プログラミングを拡張したプログラミングパラダイムである。論理プログラミングの持っている宣言的な表現力に制約の考え方を導入し、より一般化したものとも言うことができる。 == 概要 == 問題の対象間の関係を''制約''(例えば V=I )という形で宣言的に記述する制約プログラミングの考え方は、述語という形で関係を宣言的に記述する論理プログラミングと多くの特徴を共有している。理論的に、論理プログラミングはエルブラン領域(Herbrand universe)という有限木で表される領域上でのユニフィケーションによる等号制約を扱う制約プログラミングと見なすことができ、制約論理プログラミングはその自然な拡張となっている。論理プログラミングの代表的な言語であるProlog処理系の多くには、何らかの制約論理プログラミングの機能やライブラリが用意されている。制約論理プログラミングの応用分野は、スケジューリング、要員計画・輸送・資源割り当て、アナログ回路設計、トレーディングなどさまざまなものがある。 一般に、制約論理プログラムはPrologなどの論理プログラムと同様の形式で記述するが、''節''(clause)のボディ部に制約を含めることができる。以下の例では V = I などが制約である。手続型言語の代入文とは異なり、これらの式は関係を表現している。例えば、上記のプログラムで ?- parallel_register(50,I,10,25). を実行すると I = 7 が結果として返る。プログラムの実行は、論理プログラムと同じように、規則が順次呼び出されることで行われる。途中で現れた制約(例えば I1+I2=I )は、いったんシステム内部の''制約ストア''と呼ばれる領域に格納され、順次内部の制約評価系でより単純な形に簡約化が行われる(例えば I1+I2=I & 50=I1 )。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「制約論理プログラミング」の詳細全文を読む スポンサード リンク
|