Skip to main content
IBM Quantum Platform

Parity Twine Optimizer: ParityQC 의 Qiskit 함수

API 참조 보기

Note

Qiskit Functions IBM Quantum® Premium Plan, Flex Plan 및 On-Prem ( IBM Quantum Platform API를 통해 이용) Plan 사용자만 이용할 수 있는 실험적 기능입니다. 이 기능들은 현재 미리보기 버전 상태이며, 향후 변경될 수 있습니다.


개요

‘패리티 트와인 최적화기(Parity Twine Optimizer)’를 사용하면 사용자는 패리티 트와인(Parity Twine) 기법을 활용해 양자 컴퓨터로 최적화 문제를 해결할 수 있습니다. Parity 아키텍처를 기반으로 하는 이 접근 방식은 ParityQC 컴파일러를 활용하여, 장치 간 연결성을 고려하면서도 양자 알고리즘을 실행하는 데 필요한 게이트 수와 회로 깊이를 최소화합니다.

이러한 리소스 절감을 통해, 표준적인 SWAP 집약적 트랜스파일링 방법으로는 처리하기 어려운 규모의 산업 관련 최적화 문제를 해결할 수 있게 됩니다. Parity Twine Optimizer는 트랜스파일링 단계를 자동화하며, 사용자의 최소한의 입력만으로 사용할 수 있습니다.

패리티 트와인(Parity Twine) 접근법은 양자 근사 최적화 알고리즘(QAOA) 및 양자 푸리에 변환(QFT) 과 같은 양자 알고리즘의 게이트 수와 회로 깊이를 줄이는 측면에서 다른 모든 컴파일 방법보다 뛰어난 성능을 보인다. 물리적 큐비트에서 양자 정보를 추상화함으로써, SWAP 게이트 없이도 비국소적 상호작용을 구현할 수 있다. 대신, 패리티 트와인 체인(CNOT 게이트의 연속)은 큐비트들 사이에 논리적 패리티 정보를 체계적으로 분배합니다.

최적화기는 QAOA를 사용하여 주어진 비용 함수의 에너지를 최소화합니다. QAOA는 비용 해밀토니안의 기저 상태를 근사화하여 조합 최적화 문제를 해결하기 위해 고안된 양자-고전 하이브리드 변분 알고리즘입니다 ( HCH_C ). 혼합 항( HBH_B )은 상태 간의 전이를 유도하여 해 공간을 탐색합니다. 매개변수 γ\gamma 및 β\beta 에 의해 제어되는 이러한 항들의 교대 순서는, 초기 상태에 작용하는 유니터리 연산 U(γ,β)=Πi=1pe−iβiHBe−iγiHCU(\gamma, \beta) = \Pi_{i=1}^p e^{-i \beta_i H_B} e^{-i \gamma_i H_C} 을 정의한다.

문제인 단위 연산자 exp( −iβHC)-i \beta H_C) ) 를 인코딩하려면, 모든 논리적 nn-체 회전 연산자(exp( −iβJi,j,...nZiZj...Zn-i \beta J_{i,j,...n}Z_iZ_j...Z_n ))를 인코딩해야 합니다. 이는 nn-체 생성기(Parity Twine Networks) 를 사용하여 수행할 수 있으며, 이를 통해 QAOA 회로의 깊이와 2-큐비트 게이트 수를 줄일 수 있습니다.


설명

Parity Twine Optimizer의 입력은 최적화 문제, 선택한 IBM Quantum 의 하드웨어 이름, 그리고 트랜스파일링 및 하드웨어 실행 설정을 조정하기 위한 추가 선택적 인수로 구성됩니다. 최적화기 함수는 문제 정의를 Parity Twine 컴파일러로 전달합니다. 그림 1은 함수 워크플로우의 개요를 보여줍니다.

Parity Twine Optimizer 워크플로우
그림 1: Parity Twine Optimizer 워크플로우 요약.

입력 최적화 문제는 (정규화된) 해밀토니안으로 전처리됩니다. 그런 다음 ParityQC 컴파일러는 매개변수화된 Parity Twine 안자츠 회로를 구성하며, 이 회로는 선택된 하드웨어의 네이티브 게이트 세트에 맞는 논리 안자츠로 변환됩니다.

