打印最小化步骤prolog

打印最小化步骤prolog,prolog,clpfd,eclipse-clp,Prolog,Clpfd,Eclipse Clp,我正在使用Eclipse6.1编写一个prolog程序(CLPFD)。这个程序有很多变量,我想最小化一个特定的值,但是(显然)最小化步骤需要很多时间。如何打印最小化阶段中找到的每个解决方案?输出仅打印(例如)找到了成本为22003482的解决方案,但没有找到解决方案本身。我希望: Found a solution with cost 22003482 L = [[...],[...],...,[]] %L is the list of value to minimize 在最小化过程的每个步骤

我正在使用Eclipse6.1编写一个prolog程序(CLPFD)。这个程序有很多变量,我想最小化一个特定的值,但是(显然)最小化步骤需要很多时间。如何打印最小化阶段中找到的每个解决方案?输出仅打印(例如)
找到了成本为22003482的解决方案,但没有找到解决方案本身。我希望:

Found a solution with cost 22003482
L = [[...],[...],...,[]] %L is the list of value to minimize
在最小化过程的每个步骤上

我尝试过这种方法:

myLabeling([]).
myLabeling([H|T]):-
    labeling(H),
    myLabeling(T).

%code for the problem

%timeout(+Goal, ++TimeLimit, +TimeOutGoal)
timeout(minimize(myLabeling(AllNodesList),Result),TimeLimit,
    myLabeling(AllNodesList)).
其中,
AllNodesList
是一个列表列表,
TimeOutGoal
是在
TimeLimit
过期时运行的目标。此解决方案不打印找到的最后一个解决方案,而是打印找到的第一个带有标签的非优化解决方案

有什么建议吗?
谢谢。

您似乎在问两个不同的问题:(1)如何打印最小化过程中找到的每个中间解决方案,以及(2)如何在超时情况下获得最佳解决方案

要打印最小化过程中找到的每个解决方案,只需在标记过程成功后立即打印变量即可:

minimize( (labeling(Variables),writeln(solution(Variables))), Cost)
要使用超时,最简单的方法是使用库中的谓词。这与类似,但接受各种选项,包括超时:

bb_min( labeling(Variables), Cost, bb_options{timeout:TimeLimit})
这将在给定时间后中止搜索,并将
变量
绑定到在时间限制内找到的最佳解决方案