MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
これは、単純なプロジェクトに関するスケジューリングです。
ここでは、ある作業は他の作業が完了するかどうかのみに関係して開始さ
れます。また、「重大な問題」かどうかの分析を行います。つまり、その部分の作業
が遅れた場合、プロジェクト全体の予定時間内での終了が危ぶまれるかどうかとの分
析を行います。
A-G までの作業を含むプロジェクトを考えます。それぞれの作業は、完了に必要な時
間があり、次の図に示されるように、他の作業の完了に依存しています。
この問題では以下のようにプログラムを書くことができます。
:- import(const_domain).
program :-
Jobs = [A,B,C,D,E,F,G],
Durations = [Da,Db,Dc,Dd,De,Df,Dg],
Durations = [ 4, 2, 4, 3, 4, 4, 3],
A ?>= 0 + Da, D ?>= B + Dd, F ?>= D + Df,
B ?>= A + Db, D ?>= C + Dd, G ?>= F + Dg,
C ?>= A + Dc, E ?>= C + De, G ?>= E + Dg,
label(Jobs), print(Jobs).
[user] ?-
program.
[4,6,8,11,12,15,18]
yes
IF/Prologのプログラムでは、A-Gまでの作業間の依存関係は、数式として表されます。例えば、D ?>= B + Dd は、「Dの作業は、Bの作業の開始および作業時間後に完了する」と読みます。
?>=/2の制約自体は、変数の解決定を活性化しません。制約は、解決に使われる述語に引き渡され、問題全体が解決されます。label/1の述語が、リストされた作業のすべての変数に対する値を見つけます。
上の例では、label/1は、変数Aに対する一つの値が存在することを決定し、Aの開始時間と継続時間を決定することができます。このあと、「制約の伝達」によりこれ以外の値が計算されます。
|