来自发电机外部的发电机控制(networkx simple_cycles)

时间:2018-02-26 16:02:14

标签: python loops iterator generator networkx

我正在使用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传递的一定时间来停止发生器......或者唯一的方法是修改发生器本身的代码。

(也欢迎任何有关我想做的事情的一般建议。)

1 个答案:

答案 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