gpt4 book ai didi

Prolog 在限定时间内找到所有解决方案

转载 作者:行者123 更新时间:2023-12-05 04:38:56 25 4
gpt4 key购买 nike

我想在某个时间限制内找到目标的所有解决方案。我的意思是我想搜索最多时间限制的解决方案,并返回所有找到的解决方案,无论是否达到时间限制,这与解决方案列表是否完整无关。

我尝试了以下方法:

catch(call_with_time_limit(60, findall(S,my_goal(S),Sol)), time_limit_exceeded,false)

但是,如果达到时间限制,它不会返回找到的部分解列表,并且“false”不能是依赖于 Sol 的表达式。

这个问题与Prolog: "findall" for limited number of solutions有关,但我对最大搜索时间感兴趣,而不是拥有最大数量的解决方案。

请问您对此有何见解?

最佳答案

这样的事情可能对你有用:

findall_time(Duration, Template, Goal, Bag):-
get_time(TimeStamp),
Time is TimeStamp + Duration,
findall(Template, findall_time1(Time, Goal), Bag).

findall_time1(Time, Goal) :-
catch(setup_call_cleanup(alarm_at(Time,
throw(time_limit_exceeded),
Id),
(get_time(TimeStamp), Time>TimeStamp, Goal),
remove_alarm(Id)),
time_limit_exceeded,
fail).

使用此示例代码和测试:

my_goal(X):-
between(0, 5, X),
sleep(1).


?- findall_time(2.5, X, my_goal(X), Bag).
Bag = [0, 1].

关于Prolog 在限定时间内找到所有解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70499763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com