Esempio n. 1
0
def work(gi, p, s):
    low_g, up_g = 0, 2*pi
    low_b, up_b = 0, pi/2
    G, C, M, k = common.get_complete(gi)
    sample_g, sample_b = common.MLHS(p, s, low_g, up_g, low_b, up_b)
    bounds = [[low_g,up_g] if j < p else [low_b,up_b] for j in range(2*p)]
    eps = 1e-3
    best_exp, best_angles = -1, []
    total_eval = 0
    for i in range(s):
        angles = sample_g[i]
        angles.extend(sample_b[i])
        options = {'disp': None, 'maxfun': 100, 'gtol': eps, 'ftol': eps}
        optimal = minimize(qaoa, angles, method='L-BFGS-B', bounds=bounds, args=(G, C, M, k, p), options=options)
        total_eval += optimal.nfev
        print('total_eval: ' + str(total_eval))
        if -optimal.fun > best_exp + eps:
            best_exp = -optimal.fun
            best_angles = [list(optimal.x)]
            print('s: ' + str(i) + ', ' + str(-optimal.fun) + ', angles: ' + str(optimal.x))
        elif -optimal.fun > best_exp - eps:
            best_angles.append(list(optimal.x))
    #print(str(rank) + ', ' + str(best) + ', ' + str(angles))
    ''' 
    G, C, M, k = common.get_complete(gi)
    options = {'disp': 1, 'maxfun': 100, 'gtol': 1e-2}
    optimal = minimize(qaoa, np.array([0.5*pi, 0.1*pi]), method='L-BFGS-B', bounds=[[0,2*pi],[0,pi/2]], args=(G, C, M, k, p), options=options)
    print('optimal: ' + str(-optimal.fun))
    print('angles: ' + str(optimal.x))
    return -optimal.fun, optimal.x
    '''
    print('')
    print(best_exp)
    print(best_angles)
    return best_exp, best_angles
Esempio n. 2
0
def dicke_complete(gi):
    low_g, up_g = 0, 2
    low_b, up_b = 0, 0.2
    G, C, M, k = common.get_complete(gi)
    eps = 1e-3
    exp = []
    for p in range(1, 20):
        sample_g = np.linspace(up_g, low_g, num=p + 2)
        sample_g = sample_g[1:p + 1]
        sample_b = np.linspace(low_b, up_b, num=p + 2)
        sample_b = sample_b[1:p + 1]
        angles = np.append(sample_g, sample_b)
        bounds = [[low_g, up_g] if j < p else [low_b, up_b]
                  for j in range(2 * p)]
        opt = {'disp': None, 'gtol': eps, 'ftol': eps}
        kwargs = {
            'method': 'L-BFGS-B',
            'args': (G, C, M, k, p),
            'bounds': bounds,
            'options': opt
        }
        optimal = basinhopping(qaoa,
                               angles,
                               niter=300,
                               minimizer_kwargs=kwargs,
                               disp=False)
        print('p: ' + str(p) + '\t' + str(-optimal.fun) + '\t' +
              str(optimal.x))
        exp.append(-optimal.fun / 9)
        pickle.dump(exp, open('data/91.dicke_complete', 'wb'))
Esempio n. 3
0
def basin(gi, p, s):
    low_g, up_g = 0, 2 * pi
    low_b, up_b = 0, pi / 2
    G, C, M, k = common.get_complete(gi)
    bounds = [[low_g, up_g] if j < p else [low_b, up_b] for j in range(2 * p)]
    eps = 1e-3
    total_eval = 0
    best_exp, best_angles = -1, []
    while total_eval < s:
        angles = [0 for _ in range(2 * p)]
        opt = {'disp': None, 'gtol': eps, 'ftol': eps}
        kwargs = {
            'method': 'L-BFGS-B',
            'args': (G, C, M, k, p),
            'bounds': bounds,
            'options': opt
        }
        optimal = basinhopping(qaoa,
                               angles,
                               niter=200,
                               minimizer_kwargs=kwargs,
                               disp=False)
        total_eval += optimal.nfev
        print(total_eval)
        if -optimal.fun > best_exp + eps:
            best_exp = -optimal.fun
            best_angles = [list(optimal.x)]
        elif -optimal.fun > best_exp - eps:
            best_angles.append(list(optimal.x))
    return best_exp, best_angles
