View source on GitHub |
1D Transverse field Ising-model quantum data set.
tfq.datasets.tfi_chain(
qubits, boundary_condition='closed', data_dir=None
)
\[ H = - \sum_{i} \sigma_i^z \sigma_{i+1}^z - g\sigma_i^x \]
Contains 81 circuit parameterizations corresponding to
the ground states of the 1D TFI chain for g in [0.2,1.8].
This dataset contains 81 datapoints. Each datapoint is represented by a
circuit (cirq.Circuit
), a label (Python float
) a Hamiltonian
(cirq.PauliSum
) and some additional metadata. Each Hamiltonian in a
datapoint is a 1D TFI chain with boundary condition boundary_condition
on
qubits
whos order parameter dictates the value of label. The circuit in a
datapoint prepares (an approximation to) the ground state of the Hamiltonian
in the datapoint.
Example usage:
qbs = cirq.GridQubit.rect(4, 1)
circuits, labels, pauli_sums, addinfo =
tfq.datasets.tfi_chain(qbs, "closed")
You can print the available order parameters
[info.g for info in addinfo]
[0.20, 0.22, 0.24, ... ,1.76, 1.78, 1.8]
and the circuit corresponding to the ground state for a certain order parameter
print(circuits[10])
┌─────── ...
(0, 0): ───H───ZZ──────────────────────────────────ZZ───────── ...
│ │
(1, 0): ───H───ZZ^0.761───ZZ─────────X^0.641───────┼────────── ...
│ │
(2, 0): ───H──────────────ZZ^0.761───ZZ────────────┼────────── ...
│ │
(3, 0): ───H─────────────────────────ZZ^0.761──────ZZ^0.761─── ...
└─────────── ...
The labels indicate the phase of the system
>>> labels[10]
0
Additionally, you can obtain the cirq.PauliSum
representation of the
Hamiltonian
print(pauli_sums[10])
-1.000*Z((0, 0))*Z((1, 0))-1.000*Z((1, 0))*Z((2, 0))-1.000*Z((2, 0))*
Z((3, 0))-1.000*Z((0, 0))*Z((3, 0)) ...
-0.400*X((2, 0))-0.400*X((3, 0))
The fourth output, addinfo
, contains additional information
about each instance of the system (see tfq.datasets.spin_system.SpinSystem
).
For instance, you can print the ground state obtained from exact diagonalization
addinfo[10].gs
[[-0.38852974+0.57092165j]
[-0.04107317+0.06035461j]
[-0.04107317+0.06035461j]
[-0.38852974+0.57092165j]]
with corresponding ground state energy
addinfo[10].gs_energy
-4.169142950406478
You can also inspect the parameters
addinfo[10].params
{"theta_0": 0.7614564630036476, "theta_1": 0.6774991338794768,
"theta_2": 0.6407093304791429, "theta_3": 0.7335369771742435}
and change them to experiment with different parameter values by using the unresolved variational circuit returned by tfichain
>>> new_params = {}
... for symbol_name, value in addinfo[10].params.items():
... new_params[symbol_name] = 0.5 * value
>>> new_params
{"theta_0": 0.3807282315018238, "theta_1": 0.3387495669397384,
"theta_2": 0.32035466523957146, "theta_3": 0.36676848858712174}
>>> new_circuit = cirq.resolve_parameters(addinfo[10].var_circuit,
... new_params)
>>> print(new_circuit)
┌─────── ...
(0, 0): ───H───ZZ──────────────────────────────────ZZ───────── ...
│ │
(1, 0): ───H───ZZ^0.761───ZZ─────────X^0.32────────┼────────── ...
│ │
(2, 0): ───H──────────────ZZ^0.761───ZZ────────────┼────────── ...
│ │
(3, 0): ───H─────────────────────────ZZ^0.761──────ZZ^0.761─── ...
└─────────── ...
Args | |
---|---|
qubits
|
Python lst of cirq.GridQubit s. Supported number of spins
are [4, 8, 12, 16].
|
boundary_condition
|
Python str indicating the boundary condition
of the chain. Supported boundary conditions are ["closed"].
|
data_dir
|
Optional Python str location where to store the data on
disk. Defaults to /tmp/.keras .
|
Returns | |
---|---|
A Python lst cirq.Circuit of depth len(qubits) / 2 with resolved
parameters.
A Python lst of labels, 0, for the ferromagnetic phase (g<1 ), 1 for
the critical point (g==1 ) and 2 for the paramagnetic phase
(g>1 ).
A Python lst of cirq.PauliSum s.
A Python lst of namedtuple instances containing the following
fields:
|