在prolog中计算算法时间

时间:2014-01-24 12:45:15

标签: prolog swi-prolog systemtime

我正在解决PROLOG的Bridge and Torch拼图。当我尝试不同的搜索方法时,我需要找到计算时间。我的意思是算法解决问题的开始时间和结束时间。

我可以从Prolog访问系统时间吗?怎么样?

2 个答案:

答案 0 :(得分:1)

我使用get_time(T)计算谓词中的总时间:

print_solution :- 
  **get_time(T1),**
  init(State), 
  solve(State,Solution,EndState), 
  writeln('Start state:'),
  writeln(State),
  writeln('Solution:'),
  writeln(Solution),
  writeln('Final state:'),
  writeln(EndState),
  **get_time(T2),**
  **DeltaT is T2- T1,**
  **write('time: '), write(DeltaT), write('  ms.\n'), nl.** 

答案 1 :(得分:1)

使用get_time/1来评估算法的执行时间不会孤立地计算算法的执行时间,而是计算整个计算机的进程堆栈的执行时间。例如,如果您的操作系统决定在后台运行某个过程,这可能已经大大改变了时间差。

SWI-Prolog专门支持跟踪计算所有谓词谓词的时间。为此,您需要(1)导入库statistics和(2)将要在profile/1中分析的谓词括起来。

例如:

:- use_module(library(statistics)).

run_test:-
  profile(my_predicate(MyArgument)).

希望这有帮助!