3

プログラムを考えてみましょう:

:- table cost(+, min).
cost(1, 0).
cost(1, 1).
cost(2, 1).

cost(I, C).結果が I = 1、C = 0 になると予想しました。I = 2、C = 1 - 可能なすべての入力引数と対応する最小結果。

しかし、私は1つしか得られません:

cost(I, C).
I = 1
C = 0 ?;
no

しかし、入力引数のすべての可能性を明示的に指定すると、必要なものが得られます。

( I = 1 ; I = 2 ), cost(I, C).
I = 1
C = 0 ?;
I = 2
C = 1 ?;
no

可能なすべての入力を明示的に列挙せずに、入力引数のすべての組み合わせと対応する最小結果を取得することは可能ですか?

4

2 に答える 2

2

最適化モード (最小または最大) を指定したテーブル宣言は、入力引数の組み合わせごとに 1 つの回答をテーブルに表示するようにシステムに指示します。複数の最適な回答を保存するようにシステムに指示するカーディナリティ制限を指定できます。たとえば、次のような宣言を指定できます。

:- table cost(+, min):3.

次に、システムは入力ごとに、最適性の順に最大 3 つの最良の回答を表にします。明示的に指定されていない場合、制限は 1 と見なされます。

システムはすべての回答を保存するわけではありません。動的計画法の問題では、サブ問題に対する現在の最良の答えだけを覚えておく必要があるため、これは重要です。

周能法

于 2013-01-31T14:34:42.313 に答える
1

しばらく前に、B-Prolog のマニュアルで答えを見つけまし

質問のコードは、「テーブル コスト (+、最小)」を尊重しません。モードになり、最初の cost/2 パラメータを出力として使用しようとします。

于 2013-12-24T00:35:41.070 に答える