D-Wave 장치를위한 간단한 프로그램을 어떻게 작성합니까?


27

D-Wave 장치의 작업이 코드로 작성되어 장치에 제출되는 방법을 알고 싶습니다.

대답에서 간단한 문제에 대한 구체적인 예를 보는 것이 가장 좋습니다. D-Wave 장치 의 "Hello World" 는 단순한 2D Ising 모델 의 기본 상태를 찾는 것과 같은 것으로 생각 됩니다. 하드웨어에 의해 직접 실현되는 문제이기 때문입니다. 아마도 이것은 좋은 예일 것입니다. 그러나 전문 지식을 가진 사람들이 대안 적 예가 적합하다면 대안을 보게되어 기쁩니다.

답변:


24

D-Wave 세계에서 'Hello World'에 해당하는 것은 2D 바둑판 예입니다. 이 예에서는 4 개의 노드가있는 다음 사각형 그래프가 제공됩니다.

                                                  square_graph

하자 우리가 정점 색상되도록 정의 검은 경우 σ = - 1 과 경우 흰색 σ = + 1 . 목표는 그래프에 4 개의 정점이있는 바둑판 패턴을 만드는 것입니다. 이 결과를 얻기 위해 hJ 를 정의하는 다양한 방법 이 있습니다. 우선,이 문제에 대한 두 가지 가능한 해결책이 있습니다.σ나는σ나는=1σ나는=+1hJ

               checkerboard_solutions

D-Wave 양자 어 닐러는 우리가 정의한 Ising Hamiltonian을 최소화하며 다른 커플러 설정의 영향을 이해하는 것이 중요합니다. 예를 들어 커플러를 고려하십시오 .J0,1

우리로 설정하면 모두 큐 비트가 동일한 값을 가지고있는 경우, 해밀 토니안은 최소화된다. 우리는 부정적인 커플러가 서로 관련이 있다고 말합니다 . 우리로 설정하면 반면 J 0 , 1 = + 1 개의 큐빗 반대 값을 가질 경우, 해밀 토니안은 최소화된다. 따라서 포지티브 커플러는 상호 상관 됩니다.J0,1=1J0,1=+1

바둑판 예제에서, 우리는 다음 해밀턴 인을 야기하는 각 인접 큐 비트 쌍을 반 상관 시키려고합니다.

H=σ0σ1+σ0σ2+σ1σ+σ2σ

0σ0=1h0=1

H=σ0+σ0σ1+σ0σ2+σ1σ+σ2σ

코드를 작성하겠습니다!

참고 : 모든 것이 작동하려면 D-Wave의 클라우드 서비스에 액세스해야합니다.

우선, dwave_sapi2( https://cloud.dwavesys.com/qubist/downloads/ ) Python 패키지가 설치되어 있는지 확인하십시오 . D-Wave는 현재 더 높은 Python 버전을 지원하지 않기 때문에 모든 것이 Python 2.7이 될 것입니다. 즉, 필수 사항을 가져 오십시오.

from dwave_sapi2.core import solve_ising
from dwave_sapi2.embedding import find_embedding, embed_problem, unembed_answer
from dwave_sapi2.util import get_hardware_adjacency
from dwave_sapi2.remote import RemoteConnection

D-Wave Solver API에 연결하려면 SAPI 솔버, SAPI URL에 유효한 API 토큰이 필요하며 사용할 양자 프로세서를 결정해야합니다.

DWAVE_SAPI_URL = 'https://cloud.dwavesys.com/sapi'
DWAVE_TOKEN = [your D-Wave API token]
DWAVE_SOLVER = 'DW_2000Q_VFYC_1'

데드 큐 비트가없는 완전한 기능을 갖춘 칩인 D-Wave 2000Q VFYC (Virtual Full Yield Chimera)를 사용하는 것이 좋습니다! 키메라 칩 레이아웃은 다음과 같습니다.

dwave_chimera

이 시점에서 튜토리얼을 두 개의 별개의 조각으로 나눕니다. 첫 번째 섹션에서는 키메라 하드웨어 그래프에 문제를 수동으로 포함시키고 두 번째 섹션에서는 D-Wave의 내장 휴리스틱을 사용하여 하드웨어 임베딩을 찾습니다.

수동 임베딩


위의 D-Wave 2000Q 칩 레이아웃에서 왼쪽 상단의 단위 셀은 다음과 같습니다.

physical_qubits

01001427hJ

J = {(0,4): 1, (4,3): 1, (3,7): 1, (7,0): 1}
h = [-1,0,0,0,0,0,0,0,0]

h

connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)

