関数の最小コストを最適化して見つけようとしています。以下のプログラムは、SWI-Prolog が提供するライブラリfindall/3
を使用して生成された値のすべての可能なオプションを反復するために使用します。clpfd
以下に、このプログラムを使用して生成された値がいくつかありCost
、リストにまとめられています。min_list/2
最小値を取得するには、使用可能な述語を使用するだけでよいことを知っています。ただし、私が望むのは、プログラムが他のオプションを計算しているときに、現在最小である特定の値を見つけたら、その値が最小値よりも大きいことが判明した場合、リストに追加されないことです。
したがって、基本的には、プログラムによって生成される最小値を単純に説明できるように、プログラムを最適化したいのです。
optimise(input, arguments, Cost):-
findall(Cost, some_predicate(input, arguments, Cost), List).
some_predicate(input, arguments, Cost):-
Option in input..arguments, label(Option),
find_data(Option, Value),
find_cost(Value, Cost).
上記のコードは、要約されているが質問の目的を満たすように変更されています。