打印最小化步骤序言
Print minimize steps prolog
我正在使用 ECLiPSe 6.1 开发序言程序 (CLPFD)。该程序有很多变量,我想最小化某个值,但(显然)最小化步骤需要很多时间。我如何打印在最小化阶段找到的每个解决方案?输出仅打印(例如)Found a solution with cost 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/3 predicate from the branch_and_bound library. This is just like minimize/2,但接受各种选项,包括超时:
bb_min( labeling(Variables), Cost, bb_options{timeout:TimeLimit})
这将在给定时间后中止搜索,并将 Variables
绑定到在时限内找到的最佳解决方案。
我正在使用 ECLiPSe 6.1 开发序言程序 (CLPFD)。该程序有很多变量,我想最小化某个值,但(显然)最小化步骤需要很多时间。我如何打印在最小化阶段找到的每个解决方案?输出仅打印(例如)Found a solution with cost 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/3 predicate from the branch_and_bound library. This is just like minimize/2,但接受各种选项,包括超时:
bb_min( labeling(Variables), Cost, bb_options{timeout:TimeLimit})
这将在给定时间后中止搜索,并将 Variables
绑定到在时限内找到的最佳解决方案。