-
Notifications
You must be signed in to change notification settings - Fork 6
/
maxcut_problem.py
40 lines (34 loc) · 1.19 KB
/
maxcut_problem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Parameter
from .base_problem import Problem
class MaxCut(Problem):
def __init__(self, G) -> None:
super().__init__()
self.G = G
self.N_qubits = self.G.number_of_nodes()
def cost(self, string):
C = 0
for edge in self.G.edges():
i = int(edge[0])
j = int(edge[1])
if string[i] != string[j]:
w = self.G[edge[0]][edge[1]]["weight"]
C += w
return C
def create_circuit(self):
"""
Adds a parameterized circuit for the cost part to the member variable self.parameteried_circuit
and a parameter to the parameter list self.gamma_params
"""
q = QuantumRegister(self.N_qubits)
self.circuit = QuantumCircuit(q)
cost_param = Parameter("x_gamma")
### cost Hamiltonian
for edge in self.G.edges():
i = int(edge[0])
j = int(edge[1])
w = self.G[edge[0]][edge[1]]["weight"]
wg = w * cost_param
self.circuit.cx(q[i], q[j])
self.circuit.rz(wg, q[j])
self.circuit.cx(q[i], q[j])