我正在使用NetworkX的simple_cycles来生成所有周期,如果找到大小为k的周期(k由用户提供),我会在中断的情况下迭代。
try:
for cycle in nx.simple_cycles(G):
if len(cycle) == k:
checkval = True
break
if not checkval:
print "no path of size k"
except nx.NetworkXNoPath:
print "There was no path of size k"
checkval = False
根据图表,simple_cycles可能基本上永远需要尝试找到大小为k的循环。我想在一段时间后停止检查。我无法根据发现的周期数停止,因为这是不可靠的。有时可以在一分钟内找到1个循环,并且可以在30秒内找到100000个循环。
我的问题是,如果有一种方法可以根据从发生器的OUTSIDE传递的一定时间来停止发生器......或者唯一的方法是修改发生器本身的代码。
(也欢迎任何有关我想做的事情的一般建议。)
答案 0 :(得分:0)
检查长度的部分看起来是个好地方。使用time
对于计时也是一个好主意。在代码的顶部插入:
from time import time
在for
循环之前,插入:
time_to_wait = int (time()) + x # x is the time you want to wait.
在for
循环中,将if
语句更改为:
if len (cycle) == k or int (time()) == time_to_wait
您可能想要制作另一个if
而不是合并它,因为超时仍会将checkval
设置为True,这可能是您不想要的。在这种情况下,只需留下第一个if
,再制作另一个:
if int (time()) == time_to_wait: break