【问题标题】:calculating an algorithm time in prolog在prolog中计算算法时间
【发布时间】:2014-01-24 12:45:15
【问题描述】:

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

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

【问题讨论】:

  • 你看过 SWI Prolog 的 time/1 谓词吗?
  • 感谢我使用了get_time(T),它解决了。

标签: prolog swi-prolog systemtime


【解决方案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.** 

【讨论】:

  • 相比之下,删除** 项目并致电time(print_solution) 看看你会得到什么可能会很有趣。它将显示时间以及其他配置文件信息,例如推理次数等。然后您可以避免在谓词中添加额外的计时器代码。
  • 哇!伟大的!我得到了它。 :-) 谢谢!
【解决方案2】:

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

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

例如:

:- use_module(library(statistics)).

run_test:-
  profile(my_predicate(MyArgument)).

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 2020-07-22
    • 2012-12-12
    • 1970-01-01
    • 2017-10-25
    • 2021-06-21
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多