Esempio n. 4
0
def initial_complete(gi):
    low_g, up_g = 0, 2 * pi
    low_b, up_b = 0, pi / 2
    G, C, M, k = common.get_complete(gi)
    eps = 1e-3
    avg = []
    error = []
    size = int(comb(len(G.nodes), k))
    print(size)
    for p in range(1, 7):
        exp, e = [], 0
        bounds = [[low_g, up_g] if j < p else [low_b, up_b]
                  for j in range(2 * p)]
        for i in range(size):
            angles = [
                random.uniform(0, 2 *
                               pi) if j < p else random.uniform(0, pi / 2)
                for j in range(2 * p)
            ]
            opt = {'disp': None, 'gtol': eps, 'ftol': eps}
            kwargs = {
                'method': 'L-BFGS-B',
                'args': (G, C, M, k, p, i),
                'bounds': bounds,
                'options': opt
            }
            optimal = basinhopping(qaoa_initial,
                                   angles,
                                   niter=50,
                                   minimizer_kwargs=kwargs,
                                   disp=False)
            print('i: ' + str(i) + ', p: ' + str(p) + '\t' +
                  str(-optimal.fun) + '\t' + str(optimal.x))
            exp.append(-optimal.fun / 9)
        avg.append(np.average(exp))
        error.append(2.576 * np.std(exp) / np.sqrt(size))
        print('avg: ' + str(avg) + '\t' + str(error))
        pickle.dump([avg, error], open('data/91.initial_complete', 'wb'))
Esempio n. 5
0
def work(gi, p, s):
    low_g, up_g = 0, 2 * pi
    low_b, up_b = 0, pi / 2
    G, C, M, k = common.get_complete(gi)
    bounds = [[low_g, up_g] if j < p else [low_b, up_b] for j in range(2 * p)]
    eps = 1e-3
    best_exp, best_angles = -1, []
    total_eval = 0
    while (total_eval < s):
        angles = [
            random.uniform(low_g, up_g) if j < p else random.uniform(
                low_b, up_b) for j in range(2 * p)
        ]

        #optimal = neldermead(G, C, M, k, p, angles, eps)
        optimal = lbfgsb(G, C, M, k, p, angles, eps, bounds)

        total_eval += optimal.nfev
        if -optimal.fun > best_exp + eps:
            best_exp = -optimal.fun
            best_angles = [list(optimal.x)]
        elif -optimal.fun > best_exp - eps:
            best_angles.append(list(optimal.x))
    return best_exp, best_angles
Esempio n. 6
0
    low_g, up_g = 0, 2*pi
    low_b, up_b = 0, pi/2
    best_exp = -1
    total_eval = 0
    while(best_exp < prev_exp):
        angles = [random.uniform(low_g, up_g) if j < p else random.uniform(low_b, up_b) for j in range(2*p)]
        value = -qaoa(angles, G, C, M, k, p)
        if value > best_exp: best_exp = value
        total_eval += 1
    return best_exp, total_eval

if __name__ == '__main__':
    random.seed(4)
    gi = random.randint(163,955)
    print('gi = ' + str(gi))
    G, C, M, k = common.get_complete(gi)
    best_sol = common.brute_force(G, k)
    s = 50
    exp = [0]*s
    prev_best = 0
    prev = []
    samples = []
    error = []

    for p in range(1,10):
        sample_vec = []
        for i in range(s):
            new_exp, num_samples = next_level(G, C, M, k, p, prev_best)
            exp[i] = new_exp
            sample_vec.append(num_samples)
            if i % 10 == 0: print('\ti: ' + str(i) + '\tavg: ' + str(np.average(sample_vec)) \