Quantum Computing Asked by creet on May 31, 2021
Given a general QUBO matrix $Q$ for a quadratic minimization problem, is there a Qiskit way to obtain the Pauli gate list or the Ising model for it? A related question is Qiskit: Taking a QUBO matrix into `qubit_op', but it seems to be about a graph related model. The solution given there is also for a particular graph metric for the stable_set
.
I prepared this code based on Qiskit tutorial. Firstly, lets prepare a QUBO task.
# Importing standard Qiskit libraries and configuring account
from qiskit import QuantumCircuit, execute, Aer, IBMQ
from qiskit.compiler import transpile, assemble
from qiskit.tools.jupyter import *
from qiskit.visualization import *
#quadratic optimization
from qiskit.optimization import QuadraticProgram
from qiskit.optimization.converters import QuadraticProgramToQubo
# Prepare QUBO task
#prepare quadratic binary optimization task
task = QuadraticProgram(name = 'QUBO on QC')
task.binary_var(name = 'x')
task.binary_var(name = 'y')
task.binary_var(name = 'z')
task.minimize(linear = [1,-2,3], quadratic = [[0,0.5,-0.5],[0.5,0,1],[-0.5,1,0]])
qubo = QuadraticProgramToQubo().convert(task) #convert to QUBO
print(qubo.export_as_lp_string())
Now, we have a QUBO task and you can convert it to Ising Hamiltonian with this code:
#converting QUBO task to Ising Hamiltonian for simulation on quantum computer
operator, offset = qubo.to_ising()
#operator - unitary operator representing the simulated Hamiltonian
#offset - used after solution on QC to convert objective function value to the proper one
print(operator)
This code converts Ising Hamiltonian to QUBO:
#conversion of Ising Hamiltonian to QUBO
qp = QuadraticProgram()
qp.from_ising(operator, offset, linear = True) #linear=True => x^2 is shown as x since x^2=x for x in {0,1}
print(qp.export_as_lp_string())
Correct answer by Martin Vesely on May 31, 2021
Given a matrix $H$, you can decompose to $H$ into Pauli operators
$$ H = sum_{i} h_{i}H_i = sum_{i_1,i_2,cdots, i_n} a_{i_1,i_2,cdots, i_n}(sigma_{i_1} otimes sigma_{i_2} otimes cdots otimes sigma_{i_n}) $$ where $sigma_{i_j}in {I,X,Y,Z}$ and $a_{i_1,i_2,cdots, i_n} = dfrac{1}{2^n} Tr( (sigma_{i_1} otimes sigma_{i_2} otimes cdots otimes sigma_{i_n}) cdot H) = dfrac{1}{2^n} Tr( H_i cdot H) $
I don't know whether qiskit has a converter that takes an arbitrary matrix to this Pauli strings decomposition or not. However, Pennylane does and it is pretty to use. You can import in pennylane to do this task and extract the output to do what you need in qiskit. Or maybe you will just end up write your own function to do it.
Answered by KAJ226 on May 31, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP