Initial State ServiceΒΆ
The InitialStateService generates a suitable initial state for a constraint preserving QAOA optimization. It takes a constraint preserving driver Hamiltonian in the Pauli X basis, an optional set of explicit SumConstraints and a DeviceConnectivity and returns a FrozenCircuit preparing a suitable initial state for the optimization.
The constraint preserving driver Hamiltonian can be obtained from the Driver Service.
from parityos.bits import get_q
from parityos.devices.device_connectivity import get_rectangular_nearest_neighbor_connectivity
from parityos.operators.elementary_operator import X, Z
from parityos.optimization.constraint import SumConstraint
from parityos.services.authentication import InteractiveAuth
from parityos.services.client import HTTPClient
from parityos.services.service import InitialStateInput, InitialStateService
# A constraint preserving driver Hamiltonian
driver_hamiltonian = X(get_q(0, 0)) * X(get_q(1, 0)) * X(get_q(2, 0)) - X(get_q(0, 0)) * X(
get_q(0, 1)
) * X(get_q(0, 2))
# An explicit sum constraint
constraint = SumConstraint(
Z(get_q(0, 0)) * Z(get_q(1, 0)) * Z(get_q(0, 1))
+ Z(get_q(1, 0)) * Z(get_q(2, 0)) * Z(get_q(2, 1)),
1,
)
# A 5 x 5 square grid qubit quantum computing device with nearest neighbor interactions
device_layout = get_rectangular_nearest_neighbor_connectivity(5, 5)
# Set up connection to ParityOS cloud service
client = HTTPClient(InteractiveAuth("my_parityos_username")) # handles authentication
service = InitialStateService(client) # handles API communication with the cloud service
# Run problem (with a certain configuration or preset and a description to recognize the job by)
# and obtain result
state_circuit = service.run(
InitialStateInput(driver_hamiltonian, frozenset({constraint}), device_layout),
"my_preset",
"My first parityos job.",
)
# The returned circuit implementing a suitable starting state
print(state_circuit)