【发布时间】:2013-07-19 15:19:55
【问题描述】:
我正在尝试优化并找到函数的最小成本。下面的程序使用findall/3 迭代所有可能的值选项,这些选项是使用 SWI-Prolog 提供的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).
上面的代码已经过修改,使其更简洁,但符合问题的目的。
【问题讨论】:
-
问题是什么?
-
就像它说的那样——“优化程序,让它只考虑程序产生的最小值”
标签: optimization prolog swi-prolog clpfd