1

我正在通过 PROLOG 解决桥梁和火炬难题。当我尝试不同的搜索方法时,我需要找到计算时间。我的意思是算法解决问题的开始时间和结束时间。

我可以从 Prolog 访问系统时间吗?如何?

4

2 回答 2

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.** 
于 2014-01-24T17:28:52.343 回答
1

用于get_time/1评估算法的执行时间并不是单独计算算法的执行时间,而是计算整个计算机的进程堆栈的执行时间。例如,如果您的操作系统决定在后台运行某个进程,这已经可以显着改变时间增量。

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

例如:

:- use_module(library(statistics)).

run_test:-
  profile(my_predicate(MyArgument)).

希望这可以帮助!

于 2014-04-05T13:10:39.567 回答