JIJ SQOA 솔버 API 참조
Qiskit Functions — 파트너 기관에서 개발한 사전 구축된 도구 — 는 소프트웨어 개발 워크플로의 일부를 추상화하여, 유틸리티급 알고리즘 탐색 및 애플리케이션 개발을 간소화하고 가속화합니다. 이 Qiskit 함수에 대한 가이드를 보려면 클릭하세요.
SQOA 솔버 Qiskit 함수 가이드
입력
problem
유형: str or dict[str, float]
다음 형식 중 하나로 주어진 최적화 문제. 자세한 내용은 ‘허용되는 문제 형식’을 참조하십시오.
- 시리얼화된 OMMX 인스턴스. 를
ommx.v1.Instance로 직렬화하고to_bytes(), 해당 바이트를 표준 패딩 방식의 Base64 (RFC 4648)로 인코딩합니다.- URL 호환 Base64, 패딩이 누락된 경우, 그리고 공백이 포함된 경우 모두 허용되지 않습니다.
- 인스턴스는 이미 QUBO 형식이어야 합니다.
- 예:
base64.b64encode(instance.to_bytes()).decode(), 이는 두 변수를 가진 QUBO의 경우 다음과 같은 결과를 나타냅니다:
EiYQARoJEQAAAAAAAPA/IgF4KgEAMhEKCnN1YnNjcmlwdHMSA1swXRIoCAEQARoJEQAAAAAAAPA/IgF4KgEBMhEKCnN1YnNjcmlwdHMSA1sxXRosGioKAQASAQEaCAAAAAAAAADAIhgKCwgBEQAAAAAAAPA/CgkRAAAAAAAA8D8oAjoA - 키가 변수 ID의 튜플을 문자열로 변환한 것이며, 값이 계수인 계수 사전:
"()"상수"(i,)"선형 항의 경우"(i, j)"2차 항의 경우- 예:
{"()": 2.5, "(7,)": -1, "(11,)": 2, "(7, 11)": 3}
- 필수: Yes
variable_type
유형: str
결정 변수의 정의역: 에 "binary" 속하는 변수의 경우, 또는 {0, 1} 에 "spin" 속하는 변수의 경우 {-1, +1}.
- OMMX 인스턴스는 반드시
"binary".와 함께 제출해야 합니다. "spin"계수 사전에서만 허용됩니다.- 결과에는 동일한 정의역에 속하는 변수 값들이 보고됩니다.
- 필수: Yes
- 예:
"binary"
backend_name
유형: str or None
기본값: None
샘플링 작업을 실행하는 IBM Quantum® 백엔드의 이름. 이 매개변수가 전달될 경우, 그 값은 앞뒤에 공백이 없고 비어 있지 않은 문자열이어야 하며, 함수를 실행하는 데 사용되는 인스턴스에서 접근 가능한 백엔드의 이름을 지정해야 합니다.
- 해결할 수 없는 이름은 오류를 발생시킵니다. 이 함수는 자동 선택으로 전환되지 않습니다.
- 생략되거나 인 경우
None, 이 함수는 해당 인스턴스가 접근할 수 있는 QPU 중 부하가 가장 적은 QPU를 선택하며, 이는 와 동일하며QiskitRuntimeService.least_busy(operational=True, simulator=False), 선택된 백엔드를 작업 로그에 기록합니다. - 필수: 아니오
- 예:
"ibm_fez"
옵션
유형: dict[str, Any]
샘플링 예산, 재현성, 세션 사용, 기존 후처리 및 작업 태그를 제어하는 옵션들. 옵션을 딕셔너리 형식으로 지정합니다. 이 함수는 알 수 없는 키를 거부합니다. 사용 가능한 옵션과 해당 기본값에 대한 다음 목록을 참조하십시오.
- 필수: 아니오
예:
{
"shots": 4096,
"seed": 42,
"session": True,
"postprocessing_level": 1,
"job_tags": ["mis"]
}사용 가능한 옵션:
shots
유형: `int`
기본값: 4096
한 번의 함수 실행에 대한 총 측정 횟수. 이 함수는 내부적으로 샘플링 회로를 생성하고 이 할당량을 각 회로에 분배하므로, 이 값은 회로당 샷 수를 나타내는 것이 아닙니다. 이 인수는 양의 정수여야 합니다.
seed
유형: `int` or `None`
기본값: None
워크플로의 고전적 무작위화 단계에 대한 시드 값으로, 에서 0 까지의 범위 내에서 설정됩니다 4294967295. 생략되거나 의 경우 None, 이 함수는 시드를 생성하여 결과에 표시합니다.
이 시드는 QPU 샷 노이즈를 제어하지 않으므로, 하드웨어 결과는 샘플링 노이즈 수준까지만 재현 가능합니다. 이 문자열은 허용되지 "Auto" 않습니다.
session
postprocessing_level
유형: `int`
기본값: 1
둥글림 처리가 적용된 결과에 적용된 고전적 사후 처리의 수준.
1고전적인 국소 탐색을 통해 둥근 값 할당을 정교화하고, 정교화 이전의 할당 값을 결과에 기록합니다.0정제 과정을 건너뛰고 반올림된 할당값을 바로 반환합니다.- 다른 값은 거부됩니다.
job_tags
유형: `list[str]` or `None`
기본값: None
이 함수가 제출하는 모든 Quantum Compute 작업에 할당되는 추가 태그.
- 태그 와
JIJ는 항상 존재합니다SQOASolver. 사용자가 지정한 태그는 모두 이 목록에 추가됩니다. - 이 옵션을 생략하거나, 를 전달하거나
None, 빈 리스트를 전달하는 것은 모두 동일한 효과를 냅니다. - 이 태그들은 해당 직무 자체에는 적용되지 않습니다.
- 최상위 수준의 입력이
job_tags거부되었습니다.
problem그리고variable_type는 필수입니다. 다른 모든 필드는 선택사항입니다.- 알 수 없는 필드는 요청의 모든 단계에서 거부되며, 최상위
job_tags필드도 예외는 아니며, 이 필드는 반드시 로 전달되어야 합니다options.job_tags. backend_name생략할 수 있거나None.options생략하거나 빈 사전으로 전달할 수 있습니다.options,shots,session, 또는None로 간주되는 값은 거부됩니다postprocessing_level.- 문제는 백엔드가 해결되기 전에 유효성 검사와 변환이 이루어지기 때문에, 백엔드를 사용할 수 없는 상황에서도 유효하지 않은 문제가 보고됩니다.
- 이 함수는 서비스 및 선택된 백엔드의 한계를 넘어서는
shots값에 대해서는 상한을 두지 않습니다.
허용되는 문제 형식
OMMX 인스턴스
SQOA Solver는 2차 제약 조건이 없는 이진 최적화(QUBO) 형식의 ommx.v1.Instance 입력, 즉 다음과 같은 형태의 문제를 처리합니다:
지원되는 인스턴스는 다음과 같은 속성을 가집니다:
- 적어도 하나의 결정 변수
- 적용 중인 제약 조건 없음
- 유한 계수를 갖는 최대 2차 학위의 목표
- 목적 함수가 사용하는 변수 중에서 의사결정
Binary변수만
와 MINIMIZE 두 가지 의미 MAXIMIZE 모두 지원되며, 선형 또는 상수 목적 함수가 허용됩니다. 목적 함수가 사용하지 않는 결정 변수는 를 제외한 어떤 종류라도 될 수 있다 Continuous. 솔버는 이러한 값들을 무시하고, 최종 상태를 평가할 때 각 값에 대해 해당 범위 내에서 0에 가장 가까운 값을 할당합니다.
이 함수는 제약 조건이 있는 문제나 고차 문제를 변환하지 않습니다. 제출하기 전에 OMMX SDK를 사용하여 클라이언트 측에서 변환하십시오. 예를 들어, instance.to_qubo(uniform_penalty_weight=...).를 사용하여 변환할 수 있습니다. 이 메서드는 인스턴스를 제자리에서 변환하고, QUBO 사전과 오프셋을 반환합니다. OMMX 변환 메타데이터가 유지되도록, 반환된 딕셔너리가 아닌 변환된 인스턴스를 직렬화하십시오. 이 메타데이터는 원본 변수와 여유 변수를 재구성하고 실현 가능성을 평가하는 데 필요합니다. 적절한 페널티 가중치를 선택하는 것은 귀하의 책임입니다. 의 기본 페널티 가중치는 최적의 QUBO 상태가 원래의 제약 조건이 주어진 문제에 대해 실행 가능함을 보장하지 않습니다 1.0 . OMMX 형식으로 인스턴스를 제출하려면, 해당 인스턴스를 로 직렬화하고 to_bytes(), 바이트를 패딩 처리된 Base64 로 인코딩한 다음, 해당 문자열을 와 함께 problem 로 전달하십시오 variable_type="binary":
instance.to_qubo(uniform_penalty_weight=...) # only for a constrained instance
problem = base64.b64encode(instance.to_bytes()).decode()
job = solver.run(problem=problem, variable_type="binary")계수 사전
SQOA Solver는 IBM® 최적화 함수에서 사용하는 튜플-문자열 형식의 사전(dictionary)으로 문제를 받아들입니다:
problem = {"()": 2.5, "(7,)": -1, "(11,)": 2, "(7, 11)": 3}- 용어 및 핵심 개념
"()"상수항이며, 생략할 경우 기본값은 0입니다."(i,)"선형 항이다."(i, j)"는 2차 항입니다.- 키(key)는 문자열이지, Python 튜플이 아닙니다.
- 선형 키에서는 쉼표가 필수입니다.
- 키 내부의 공백과 쉼표 쌍의 마지막에 오는 쉼표는 허용됩니다.
- 변수 ID
- 변수 ID는 ~
0사이의 정수이며2**64 - 1, 한 항 내에서 서로 다릅니다. - 와
"(7, 11)"같은 역순 쌍은 서로"(11, 7)"더합니다. - ID가 2개 이상인 키는 거부되므로, 고차(HUBO) 문제는 제출 전에 2차화해야 합니다.
- 변수 ID는 ~
- 이항 대각 항은 제출
"(i,)"전에 선형 항으로 변환되어야(i, i)합니다. - 스핀 변수의 경우, 변수의 제곱은 상수이며 에 속한다
"()". - 계수는 유한 정수 또는 실수입니다.
- 부울 값, 문자열,
None,NaN, 및 무한대는 허용되지 않습니다. - 계수가 0인 경우도 허용되며, 해당 변수는 문제에 그대로 유지됩니다.
- 부울 값, 문자열,
- 빈 사전이나 변수가 전혀 없는 사전은 허용되지 않습니다. 사전은 항상 최소화되어 있습니다.
- 이진 변수는
0와 값을 가지며1, 스핀 변수는 와-1값을 가지는데+1, 이는 에 의해 결정됩니다variable_type. - 스핀 문제는 내부적으로 를 사용하여 변환되며
s_i = 1 - 2 x_i, 이 과정에서 상수 항과 모든 변수 ID가 보존됩니다.
변환된 OMMX 인스턴스를 직렬화하지 않고 사전(dictionary) 형태로 제출하려면, 다음에서 반환된 QUBO를 기반으로 키를 생성하십시오 to_qubo:
qubo, offset = instance.to_qubo(uniform_penalty_weight=...)
problem = {"()": offset}
for (i, j), coefficient in qubo.items():
key = str((i,)) if i == j else str(tuple(sorted((i, j))))
problem[key] = problem.get(key, 0.0) + coefficient
job = solver.run(problem=problem, variable_type="binary")to_qubo 동등한 최소화 문제의 QUBO를 반환하므로, MAXIMIZE 인스턴스에 대해 사전 목표 함수, 그리고 결과적으로 반환되는 값은 해당 인스턴스의 목표 함수의 부호가 반전된 값이 됩니다 objective_value. 사전 제출 시 OMMX 재구성 메타데이터가 유지되지 않으며, 그 결과 해당 내용이 생략됩니다 ommx_solution.
출력
유형: `dict[str, Any]`
해결책 및 메타데이터. job.result() 'Result' 사전 항목에 설명된 대로, 정확히 네 개의 키( solution, objective_value, feasible, 및 metadata)를 가진 사전을 반환합니다.
예:
{
'solution': {'x_0': 1.0, 'x_1': 0.0},
'objective_value': 1.0,
'feasible': True,
'metadata': {
'solver_info': {
'seed': 42,
'solution_before_postprocessing': {'x_0': 0.0, 'x_1': 0.0},
'ommx_solution': 'Cg8KCREAAAAAAADwPwoCCAER...'
},
'resource_usage': {
'RUNNING: MAPPING': {'CPU_TIME': 0.9},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 2.1},
'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 41.7},
'RUNNING: EXECUTING_QPU': {'QPU_TIME': 4.8},
'RUNNING: POST_PROCESSING': {'CPU_TIME': 1.3}
}
}
}결과 사전
solution
유형: `dict[str, float]`
모든 후처리 과정을 거친 후 변수를 기준으로 선별된 가장 우수한 결과물 하나. 여러 후보가 가장 높은 객관적 점수를 기록할 경우, 그중 한 명이 선정됩니다.
각 키는 변수 이름 뒤에 밑줄(_)과 10진수 결정 변수 ID가 이어지는 형식입니다 name_ID. 예를 들어, x_17. 키들은 ID 순서대로 오름차순으로 나열되므로, 이름이 중복되더라도 각 키는 고유하게 유지됩니다.
- OMMX 인스턴스의 경우, 이름과 ID는 해당 인스턴스에서 가져옵니다. 이름이 없는 변수는 를 사용하며
x, 첨자는 키의 일부가 아닙니다. - 사전 문제의 경우, 키는 제출된 사전에 사용된 ID들로
x_ID구성됩니다.
과제가 완료되었습니다. OMMX 인스턴스의 경우, 여기에는 전처리 과정에서 고정된 변수, OMMX 변환 메타데이터를 통해 재구성된 종속 변수 및 여유 변수, 그리고 목적 함수가 사용하지 않는 변수가 포함됩니다.
값은 일 1 때 0 이거나 이며 "binary" , 일 +1 때 -1 이거나 입니다 "spin".
objective_value
유형: `float`
내부 양자 이완이 아닌, 제출된 문제에 대해 평가된 반환된 할당식의 객관적 값.
- OMMX 인스턴스의 경우, 이는 인스턴스 자체의 관점에서 볼 때 그 인스턴스의 목적입니다.
- 사전 문제의 경우, 이는 상수항을 포함하여 원래 변수 영역에서 계수 사전의 값입니다.
feasible
유형: `bool`
OMMX SDK에 의해 평가된 바와 같이, 해당 할당이 제출된 인스턴스에 기록된 제약 조건(OMMX QUBO 변환 과정에서 제거된 제약 조건 포함)을 충족하는지 여부. 사전 문제는 제약 조건이 없으므로, 그 실행 가능성은 변수의 정의역에만 국한됩니다.
metadata
유형: `dict[str, Any]`
정확히 두 개의 키, solver_info 와 가 포함되어 있습니다 resource_usage.
solver_info
유형: `dict[str, Any]`
솔버 실행에 대한 정보.
seed항상 존재한다.- 그 외의 필드는 해당 정보가 있는 경우에만 포함되며, 또는
None빈 객체로 보고되는 일은 절대 없습니다.
seed
유형: `int` or `None`
이 시드는 달리기의 고전적인 무작위 단계들을 제어했다.
- 명시적 값은 변경되지 않은 채로 반환됩니다
options.seed. - 고전적인 단계를 반복할 수 있도록 자동으로 생성된 시드가 반환됩니다.
- 이 값은 문제 구조상 함수가 모든 무작위 단계를 건너뛸 수 있고 시드가 제공되지 않은 경우에만
None성립합니다.
solution_before_postprocessing
유형: `dict[str, float]`
고전적 국소 탐색 바로 앞에 오는 반올림 할당으로, 키와 값의 정의역이.와 동일합니다 solution. 로컬 검색이 실행되었을 때, 즉 일 postprocessing_level 때, 그리고 1 워크플로의 무작위화 단계가 실행되었을 때에만 나타납니다.
검색을 수행해도 개선 효과가 없더라도 기록되며, 원래의 문제에 대해서는 실행 불가능할 수도 있습니다.
ommx_solution
유형: `str`
OMMX 인스턴스에 대한 표준 결과는 로 ommx.v1.Solution 직렬화되고 패딩 to_bytes() 처리된 Base64 로 인코딩된 형태입니다.
OMMX SDK를 통해 이를 디코딩하여 목표값, 이름별 결정 변수 값, 실행 가능성 및 제약 조건 평가 결과를 확인하십시오 Solution.from_bytes(base64.b64decode(value, validate=True)) .
이 문제는 OMMX 문제로 제출된 경우에만 표시됩니다. 사전에서는 이를 생략한다.
resource_usage
유형: `dict[str, dict[str, float]]`
실행 단계별로 분류된 해당 실행의 리소스 사용 현황. 이 다섯 단계는 항상 다음과 같은 순서로 나타납니다:
RUNNING: MAPPING: 문제의 유효성 검사, 전처리 및 샘플링 회로로 변환을 요청합니다.RUNNING: OPTIMIZING_FOR_HARDWARE: 선택된 백엔드에 대한 회로 트랜스파일레이션.RUNNING: WAITING_FOR_QPU: 양자 컴퓨팅 작업 제출 및 대기 시간.RUNNING: EXECUTING_QPU: QPU에서의 실행.RUNNING: POST_PROCESSING: 측정된 비트열에 대한 고전적 처리, 전체 상태의 재구성, 제출된 인스턴스에 대한 평가, 그리고 결과 준비.
RUNNING: EXECUTING_QPU'report' 이외의 단계CPU_TIME, 해당 단계의 실제 시간(초 단위, 확인 가능한 경우).- 고전적 단계가 생략되었다고 보고되고 있다
0.0. - 이 단계
RUNNING: EXECUTING_QPU보고서에는 Quantum Compute에서 보고한 바와 같이QPU_TIME, 해당 실행에 포함된 모든 Quantum Compute 작업의 총 사용 시간을 초 단위로 표시합니다. - 모든 작업에 대해 최종 사용처를 조회할 수 없는 경우에도 결과는 여전히 반환되며,
QPU_TIME는 생략되고, 오류 코드 를 가진 비치명적 이벤트가 작업 이벤트에 기록됩니다1287.
solution,objective_value, 및feasible는 와 동일한 최종 해로부터 도출된 편의항들이다ommx_solution.- 결과의 모든 수치 값은 유한한 JSON 숫자입니다.