QAOA 회로 파라미터는 일반적으로 “효율적인 깊이 1” 접근법을 사용하여 최적화된 후, 변환된 회로에 할당됩니다. QAOA를 한 번 수행함으로써, 많은 회로 호출에 걸친 비용이 많이 드는 반복적 최적화 과정 없이도 CPU에서 그리드 검색을 통해 최적의 γ\gamma 및 β\beta 매개변수를 얻을 수 있습니다. 이를 통해 최적화기의 QPU 실행 시간을 대폭 줄일 수 있습니다. 회로당 실행 시간은 주로 QPU에서 작업을 실행하는 데 드는 일정한 오버헤드에 의해 결정됩니다. 회로 파라미터가 설정되면, 해당 작업이 지정된 IBM® QPU로 제출됩니다.

그런 다음 원시 결과에 후처리를 수행합니다. 이 단계에서는 해결 문자열을 무작위로 순회하며, 비용 함수의 값을 줄일 수 있는 경우 비트 값을 반전시키는 국소 탐욕적 탐색을 사용합니다.


벤치마크

면책사항

성능은 문제 인스턴스와 후속 처리 단계 모두에 따라 달라질 수 있습니다. 경우에 따라서는, 고전적 샘플과 양자 생성 샘플이 동등한 후처리를 거친 후 유사한 최종 솔루션 품질을 달성할 수도 있다. 따라서 평가 시에는 최적화 워크플로우 전체를 고려해야 합니다.

셰링턴-커크패트릭 모델

그림 2는 Parity Twine Optimizer의 효과성을 보여준다. 이는 큐비트 수가 증가함에 따라 셰링턴-커크패트릭 모델에 대해 최적화기를 사용하여 얻은 결과와 무작위 표본 추출 결과를 비교한 것입니다.

무작위 결과와 최적화기 결과 모두에 후처리를 적용하면 정확한 기저 상태를 얻을 수 있지만, Twine QAOA에서 산출된 원시 최소 에너지 값은 항상 무작위 값보다 더 우수하다. 고려된 최대 큐비트 수(90 및 100)의 경우, 하드웨어 노이즈로 인해 최적화 결과의 정확도가 저하되어 무작위 표본 추출과 일치하는 원시 값으로 되돌아갑니다.

Parity Twine Optimizer SK 벤치마크
그림 2: 무작위 표본 추출과 비교한 SK 모델용 Parity Twine Optimizer의 벤치마크 결과. 결과는 `ibm_boston`에서 20,000회의 시도를 통해 얻었으며, 이 과정을 세 번 반복했습니다.

셰링턴-커크패트릭 모델에 대한 소개와 Parity Twine Optimizer를 사용하여 이를 해결하는 방법에 대한 자세한 내용은 이 튜토리얼을 참조하십시오.

시장 분할 문제

표 1은 시장 분할(MS) 문제의 다양한 사례에 적용된 Parity Twine 최적화기의 구체적인 성능 지표를 보여줍니다. 이 데이터는 QOBLIB(양자 최적화 벤치마킹 라이브러리) 에서 입수한 것으로, Parity Twine 최적화기를 사용하여 해당 라이브러리에 제출된 결과 와 일치합니다.

MS 위반은 해가 모든 제약 조건을 충족하는 데 얼마나 멀리 떨어져 있는지를 측정하는 정확도 지표로, ∑i((Ax−b)i)2\sum_i ((Ax - b)_i)^2 로 정의됩니다. 이 지표의 값이 낮을수록 해의 정확도가 더 높음을 의미합니다. 표 1은 Parity Twine Optimizer 를 사용하여 해당 인스턴스를 5회 실행한 결과의 평균값을, 백엔드로 해당 장치를 ibm_boston 사용하고 100,000샷을 적용한 경우를 바탕으로 보고하고 있다. 각 인스턴스의 실행 결과에서 도출된 최소 MS 위반값이 보고됩니다.

인스턴스
큐비트
2-큐비트 게이트
2-큐비트 깊이
MS 위반
매핑 시간 (초)
QPU 실행 시간 (초)
후처리 시간 (초)
ms_03_050_00220399760452971
ms_03_100_022203997606시간에서 30분2977
ms_03_200_17720399760332963
ms_04_050_0016시간에서 30분89911616829216
ms_04_100_0036시간에서 30분89911628929187
ms_04_200_0306시간에서 30분89911638929219
ms_05_100_00340159915632376시간에서 30분364
ms_06_050_00150249919644996시간에서 30분464
ms_07_050_0016035992361785831637
ms_08_050_00170489927636156131773

