Exemplo n.º 1
0
def find_embedding(Q, A, return_overlap=False, **args):
    args['verbose'] = 0
    args['tries'] = 1
    if return_overlap:
        emb, succ = find_embedding_orig(Q,
                                        A,
                                        return_overlap=return_overlap,
                                        **args)
        if not succ:
            return emb, succ
        elif check_embedding(Q, A, emb, **args):
            if check_embedding.warning:
                warn(check_embedding.warning, RuntimeWarning)
            return emb, succ
        else:
            raise RuntimeError("bad embedding reported as success (%s)" %
                               (check_embedding.errcode))
    else:
        emb = find_embedding_orig(Q, A, return_overlap=return_overlap, **args)
        if emb:
            if not check_embedding(Q, A, emb, **args):
                raise RuntimeError("bad embedding reported as success (%s)" %
                                   (check_embedding.errcode))
            elif check_embedding.warning:
                warn(check_embedding.warning, RuntimeWarning)
        return emb
Exemplo n.º 2
0
def _long_running_successful_problem(interactive):
    # broke this out of run_interactive_interrupt because multiprocessing in py3.8 can't handle local functions :eyeroll:
    C = [(i, j) for i in range(20) for j in range(i)]
    t0 = time.perf_counter()
    try:
        find_embedding_orig(C,
                            C,
                            chainlength_patience=1 << 20,
                            interactive=interactive,
                            timeout=1)
    except KeyboardInterrupt:
        sys.exit(2)
    if time.perf_counter() - t0 > .5:
        # be a little generous here... but the caller should kill this in way less than .5s
        sys.exit(1)
Exemplo n.º 3
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
Exemplo n.º 4
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)