Skip to main content
IBM Quantum Platform

JIJ SQOA 솔버 API 참조

  • Qiskit Functions — 파트너 기관에서 개발한 사전 구축된 도구 — 는 소프트웨어 개발 워크플로의 일부를 추상화하여, 유틸리티급 알고리즘 탐색 및 애플리케이션 개발을 간소화하고 가속화합니다. 이 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

유형: `bool`

기본값: False

모든 관련 양자 컴퓨팅 작업을 세션 모드로 실행합니다.

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 입력, 즉 다음과 같은 형태의 문제를 처리합니다:

min⁡x∈{0,1}n  or  max⁡x∈{0,1}nc+∑ibixi+∑i<jqijxixj.\min_{x \in \{0, 1\}^n} \; \text{or} \; \max_{x \in \{0, 1\}^n} \quad c + \sum_{i} b_i x_i + \sum_{i < j} q_{ij} x_i x_j .

지원되는 인스턴스는 다음과 같은 속성을 가집니다:

  • 적어도 하나의 결정 변수
  • 적용 중인 제약 조건 없음
  • 유한 계수를 갖는 최대 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차화해야 합니다.
  • 이항 대각 항은 제출 "(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]]`

실행 단계별로 분류된 해당 실행의 리소스 사용 현황. 이 다섯 단계는 항상 다음과 같은 순서로 나타납니다:

  1. RUNNING: MAPPING: 문제의 유효성 검사, 전처리 및 샘플링 회로로 변환을 요청합니다.
  2. RUNNING: OPTIMIZING_FOR_HARDWARE: 선택된 백엔드에 대한 회로 트랜스파일레이션.
  3. RUNNING: WAITING_FOR_QPU: 양자 컴퓨팅 작업 제출 및 대기 시간.
  4. RUNNING: EXECUTING_QPU: QPU에서의 실행.
  5. 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 숫자입니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.