표 1: 시장 분할 문제의 다양한 사례에 대한 성능 지표. 인스턴스 이름은 QOBLIB 문제 모음집에 수록된 해당 예제를 나타냅니다. 앞서 설명 부분에서 언급했듯이, CPU에서 도출된 최적의 회로 매개변수를 사용하여 QAOA를 단 한 번만 수행하므로 QPU 소요 시간은 극히 짧으며 거의 일정합니다.

시장 분할 문제에 대한 소개와 Parity Twine Optimizer를 사용하여 이를 해결하는 방법에 대한 자세한 내용은 이 튜토리얼을 참고하세요.

최대 독립 집합 문제

그림 3은 QOBLIB(양자 최적화 벤치마킹 라이브러리) 에서 추출한 특정 인스턴스에 대해 최대 독립 집합 문제에 대해 Parity Twine 최적화기를 사용한 결과와 무작위 샘플링 결과를 비교한 것이다. 이들은 18 큐비트(포유류-캥거루 상호작용)부터 114 큐비트( es60fst03 )에 이릅니다.

작은 인스턴스의 경우, 최적화기와 무작위 표본 추출을 통해 얻은 최대 독립 집합 크기의 원시 결과는 비슷하지만, 더 큰 인스턴스의 경우 최적화기가 훨씬 더 나은 결과를 보여줍니다. 무작위 표본 추출 결과와 최적화 알고리즘 결과를 모두 후처리한 결과, 집합 크기가 정확한 값과 일치하는 것으로 나타났다.

패리티 트와인 최적화기(MIS) 벤치마크
그림 3: 무작위 표본 추출 방식과 비교한 MIS 모델용 패리티 트와인 최적화기의 벤치마크 결과. 결과는 `ibm_boston`에서 20,000회의 시도를 통해 도출되었으며, 이 과정을 세 번 반복했습니다.

시작하기

IBM Quantum Platform API 토큰을 사용하여 인증하고, Qiskit 함수를 다음과 같이 선택하십시오:

from qiskit_ibm_catalog import QiskitFunctionsCatalog

# Authenticate and load the Qiskit Function
catalog = QiskitFunctionsCatalog(
    channel="ibm_quantum_platform",
)
function = catalog.load("parityqc/parity-twine-optimizer")

예

Parity Twine Optimizer는 다음과 같이 간단한 QUBO 예제에 적용할 수 있습니다. 문제는 먼저 사전을 사용하여 정의됩니다:

problem = {"()": 3, "(0,)": 1, "(0, 1)": 2, "(1, 2)": -1}

그러면 변수 유형은 또는 binary 로 정의되어야 합니다 spin:

variable_type = "spin"

이는 목적 함수 3+s0+2s0s1−s1s23 + s_0 + 2 s_0s_1 - s_1s_2 를 정의하며, 여기서 si∈{−1,1}s_i \in \{-1, 1\} 이다.

백엔드를 선택하세요. 예를 들어,

backend_name = "ibm_phoenix"

를 사용하여 해당 사용자 계정/인스턴스에서 사용할 수 있는 백엔드 목록을 확인하세요 catalog.backends() .

백엔드가 지정되지 않은 경우, 가장 부하가 적은 백엔드(대기 중인 작업 수가 가장 적은 백엔드)가 자동으로 선택됩니다.

최적화기가 로드되면(앞서 설명한 대로), 기본 옵션을 사용하여 해당 문제에 대해 최적화기를 실행할 수 있습니다:

function_job = function.run(
    problem=problem, variable_type=variable_type, backend_name=backend_name
)
print(f"Job ID: {function_job.job_id}")

다음과 같이 작업 상태를 확인하십시오:

# Monitor the job status
function_job.status()

다음과 같이 결과를 가져옵니다:

# Retrieve the job result if the status is DONE
result = function_job.result()

result

결과를 출력하면 다음과 같습니다:

