def dephasing_performance(): # adiabatic = SimulateAdiabatic(hamiltonian=[laser], noise = [dephasing, dissipation], noise_model='continuous', # graph=graph, IS_subspace=True, cost_hamiltonian=rydberg_hamiltonian_cost) # def schedule(t, tf): # phi = (tf-t)/tf*np.pi/2 # laser.omega_g = np.cos(phi) # laser.omega_r = np.sin(phi) # dissipation.omega_g = np.cos(phi) # dissipation.omega_r = np.sin(phi) # adiabatic.performance_vs_total_time(np.arange(5, 100, 5), schedule=schedule, verbose=True, plot=True, method='odeint') dephasing_rates = 10. ** (np.arange(-3, 0, .2)) performance_3 = [] performance_5 = [] for j in [3, 5]: graph = line_graph(n=j) phi = .02 laser = EffectiveOperatorHamiltonian(omega_g=np.cos(phi), omega_r=np.sin(phi), energies=(1,), graph=graph) dissipation = EffectiveOperatorDissipation(omega_g=np.cos(phi), omega_r=np.sin(phi), rates=(1,), graph=graph) dephasing = lindblad_operators.LindbladPauliOperator(pauli='Z', IS_subspace=True, graph=graph, rates=(.1,)) rydberg_hamiltonian_cost = hamiltonian.HamiltonianMIS(graph, IS_subspace=True, code=qubit) eq = LindbladMasterEquation(hamiltonians=[laser], jump_operators=[dissipation, dephasing]) for i in range(len(dephasing_rates)): dissipation.rates = (1,) laser.energies = (1,) dephasing.rates = (dephasing_rates[i],) state = np.zeros(dissipation.nh_hamiltonian.shape) state[-1, -1] = 1 state = State(state, is_ket=False, graph=graph, IS_subspace=True) ss = eq.steady_state(state) ss = ss[1][0] state = State(ss, is_ket=False, graph=graph, IS_subspace=True) print(rydberg_hamiltonian_cost.optimum_overlap(state)) if j == 3: performance_3.append(rydberg_hamiltonian_cost.optimum_overlap(state)) else: performance_5.append(rydberg_hamiltonian_cost.optimum_overlap(state)) plt.scatter(dephasing_rates, performance_3, color='teal', label=r'$n=3$ line graph') plt.scatter(dephasing_rates, performance_5, color='purple', label=r'$n=5$ line graph') plt.ylabel(r'log(-log(optimum overlap))') plt.xlabel(r'$\log(\gamma\Omega^2/(\delta^2\Gamma_{\rm{dephasing}}))$') plt.legend() plt.show()
def eit_steady_state(graph, show_graph=False, gamma=1): if show_graph: nx.draw(graph) plt.show() # Generate the driving and Rydberg Hamiltonians laser1 = hamiltonian.HamiltonianDriver(transition=(1, 2), IS_subspace=True, graph=graph, code=rydberg) laser2 = hamiltonian.HamiltonianDriver(transition=(0, 1), IS_subspace=True, graph=graph, code=rydberg) rydberg_hamiltonian_cost = hamiltonian.HamiltonianMIS(graph, IS_subspace=True, code=rydberg) spontaneous_emission = lindblad_operators.SpontaneousEmission( graph=graph, transition=(1, 2), rates=[gamma], IS_subspace=True, code=rydberg) # Initialize adiabatic algorithm simulation = SimulateAdiabatic(graph, hamiltonian=[laser1, laser2], cost_hamiltonian=rydberg_hamiltonian_cost, IS_subspace=True, noise_model='continuous', code=rydberg, noise=[spontaneous_emission]) master_equation = LindbladMasterEquation( hamiltonians=[laser1, laser2], jump_operators=[spontaneous_emission]) initial_state = State(tools.outer_product( np.array([[0, 0, 0, 0, 0, 0, 0, 1]]).T, np.array([[0, 0, 0, 0, 0, 0, 0, 1]]).T), code=rydberg, IS_subspace=True, is_ket=False) print(master_equation.steady_state(initial_state)) return simulation
def imperfect_blockade_performance(): graph = line_graph(n=5, return_mis=False) phi = .02 laser = hamiltonian.HamiltonianDriver(pauli='X', energies=(np.cos(phi) * np.sin(phi),), graph=graph) energy_shift_r = hamiltonian.HamiltonianEnergyShift(index=0, energies=(np.sin(phi) ** 2,), graph=graph) energy_shift_g = hamiltonian.HamiltonianEnergyShift(index=1, energies=(np.cos(phi) ** 2,), graph=graph) dissipation = EffectiveOperatorDissipation(omega_g=np.cos(phi), omega_r=np.sin(phi), rates=(1,), graph=graph, IS_subspace=False) rydberg_hamiltonian = hamiltonian.HamiltonianMIS(graph, IS_subspace=False, code=qubit, energies=(0, 4,)) rydberg_hamiltonian_cost_IS = hamiltonian.HamiltonianMIS(graph, IS_subspace=True, code=qubit) rydberg_hamiltonian_cost = hamiltonian.HamiltonianMIS(graph, IS_subspace=False, code=qubit, energies=(1, -4,)) eq = LindbladMasterEquation(hamiltonians=[laser, energy_shift_g, energy_shift_r, rydberg_hamiltonian], jump_operators=[dissipation]) state = np.zeros(rydberg_hamiltonian_cost.hamiltonian.shape) state[graph.independent_sets[np.argmax(rydberg_hamiltonian_cost_IS.hamiltonian)][0], graph.independent_sets[np.argmax(rydberg_hamiltonian_cost_IS.hamiltonian)][0]] = 1 state = State(state, is_ket=False, graph=graph, IS_subspace=False) ss = eq.steady_state(state, k=80, use_initial_guess=True) print(ss[1].shape) ss = ss[1][0] print(np.diagonal(ss), rydberg_hamiltonian_cost.hamiltonian) state = State(ss, is_ket=False, graph=graph, IS_subspace=False) print(np.around(ss, decimals=3), rydberg_hamiltonian_cost.optimum_overlap(state)) layout = np.zeros((2, 2)) layout[0, 0] = 1 layout[1, 1] = 1 layout[0, 1] = 1 adjacent_energy = 4 diag_energy = adjacent_energy/8 second_nearest_energy = adjacent_energy/64 for i in range(layout.shape[0] - 1): for j in range(layout.shape[1] - 1): if layout[i, j] == 1: # There is a spin here pass