이제 판독 횟수를 정의하고 answer_mode결과를 이미 발생 횟수별로 정렬하는 "히스토그램"으로 선택할 수 있습니다. 이제 D-Wave 양자 어 닐러를 사용하여 Ising 인스턴스를 해결할 준비가되었습니다.

params = {"answer_mode": 'histogram', "num_reads": 10000}
results = solve_ising(solver, h, J, **params)
print results

다음과 같은 결과가 나타납니다.

{
  'timing': {
    'total_real_time': 1655206,
    'anneal_time_per_run': 20,
    'post_processing_overhead_time': 13588,
    'qpu_sampling_time': 1640000,
    'readout_time_per_run': 123,
    'qpu_delay_time_per_sample': 21,
    'qpu_anneal_time_per_sample': 20,
    'total_post_processing_time': 97081,
    'qpu_programming_time': 8748,
    'run_time_chip': 1640000,
    'qpu_access_time': 1655206,
    'qpu_readout_time_per_sample': 123
  },
  'energies': [-5.0],
  'num_occurrences': [10000],
  'solutions': [
      [1, 3, 3, 1, -1, 3, 3, -1, {
          lots of 3 's that I am omitting}]]}

energies5.0004172[1,1,1,1]

휴리스틱 임베딩


Jh

J = {(0,1): 1, (0,2): 1, (1,3): 1, (2,3): 1}
h = [-1,0,0,0]

다시 원격 연결을 설정하고 D-Wave 2000Q VFYC 솔버 인스턴스를 얻습니다.

connection = RemoteConnection(DWAVE_SAPI_URL, DWAVE_TOKEN)
solver = connection.get_solver(DWAVE_SOLVER)

문제가 포함 된 것을 찾으려면 먼저 현재 하드웨어 그래프의 인접 행렬을 가져와야합니다.

adjacency = get_hardware_adjacency(solver)

이제 우리의 문제가 포함 된 것을 찾아 보자.

embedding = find_embedding(J.keys(), adjacency)

대규모 Ising 인스턴스를 처리하는 경우 여러 스레드에서 임베드를 검색하고 (여러 CPU에 대해 병렬로) 체인 길이가 가장 작은 임베딩을 선택하십시오! 체인 여러 큐빗 접속도를 증가시키기 위해 하나의 큐 비트의 역할을해야만하는 경우이다. 그러나 체인이 길수록 체인이 파손될 가능성이 높습니다. 그리고 깨진 사슬은 나쁜 결과를 낳습니다!

이제 그래프에 문제를 포함시킬 준비가되었습니다.

[h, j0, jc, embeddings] = embed_problem(h, J, embedding, adjacency)

j0jcJ

J = j0.copy()
J.update(jc)

이제 임베디드 문제를 해결할 준비가되었습니다.

params = {"answer_mode": 'histogram', "num_reads": 10000}
raw_results = solve_ising(solver, h, J, **params)

print 'Lowest energy found: {}'.format(raw_results['energies'])
print 'Number of occurences: {}'.format(raw_results['num_occurrences'])

raw_results우리가 문제를 unembed하지 않는 한 우리에게 이해가되지 않습니다. 경우에 따라 일부 체인이 끊어지면 선택적 인수로 정의 된 과반수의 투표로 고정합니다 broken_chains.

unembedded_results = unembed_answer(raw_results['solutions'],
                                    embedding, broken_chains='vote')

print 'Solution string: {}'.format(unembedded_results)

이를 실행하면 모든 판독 값에서 올바른 결과를 얻을 수 있습니다.

Lowest energy found: [-5.0]
Number of occurences: [10000]
Solution string: [[1, -1, -1, 1]]

나는이 질문에 대한 답변과 내가보기 엔 당신이에 통과 할 수있는 모든 추가 매개 변수를 체크 아웃하는 것이 좋습니다 희망 solve_ising과 같은 솔루션의 품질을 향상시키기 위해 기능 num_spin_reversal_transforms이나 postprocess.


9

제목과 질문 본문은 두 가지 다른 질문을하는 것 같습니다. 제목에서 "D-Wave 장치에 대한 간단한 프로그램을 어떻게 작성합니까?"라고 질문하고 질문 본문에서는 D-Wave의 기본 하드웨어를 사용하여 간단한 2D Ising 모델의 기본 상태를 찾는 방법을 묻습니다. 장치 및 해당 코드가 무엇인지 (더 구체적인 질문입니다).

더 일반적인 질문이므로 전자에 대답하겠습니다.

D-Wave 소프트웨어 페이지 에 따르면 :

D-Wave 2000Q 시스템은 C / C ++, Python 및 MATLAB에 사용 가능한 클라이언트 라이브러리와 함께 표준 인터넷 API (RESTful 서비스 기반)를 제공합니다. 이 인터페이스를 통해 사용자는 네트워크를 통해 클라우드 리소스로 시스템에 액세스하거나 고성능 컴퓨팅 (HPC) 환경 및 데이터 센터에 통합 할 수 있습니다. D-Wave의 호스팅 된 클라우드 서비스를 통해 액세스 할 수도 있습니다. 개발자는 D-Wave의 개발 도구 및 클라이언트 라이브러리를 사용하여 산업 표준 도구를 사용하여 기존 환경에서 알고리즘 및 응용 프로그램을 만들 수 있습니다.

사용자는 다양한 방법으로 시스템에 문제를 제출할 수 있지만 궁극적으로 문제는 큐빗의 가중치와 커플러의 강도에 해당하는 일련의 값을 나타냅니다. 시스템은 이러한 값을 다른 사용자 지정 매개 변수와 함께 가져와 단일 양자 기계 명령 (QMI)을 QPU에 보냅니다. 문제 해결 방법은 발견 된 최적의 큐 비트 구성에 해당합니다. 즉, 에너지 환경에서 가장 낮은 지점입니다. 이 값은 네트워크를 통해 사용자 프로그램으로 리턴됩니다.

양자 컴퓨터는 결정적이기보다는 확률론 적이므로 여러 값이 반환되어 최상의 솔루션뿐만 아니라 선택할 수있는 다른 훌륭한 대안을 제공 할 수 있습니다. 사용자는 시스템이 반환 할 솔루션 수를 지정할 수 있습니다.

사용자는 여러 가지 방법으로 D-Wave 양자 컴퓨터에 문제를 제출할 수 있습니다.

  1. C, C ++, Python 또는 MATLAB의 프로그램을 사용하여 QMI 작성 및 실행
  2. 다음과 같은 D-Wave 도구 사용

    • 최적화 문제를 위해 설계된 번역기 QSage

    • 제약 만족 문제에 사용되며 사용자가 문제 영역의 언어로 "말할 수 있도록"고안된 고급 언어 번역기 인 ToQ

    • QPU 에 기본적으로 적용되는 것보다 더 큰 문제에 대한 오픈 소스 하이브리드 파티셔닝 최적화 솔버 인 qbsolv Qbsolv을 수행 할 수 있습니다
      다운로드 여기에 .

    • 텍스트 편집기를 통해 생성 된 QMI를 실행하는 dw

  3. QMI를 통해 시스템을 직접 프로그래밍함으로써

이 백서다운로드 하여 D-Wave 시스템의 프로그래밍 모델에 대해 자세히 알아보십시오


5

D-Wave에 대한 입력은 상호 작용 목록이며 최근에는 큐빗의 어닐링 시간입니다.

J나는j=1

D-Wave 하드웨어 작동 방식에 대한 간결한 설명을 위해이 백서 의 부록을 권장 합니다. (전체 공개 : 저는 공동 저자입니다.)


2
링크가 아닌 여기에 답변의 더 많은 부분을 포함시키는 것이 더 좋을까요? 논문의 공동 저자 인 당신은 아마도 좋은 요약을하는 것이 가장 적합 할 것입니다.
agaitaarino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.