{
    'solution': {'0': -1, '1': 1, '2': 1},
    'objective_value': -1.0,
    'solution_bitstring': '100',
    'metadata': {
        'circuit_metrics': {
            'depth': 20,
            'gate_count': 198,
            'two_qubit_gate_depth': 4,
            'two_qubit_gate_count': 4,
            'num_qubits': 3,
            'operations': {'delay': 158, 'rz': 17, 'sx': 14, 'cz': 4, 'measure': 3, 'x': 2}
        },
        'solver_info': {
            'variable_mapping': {'0': 0, '1': 1, '2': 2},
            'bitstring_distributions': {
                'before_postprocessing': {'100': 71760, ... },
                'after_postprocessing': {'100': 88440, '011': 11560}
            },
            'best_parameters': {
                'beta': [-0.46259546391008877],
                'gamma': [0.6181957189727373]
            }
        },
        'resource_usage': {
            'RUNNING: MAPPING': {'CPU_TIME': 42.878},
            'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 0.094},
            'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 790.623},
            'RUNNING: EXECUTING_QPU': {'QPU_TIME': 28.0},
            'RUNNING: POST_PROCESSING': {'CPU_TIME': 0.828}
        }
    }
}

이 solution 사전은 문제에서 정의된 큐비트( s0,s1s_0, s_1 및 s2s_2 )에 해당하며, 각 큐비트의 최적화된 스핀 값을 제공합니다.

는 최적화 문제의 비용 또는 에너지이다 objective_value . 이는 solution 품질을 수치화합니다.

metadata 트랜스필레이션에 대한 정보(2-큐비트 게이트 수/깊이, 사용된 게이트, 활성 큐비트)와 양자 및 고전적 연산 시간에 대한 다양한 실행 시간을 제공합니다.

또한, 이 글은 알고리즘의 내부 작동 원리를 엿볼 수 있게 metadata 해줍니다. 최적화된 변분 매개변수(베타와 감마)를 확인하고, 원시 양자 결과에 고전적 사후 처리를 적용한 후 측정된 비트스트링의 분포가 어떻게 개선되었는지 살펴볼 수 있습니다.

결과 출력에 포함된 모든 비트열은 variable_mapping.을 사용하여 문제 변수에 매핑할 수 있습니다. 예를 들어, 'solution_bitstring': '100' 와 를 이진 해인 'variable_mapping': {'0': 0, '1': 1, '2': 2} 에 대응시킬 수 있습니다 {'0': 1, '1': 0, '2': 0}. 이 문제를 스핀 변수를 사용하여 풀고 있으므로, 이진 변환을 스핀 변환(0 -> 1, 1 -> -1 )으로 변환해야 합니다. 그러면 최종 해 를 얻게 됩니다 'solution': {'0': -1, '1': 1, '2': 1}.

Parity Twine Optimizer 함수의 입력 및 출력에 대한 자세한 내용은 API 참조 문서를 참조하십시오.


변경 로그

[1.0.2] - 2026년 9월 15일

참고

이번 릴리스는 Parity Twine Optimizer Qiskit 함수의 첫 번째 안정화 버전을 의미합니다. 향후 출시될 버전에서는 다음과 같은 기능이 추가될 예정입니다:

  • 고차 문제 편집,
  • 추가적인 최적화 알고리즘, 그리고
  • 전처리 및 후처리 과정의 개선.

기능

  • 효율적인 Parity Twine Compiler를 사용하여 스파스 및 덴스 QUBO 문제를 해결하세요.

문서

  • 시작하기 사용자 가이드.
  • 시장 분할 및 셰링턴-커크패트릭 문제에 대한 예제가 포함된 튜토리얼.
  • API 문서.

지원 받기

질문이나 문제가 있으시면 ParityQC 으로 문의해 주십시오.


다음 단계

권장사항
  • 이 양식을 작성하여 해당 기능에 대한 접근 권한을 요청해 주십시오.
  • 이 Qiskit 함수에 대한 API 참조 를 확인해 보세요.
  • 마켓 분할 문제에 Parity Twine Optimizer를 적용하는 방법에 대한 튜토리얼 을 살펴보세요.
  • Sherrington-Kirkpatrick 모델에 Parity Twine Optimizer를 적용하는 방법에 대한 튜토리얼 을 살펴보세요.
  • Drier 외 (2025)의 “연결성을 고려한 양자 알고리즘 합성(Connectivity-aware Synthesis of Quantum Algorithms)” ArXiv 프리프린트를 검토하십시오.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.