Пример #1
0
def chainlength_rundown(n=100, m=8):
    from dwave_sapi2.embedding import find_embedding as find_embedding_dws2
    C = Chimera(m)
    K = Clique(4 * m)
    nodes = set(x for e in C for x in e)
    trans = {x: i for i, x in enumerate(nodes)}
    C = [(trans[x], trans[y]) for x, y in C]

    def trial(f):
        t0 = time.clock()
        stats = [f() for _ in range(n)]
        t = time.clock() - t0
        stats = filter(None, stats)
        stats = [max(map(len, e)) for e in stats]
        print("successes %d, best maxchain %d, avg maxchain %.02f, time %.02fs" % (
            len(stats), min(stats), sum(stats) / float(len(stats)), t))
        return t

    print("sapi fast embedding:", end='')
    trial(lambda: find_embedding_dws2(K, C, tries=1, fast_embedding=True))
    print("sapi slow embedding:", end='')
    basetime = trial(lambda: find_embedding_dws2(
        K, C, tries=1, fast_embedding=False))

    patience = 0
    while 1:
        print("minorminer, chainlength_patience %d:" % patience, end='')
        t = trial(lambda: find_embedding_orig(K, C, tries=1,
                                              chainlength_patience=patience).values())
        if t > basetime:
            break
        patience += 1
Пример #2
0
def chainlength_diagnostic(n=100,
                           old=False,
                           chainlength_argument=0,
                           verbose=0,
                           m=8):
    C = Chimera(m)
    K = Clique(4 * m)
    if old:
        from dwave_sapi2.embedding import find_embedding as find_embedding_dws2
        nodes = set(x for e in C for x in e)
        trans = {x: i for i, x in enumerate(nodes)}
        C = [(trans[x], trans[y]) for x, y in C]
        assert 0 <= chainlength_argument <= 1, "sapi2 only supports a chainlength argument of 0 or 1"
        embs = [
            find_embedding_dws2(K,
                                C,
                                tries=1,
                                fast_embedding=chainlength_argument,
                                verbose=verbose) for _ in range(n)
        ]
    else:
        embs = [
            find_embedding_orig(K,
                                C,
                                tries=1,
                                chainlength_patience=chainlength_argument,
                                verbose=verbose).values() for _ in range(n)
        ]
    return sorted(max(map(len, e)) if e else None for e in embs)