我正在尝试优化并找到函数的最小成本。下面的程序findall/3
用于迭代所有可能的值选项,这些选项是使用clpfd
SWI-Prolog 提供的库生成的。
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).
上面的代码已经过修改,因此它被压缩了,但满足了问题的目的。