Iskay Quantum Optimizer - Kipu Quantum의 Qiskit Function
- Qiskit Functions는 IBM Quantum® Premium Plan, Flex Plan, 및 On-Prem(IBM Quantum Platform API를 통한) Plan 사용자만 사용할 수 있는 실험적 기능입니다. 미리보기 릴리스 상태이며 변경될 수 있습니다.
개요
Kipu Quantum의 Iskay Quantum Optimizer를 사용하면 IBM® 양자 컴퓨터를 사용하여 복잡한 최적화 문제를 해결할 수 있습니다. 이 솔버는 Kipu의 최첨단 bf-DCQO 알고리즘을 활용하며, 목적 함수만 입력으로 필요하여 문제 솔루션을 자동으로 제공합니다. 최대 156개의 Qubit를 포함하는 최적화 문제를 처리할 수 있어, IBM 양자 장치의 모든 Qubit를 사용할 수 있습니다. Optimizer는 고전적 변수와 Qubit 간 1:1 매핑을 사용하므로 최대 156개의 이진 변수가 있는 최적화 문제를 해결할 수 있습니다.
Optimizer는 비제약 이진 최적화 문제의 해결을 가능하게 합니다. 일반적으로 사용되는 QUBO(이차 비제약 이진 최적화) 공식 외에도 고차(HUBO) 최적화 문제도 지원합니다. 솔버는 비변분 양자 알고리즘을 활용하여 대부분의 계산을 양자 장치에서 수행합니다.
다음에서는 사용된 알고리즘에 대한 자세한 내용과 함수 사용 방법에 대한 간략한 가이드, 그리고 다양한 크기와 복잡도의 문제 인스턴스에 대한 벤치마킹 결과를 제공합니다.
설명
Optimizer는 최첨 단 양자 최적화 알고리즘의 즉시 사용 가능한 구현입니다. 양자 하드웨어에서 고도로 압축된 양자 회로를 실행하여 최적화 문제를 해결합니다. 이 압축은 양자 시스템의 기본 시간 진화에 반단열(counterdiabatic) 항을 도입하여 달성됩니다. 알고리즘은 최종 솔루션을 얻기 위해 여러 번의 하드웨어 실행 반복을 수행하고 후처리와 결합합니다. 이러한 단계들은 Optimizer의 워크플로에 원활하게 통합되어 자동으로 실행됩니다.
Quantum Optimizer는 어떻게 작동하나요?
이 섹션에서는 구현된 bf-DCQO 알고리즘의 기본 사항을 설명합니다. 알고리즘에 대한 소개는 Qiskit YouTube 채널에서도 찾을 수 있습니다.
이 알고리즘은 시간에 따라 변환되는 양자 시스템의 시간 진화를 기반으로 하며, 진화 끝에서 양자 시스템의 기저 상태에 문제 솔루션이 인코딩됩니다. 단열 정리에 따르면, 시스템이 기저 상태를 유지하려면 이 진화가 느려야 합니다. 이 진화를 디지털화하는 것이 디지털화된 양자 단열 계산(DQA)과 유명한 QAOA 알고리즘의 기초입니다. 그러나 필요한 느린 진화는 회로 깊이가 증가하므로 문제 크기가 커질수록 실현 가능하지 않습니다. 반단열 프로토콜을 사용하면 기저 상태를 유지하면서 짧은 진화 시간 동안 발생하는 원하지 않는 여기를 억제할 수 있습니다. 여기서 이 짧은 진화 시간을 디지털화하면 더 짧은 깊이와 더 적은 얽힘 Gate를 가진 양자 회로가 됩니다.
bf-DCQO 알고리즘의 회로는 일반적으로 DQA보다 최대 10배 더 적은 얽힘 Gate를, 표준 QAOA 구현보다 3~4배 더 적은 얽힘 Gate를 사용합니다. Gate 수가 적기 때문에 하드웨어에서 회로 실행 중 오류가 적게 발생합니다. 따라서 옵티마이저는 오류 억제나 오류 완화와 같은 기술을 사용할 필요가 없습니다. 향후 버전에서 이를 구현하면 솔루션 품질을 더욱 향상시킬 수 있습니다.
bf-DCQO 알고리즘은 반복을 사용하지만 비변분입니다. 알고리즘의 각 반복 후, 상태의 분포가 측정됩니다. 얻어진 분포는 소위 바이어스 필드를 계산하는 데 사용됩니다. 바이어스 필드는 이전에 발견된 솔루션 근처의 에너지 상태에서 다음 반복을 시작할 수 있게 합니다. 이런 방식으로 알고리즘은 각 반복마다 더 낮은 에너지의 솔루션으로 이동합니다. 일반적으로 약 10번의 반복이 솔루션에 수렴하기에 충분하며, 총적으로 약 100번 반복이 필요한 변분 알고리즘보다 훨씬 적은 수의 반복이 필요합니다.
옵티마이저는 bf-DCQO 알고리즘과 고전적 후처리를 결합합니다. 상태의 분포를 측정한 후, 로컬 탐색이 수행됩니다. 로컬 탐색 중 측정된 솔루션의 비트가 무작위로 뒤집힙니다. 뒤집기 후 새 비트스트링의 에너지가 평가됩니다. 에너지가 낮으면 비트스트링이 새 솔루션으로 유지됩니다. 로컬 탐색은 Qubit 수에 따라 선형적으로만 확장되므로 계산 비용이 저렴합니다. 후처리가 로컬 비트 뒤집기를 수정하므로, 하드웨어 불완전성과 판독 오류의 결과인 비트 뒤집기 오류를 보상합니다.
워크플로
다음은 Quantum Optimizer의 워크플로 개략도입니다.
Quantum Optimizer를 사용하면 양자 하드웨어에서 최적화 문제 해결이 다음으로 줄어듭니다:
- 문제의 목적 함수 공식화
- Qiskit Functions를 통해 Optimizer에 접근
- Optimizer를 실행하고 결과 수집
벤치마크
아래 벤치마크 지표는 Optimizer가 최대 156개의 Qubit를 포함하는 문제를 효과적으로 처리하며, 다양한 문제 유형에 걸쳐 옵티마이저의 정확도와 확장성에 대한 일반적인 개요를 제공합니다. 실제 성능 지표는 변수 수, 목적 함수의 항의 밀도 및 지역성, 다항식 차수와 같은 특정 문제 특성에 따라 다를 수 있습니다.
다음 표에는 근사 비율(AR)이 포함되어 있으며, 다음과 같이 정의됩니다:
여기서 는 목적 함수, , 는 각각 최소값과 최대값, 는 찾은 최적 솔루션의 비용입니다. 따라서 AR=100%는 문제의 기저 상태를 얻었음을 의미합니다.
| Example | Number of qubits | Approximation Ratio | Total time (s) | Runtime usage (s) | Total Number of shots | Number of iterations |
|---|---|---|---|---|---|---|
| Unweighted MaxCut | 28 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 30 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 32 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 80 | 100% | 480 | 60 | 90k | 9 |
| Unweighted MaxCut | 100 | 100% | 330 | 60 | 60k | 6 |
| Unweighted MaxCut | 120 | 100% | 370 | 60 | 60k | 6 |
| HUBO 1 | 156 | 100% | 600 | 70 | 100k | 10 |
| HUBO 2 | 156 | 100% | 600 | 70 | 100k | 10 |
- 28, 30, 32 Qubit의 MaxCut 인스턴스는 ibm_sherbrooke에서 실행되었습니다. 80, 100, 120 인스턴스는 Heron r2 프로세서에서 실행되었습니다.
- HUBO 인스턴스도 Heron r2 프로세서에서 실행되었습니다.
모든 벤치마크 인스턴스는 GitHub에서 접근할 수 있습니다(Kipu benchmark instances 참조). 이러한 인스턴스를 실행하는 예제는 예제 3: 벤치마크 인스턴스에서 찾을 수 있습니다.
입력 및 출력
입력
Quantum Optimizer가 허용하는 모든 입력 매개변수에 대해서는 다음 표를 참조하세요. 후속 옵션 섹션에서 사용 가능한 options에 대해 더 자세히 설명합니다.
| Name | Type | Description | Required | Default | Example |
|---|---|---|---|---|---|
| problem | Dict[str, float] | The coefficients of the optimization problem formulated as QUBO/HUBO or spin format. For more information on the problem specification, see Accepted problem formats | Yes | N/A | {"()": -21.0, "(0, 4)": 0.5,"(0, 2)": 0.5,"(0, 1)": 0.5,"(1, 3)": 0.5} |
| problem_type | str | Specify whether the problem coefficients are in binary (QUBO/HUBO) or spin format. The two possibilities are "spin" or "binary" | Yes | N/A | "spin" |
| backend_name | str | Name of the backend to make the query | Yes | N/A | "ibm_fez" |
| options | Dict[str, Any] | Options to handle the hardware submission, such as number of shots. For further details on the options configuration, see the Options section | No | To see the default values of the options configuration see the Options section | {"shots": 5000, "num_iterations": 3, "use_session": True, "seed_transpiler": 42} |
허용되는 문제 형식
problem 및 problem_type 인수는 다음 형식의 최적화 문제를 인코딩합니다
where