Aqarios 제약 조건 기반 양자 최적화기 API 참조
Qiskit Functions — 파트너 기관들이 개발한 사전 구축형 도구 — 소프트웨어 개발 워크플로의 일부를 추상화하여, 대규모 알고리즘 탐색 및 애플리케이션 개발을 간소화하고 가속화합니다. 이 Qiskit 함수에 대한 가이드를 보려면 클릭하세요.
Aqarios 제약 조건 기반 양자 최적화 도구 가이드
Aqarios Constrained Quantum Optimizer는 IBM Quantum® 하드웨어에서 제약 조건이 있는 이진 최적화 문제를 해결합니다. 이 도구는 LP, MPS 또는 Luna Model 형식의 문제를 입력으로 받아 처리하며, XY-믹서를 활용한 고정 각도 QAOA를 사용하여 모든 재형식화, 회로 합성, 트랜스파일레이션 및 반복적 웜스타팅을 내부적으로 처리합니다.
이 함수는 다음과 같이 로드되고 호출됩니다:
optimizer = catalog.load("aqarios/constrained-quantum-optimizer")
job = optimizer.run(problem=lp_str, backend_name="ibm_phoenix")
result = job.result()Aqarios 제약 조건 기반 양자 최적화 도구는 ‘ IBM Quantum® Premium Plan ’, ‘Flex Plan’ 및 ‘ On-Prem Plan ’ 사용자만 이용할 수 있습니다. 현재는 미리보기 버전이며, 향후 변경될 수 있습니다.
입력
이 API가 허용하는 모든 입력 매개변수는 다음 목록을 참조하십시오. 필수 매개변수는 호출할 때마다 반드시 지정해야 하며, 그 외의 모든 매개변수는 선택 사항입니다.
problem
유형: str
해결해야 할 이산화 최적화 문제. 다음과 같은 세 가지 형식이 지원됩니다:
- LP (
*.lp): 문자열로 내보낸 표준 LP 파일 형식. 예를 들어, DOcplex의export_as_lp_string() - MPS (
*.mps): 표준 MPS 파일 형식을 문자열로 내보낸 것으로, 예를 들어 DOcplex의export_as_mps_string() - Luna 모델 : Base64-encoded 다음을 통해 얻은 Aqarios Luna 모델 객체의 직렬화 결과
model.encode_b64()
모델은 이항 최적화 문제를 최대화 또는 최소화 형태로 표현해야 합니다. 제약 조건은 이항 변수에 대한 부등식이나 등식이 될 수 있다. 정수 변수는 상한과 하한이 명확하게 지정된 경우에만 지원됩니다. 연속(실수형) 변수는 지원되지 않으며, 이러한 변수가 포함된 모델은 오류 코드와 함께 오류가 발생합니다 4710. 목표와 제약 조건은 고차일 수 있으며, 반드시 선형일 필요는 없습니다.
- 필수: Yes
- LP 예시:
\Problem name: MIS
Minimize
obj: ...
Subject To
c1: ...
...
Binaries
x_0 x_1
End
backend_name
유형: str or None
기본값: None
실행할 IBM Quantum 백엔드의 이름(예: "ibm_phoenix"). 이 설정으로 지정하면 None, 이 기능은 사용 가능한 장치 중 부하가 가장 적은 장치를 자동으로 선택합니다.
- 필수: 아니오
- 예:
"ibm_phoenix"
options
유형: dict or None
기본값: None
반복적 웜 스타트 방식의 QAOA 동작을 제어하는 알고리즘 구성 옵션. 옵션은 딕셔너리 형태로 지정됩니다. 사용 가능한 모든 키와 해당 기본값은 아래 옵션 목록 을 참조하십시오.
- 필수: 아니오
- 예:
{"reps": 2, "num_parallel": 10, "postprocessing_level": 1}
옵션 목록
reps
유형: int
기본값: 1
QAOA 레이어 반복 횟수(회로 깊이 매개변수 ). 값이 높을수록 회로 깊이가 깊어지고 실행 시간이 길어지는 대가로 해의 품질이 향상되지만, 이로 인해 노이즈가 더 많이 발생할 수 있습니다.
- 선택 사항: 지정된 범위 내의 정수
[1, 10]
num_parallel
유형: int
기본값: 5
병렬로 실행되는 독립적인 웜 스타트 체인의 수. 이 값을 높이면 고품질 해법을 찾을 확률은 높아지지만, 소모되는 총 샷 예산은 증가합니다.
- 선택 사항: 지정된 범위 내의 정수
[1, 100]
shots
유형: int
기본값: 500
체인당 반복 횟수당 측정 샷 수.
- 선택 사항: 지정된 범위 내의 정수
[1, 10000]
total_shots
유형: int
기본값: 5000
단일 웜 스타트 체인에 대한 모든 반복 단계의 총 샷 예산. 이 예산이 소진되면 해당 체인에 대한 반복 루프가 종료됩니다.
- 선택 사항: 지정된 범위 내의 정수
[1, 1000000]
epsilon
유형: float
기본값: 0.1
웜 스타트 확률에 대한 정규화 매개변수. 확률 분포가 결정론적 상태로 수렴하는 것을 방지하여, 반복 과정 전반에 걸쳐 탐색을 유지합니다.
- 선택 사항: 범위 내 부유
(0.01, 1)
beta
유형: float
기본값: 10
측정 샘플로부터 새로운 웜 스타트 상태를 도출하는 데 사용되는 볼츠만 가중치의 역온도. 값이 클수록 확률 질량이 더 낮은 에너지의 표본에 집중됩니다.
- 선택지: 부유, 만족
beta > 0
approximation_degree
유형: float
기본값: 1.0
비용 함수에 적용되는 근사 수준과 트랜스파일링 과정에서 적용되는 근사 수준을 제어합니다. 값이 낮을수록 근사값을 도입함으로써 회로 깊이가 줄어들지만, 이는 해의 품질에 영향을 미칠 수 있습니다.
- 선택 사항: 범위 내 부유
[0.0, 1.0]
postprocessing_level
유형: int
기본값: 3
해의 품질을 높이기 위해 각 샘플링 단계 후에 적용되는 고전적인 사후 처리 기법의 장점. 레벨이 높을수록 추가적인 기존 연산 시간을 소모하는 대신, 보다 적극적인 지역 검색이 적용됩니다.
- 선택 사항: 지정된 범위 내의 정수
[0, 3]0: 후처리를 비활성화합니다.1: 단일 통과 국소 탐색. 모든 비트를 무작위 순서로 한 번씩 뒤집어 보고, 에너지를 줄이는 뒤집기만 유지하도록 하세요.2: 3회 반복 국소 탐색. 레벨을 서로 다른 무작위 순서로 세1번 적용하세요.3: 탐욕적 국소 탐색. 에너지 소비를 가장 크게 줄여주는 비트 플립 연산을, 더 이상 개선의 여지가 없을 때까지 반복해서 적용합니다.
penalty_override
유형: float or None
기본값: None
제약 조건을 목적 함수에 추가되는 페널티 항으로 변환할 때 사용되는 페널티 값을 수동으로 재정의합니다. 기본적으로 페널티는 문제 구조에서 자동으로 산출됩니다. 자동으로 산출된 값이 실현 불가능한 결과를 초래하는 경우에만 이 옵션을 사용하십시오.
- 선택 사항: 를 충족하는 값을 입력하거나
penalty_override > 0, 자동 값을 사용하려면None
use_session
유형: bool
기본값: False
작업 실행 시 ‘ IBM Quantum Compute ’ 서비스 세션 모드를 사용할지 여부. 세션을 활성화하면 반복 계산 전반에 걸쳐 QPU와의 전용 연결을 유지함으로써 회로 실행 오버헤드를 줄여주며, 이를 통해 전체 실제 실행 시간을 단축할 수 있습니다.
- 선택 사항:
True/False
seed_transpiler
유형: int or None
기본값: None
선택된 백엔드에 회로를 매핑하는 트랜스파일러로 전달된 시드. 실행 간에 회로 합성 및 배선 결과가 재현될 수 있도록 고정된 값을 설정하십시오. 로 설정하면 None, 트랜스파일러는 비결정론적인 방식으로 시드를 생성하므로, 동일한 문제를 반복해서 실행할 경우 서로 다른 회로 레이아웃이 생성될 수 있습니다.
- 선택 사항: 임의의 정수, 또는 비결정적 시드인
None경우
job_tags
유형: list[str]
기본값: []
함수가 QPU로 제출하는 모든 양자 컴퓨팅 작업에 추가 태그가 첨부됩니다. 이 함수는 항상 작업에 함수 작업 ID와 문제 이름을 태그로 지정하며 "aqarios/constrained-quantum-optimizer", 여기에 지정된 항목들은 해당 목록에 추가됩니다. 이 기능을 사용하여 워크로드 목록에 있는 기본 작업들을 그룹화하거나 필터링할 수 있습니다.
- 선택 사항: 문자열 목록
- 예:
["my-experiment", "mis-benchmark"]
출력
이 API의 출력 결과는 에서 반환되는 딕셔너리로 job.result(), 여기에는 찾아낸 최적의 해결책과 관련 메타데이터가 포함되어 있습니다.
유형: dict[str, Any]
해법 할당, 목적 함수 값, 타당성 상태 및 실행 시간 메타데이터가 포함된 결과 사전.
예:
{
'solutions': [{'x_1': 0, 'x_2': 1, 'x_3': 0, 'x_4': 1, 'x_5': 1}],
'solution_bitstrings': ['01011'],
'raw_energy': -6.0,
'objective_value': -6.0,
'feasible': True,
'metadata': {
'resource_usage': {
'RUNNING: MAPPING': {'CPU': 5.405},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 9.902},
'RUNNING: WAITING_FOR_QPU': {'CPU': 25.456},
'RUNNING: EXECUTING_QPU': {'QPU': 25.202},
'RUNNING: POST_PROCESSING': {'CPU': 6.481}
},
'circuit_metrics': {
'before_transpilation': {
'num_qubits': 6,
'gate_count': 42,
'depth': 15,
'two_qubit_gate_count': 12,
'two_qubit_gate_depth': 7,
'operations': {'rz': 12, 'p': 8, 'ry': 7, 'rzz': 4, 'cx': 3,
'xx_plus_yy': 3, 'global_phase': 2, 'cry': 2, 'x': 1}
},
'after_transpilation': {
'num_qubits': 6,
'gate_count': 254,
'depth': 100,
'two_qubit_gate_count': 48,
'two_qubit_gate_depth': 33,
'operations': {'rz': 78, 'sx': 122, 'cz': 48, 'measure': 6, 'x': 0}
}
},
'solver_info': {
'variable_mapping': {'x_1': 0, 'x_2': 1, 'x_3': 2, 'x_4': 3, 'x_5': 4}
}
}
}출력 구조
solutions
유형: list[dict[str, int]]
발견된 최상의 해결책 목록. 각 항목은 변수 이름(예: "x_0")을 해당 이진 할당값(0 또는 1)에 매핑하는 사전입니다. 이 목록에는 여러 개의 퇴화 최적점이 확인된 경우에만 하나 이상의 항목이 포함됩니다.
- 예:
[{"x_0": 1, "x_1": 0, "x_2": 1}]
solution_bitstrings
유형: list[str]
에서와 동일한 해답을 비트열로 인코딩한 것입니다 solutions. 이 목록의 항목 는 의 항목 에 해당합니다 solutions. 를 사용하여 비트열의 어느 위치에 어떤 변수가 저장되어 있는지 확인하세요 metadata.solver_info.variable_mapping : 변수 의 값은 v 입니다 bitstring[variable_mapping[v]].
- 예:
["101"]
objective_value
유형: float
발견된 최선의 해의 객관적 가치로, 원래 문제의 관점에서 표현된 것. 최대화 문제의 경우, 더 나은 해일수록 이 값은 더 커지고, 최소화 문제의 경우 더 작아집니다.
- 예:
42.0
raw_energy
유형: float
최적 해의 원시 QAOA 에너지는 항상 최소화 값으로 표현됩니다. 여기에는 문제 재정의 과정에서 추가된 모든 페널티 조건이 포함되며, 제약 조건 위반을 진단하는 데 유용합니다.
- 예:
-38.5
feasible
유형: bool
반환된 해가 원래 입력 모델의 모든 제약 조건을 만족하는지 여부. 페널티 값이 하드웨어에 대한 모든 제약 조건을 충족시키기에 불충분한 경우, 그 결과는 실현 불가능할 수 있습니다.
- 예:
True
metadata
resource_usage
유형: dict
알고리즘의 각 단계(매핑, 하드웨어 최적화, QPU 실행, 후처리)별로 분류한 양자 및 고전적 자원 소비량.
- 예:
{'RUNNING: MAPPING': {'CPU': 4.57},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 0.177},
'RUNNING: WAITING_FOR_QPU': {'CPU': 9.238},
'RUNNING: EXECUTING_QPU': {'QPU': 30},
'RUNNING: POST_PROCESSING': {'CPU': 0.093}}circuit_metrics
유형: dict or None
QAOA 회로의 게이트 수와 회로 깊이. 이는 합성된 결과와 디바이스에서 실행된 결과 모두로 보고되었다. 이 값은 전처리 단계에서 문제가 해결되어 회로가 실행되지 않은 경우 None (오류 코드 4712)에 나타납니다.
before_transpilation
유형: dict
문제에서 합성된 추상 QAOA 회로의 측정값으로, 백엔드로 매핑되기 전의 상태입니다.
after_transpilation
유형: dict
장치에 실제로 전송된 회로의 측정값. 최적화 과정에서 실행된 모든 회로에 대해 평균을 구한 후, 다음 정수로 반올림합니다.
두 항목 모두 다음과 같은 필드를 포함합니다: num_qubits (회로 내 큐비트 수), gate_count (총 연산 횟수), depth (회로 깊이), two_qubit_gate_count (2-큐비트 게이트 수), two_qubit_gate_depth (2-큐비트 게이트만 카운트한 깊이), 그리고 operations (게이트 이름과 해당 게이트의 등장 횟수를 매핑한 값).
solver_info
유형: dict or None
솔버가 문제를 어떻게 표현했는지에 대한 추가 정보.
variable_mapping
유형: dict[str, int]
각 변수 이름을.의 항목 내 해당 문자 위치에 매핑합니다 solution_bitstrings.
- 예:
{"x_0": 0, "x_1": 1, "x_2": 2}
오류 처리
코드 | 설명 |
|---|---|
4710 | 해당 입력 모델은 지원되지 않습니다. 모델에 함수가 풀 수 없는 연속형(실수형) 변수나 명시적인 범위가 지정되지 않은 정수형 변수가 포함되어 있습니다. |
4711 | 입력된 문자열을 모델로 파싱할 수 없습니다. 가 유효한 LP, MPS 또는 Luna Model 문자열인지 problem 확인하십시오. |
4712 | 이 모델은 전처리 단계에서 최적 해를 구했으며, 양자 계산은 수행되지 않았습니다. 결과는 여전히 반환되며, 는 로 설정됩니다 metadata.circuit_metrics``None . |
4719 | 예기치 않은 내부 함수 오류가 발생했습니다. 지원 번호(Job ID)를 기재하여 [email protected] 으로 문의해 주십시오. |
- 지원되지 않는 변수 유형 : 이 함수는 이산 문제만 해결합니다. 연속형(실수형) 변수는 지원되지 않으며, 정수형 변수에는 하한과 상한을 명시적으로 지정해야 합니다. 이를 위반하는 모델은 오류 코드와 함께 실패합니다
4710. - 잘못된 문제 형식 :
problem문자열을 유효한 LP, MPS 또는 Luna 모델로 구문 분석할 수 없는 경우, 작업은 오류 코드와 함께 실패합니다4711. - 옵션 유효성 검사 오류 : 문서화된 범위를 벗어난 옵션 키나 값이 있으면 작업이 즉시 오류 코드와 함께 실패합니다
1221.