Skip to content

Suboptimal optimization result of consecutive RZZ gates with optimization level 2 and 3 #13431

@t-imamichi

Description

@t-imamichi

Environment

  • Qiskit version: 1.2.4 and main branch
  • Python version: 3.12.7
  • Operating system: 15.1

What is happening?

Transpilation with optimization level 2 and 3 result in a deeper circuit than that of optimization level 1 for a case with consecutive RZZ gates.

How can we reproduce the issue?

from qiskit import generate_preset_pass_manager, QuantumCircuit

qc = QuantumCircuit(2)
qc.rzz(0.1, 0, 1)
qc.rzz(0.2, 0, 1)

for level in [0, 1, 2, 3]:
    pm = generate_preset_pass_manager(optimization_level=level, basis_gates=["rz", "cx", "sx","x"])
    qc2 = pm.run(qc)
    print('optimization level', level)
    print(qc2)
    print()

output

# 1.2.4
optimization level 0

q_0: ──■───────────────■────■───────────────■──
     ┌─┴─┐┌─────────┐┌─┴─┐┌─┴─┐┌─────────┐┌─┴─┐
q_1: ┤ X ├┤ Rz(0.1) ├┤ X ├┤ X ├┤ Rz(0.2) ├┤ X ├
     └───┘└─────────┘└───┘└───┘└─────────┘└───┘

optimization level 1

q_0: ──■───────────────■──
     ┌─┴─┐┌─────────┐┌─┴─┐
q_1: ┤ X ├┤ Rz(0.3) ├┤ X ├
     └───┘└─────────┘└───┘

optimization level 2
global phase: 0
     ┌─────────────┐        ┌───┐        ┌───┐┌────────────┐
q_0: ┤ Rz(-3.1374) ├──■─────┤ X ├─────■──┤ X ├┤ Rz(3.1374) ├
     └─┬──────────┬┘┌─┴─┐┌──┴───┴──┐┌─┴─┐├───┤└┬─────────┬─┘
q_1: ──┤ Rz(-π/2) ├─┤ X ├┤ Rz(0.3) ├┤ X ├┤ X ├─┤ Rz(π/2) ├──
       └──────────┘ └───┘└─────────┘└───┘└───┘ └─────────┘

optimization level 3
global phase: 0
     ┌─────────────┐        ┌───┐        ┌───┐┌────────────┐
q_0: ┤ Rz(-3.1374) ├──■─────┤ X ├─────■──┤ X ├┤ Rz(3.1374) ├
     └─┬──────────┬┘┌─┴─┐┌──┴───┴──┐┌─┴─┐├───┤└┬─────────┬─┘
q_1: ──┤ Rz(-π/2) ├─┤ X ├┤ Rz(0.3) ├┤ X ├┤ X ├─┤ Rz(π/2) ├──
       └──────────┘ └───┘└─────────┘└───┘└───┘ └─────────┘
# main branch
optimization level 0

q_0: ──■───────────────■────■───────────────■──
     ┌─┴─┐┌─────────┐┌─┴─┐┌─┴─┐┌─────────┐┌─┴─┐
q_1: ┤ X ├┤ Rz(0.1) ├┤ X ├┤ X ├┤ Rz(0.2) ├┤ X ├
     └───┘└─────────┘└───┘└───┘└─────────┘└───┘

optimization level 1
global phase: 2π

q_0: ──■───────────────■──
     ┌─┴─┐┌─────────┐┌─┴─┐
q_1: ┤ X ├┤ Rz(0.3) ├┤ X ├
     └───┘└─────────┘└───┘

optimization level 2
     ┌─────────────┐        ┌───┐        ┌───┐┌────────────┐
q_0: ┤ Rz(-3.1374) ├──■─────┤ X ├─────■──┤ X ├┤ Rz(3.1374) ├
     └─┬──────────┬┘┌─┴─┐┌──┴───┴──┐┌─┴─┐├───┤└┬─────────┬─┘
q_1: ──┤ Rz(-π/2) ├─┤ X ├┤ Rz(0.3) ├┤ X ├┤ X ├─┤ Rz(π/2) ├──
       └──────────┘ └───┘└─────────┘└───┘└───┘ └─────────┘

optimization level 3
     ┌─────────────┐        ┌───┐        ┌───┐┌────────────┐
q_0: ┤ Rz(-3.1374) ├──■─────┤ X ├─────■──┤ X ├┤ Rz(3.1374) ├
     └─┬──────────┬┘┌─┴─┐┌──┴───┴──┐┌─┴─┐├───┤└┬─────────┬─┘
q_1: ──┤ Rz(-π/2) ├─┤ X ├┤ Rz(0.3) ├┤ X ├┤ X ├─┤ Rz(π/2) ├──
       └──────────┘ └───┘└─────────┘└───┘└───┘ └─────────┘

What should happen?

It would be nice to generate the circuit of optimization level 1

Any suggestions?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions