연습 - 양자 임의 비트 생성기 만들기

완료됨

일반 컴퓨터에서는 난수가 아니라 의사 난수를 생성합니다. 의사 난수 생성기는 시드라고 하는 일부 초기값을 기준으로 결정적 숫자 시퀀스를 생성합니다. 임의 값을 보다 정확하게 근사하기 위해 이 시드는 CPU 클록의 현재 시간인 경우가 많습니다.

반면 양자 컴퓨터는 실제로 난수를 생성할 수 있습니다. 중첩에서 큐비트의 측정이 확률적 프로세스이기 때문입니다. 측정 결과는 임의이며 결과를 예측할 방법이 없습니다. 이것이 양자 난수 생성기의 기본 원칙입니다.

QRNG 문제 정의

먼저 기저 상태(예: 0)의 큐비트로 시작합니다. QRNG의 첫 번째 단계는 H 연산을 사용하여 큐비트를 동일 중첩으로 설정하는 것입니다. 이 상태를 측정하면 0 또는 1이 반환되며, 각 결과의 확률은 50%입니다. 이 비트의 값은 진 난수이며 측정 후에 무엇을 얻을 지 알 수 있는 방법이 없습니다. 그러나 이 동작을 사용하여 더 큰 난수를 생성하려면 어떻게 해야 할까요?

프로세스를 4번 반복하여 다음과 같은 이진수 시퀀스를 생성한다고 가정하겠습니다.

$${0, 1, 1, 0}$$

이러한 비트를 비트 문자열로 연결하거나 결합하면 더 큰 숫자를 형성할 수 있습니다. 이 예제에서 비트 시퀀스 ${0110}$는 10진수 6과 같습니다.

$${0110_{\ binary} \equiv 6_{\ decimal}}$$

이 프로세스를 여러 번 반복하면 여러 비트를 결합하여 큰 숫자를 구성할 수 있습니다.

양자 난수 생성기는 두 단계로 빌드합니다. 이 단원에서는 단일 임의 비트를 생성하는 첫 번째 단계를 빌드합니다.

이렇게 하려면 다음을 수행합니다.

  1. 큐비트를 할당합니다.
  2. H 작업을 적용하여 큐비트를 중첩에 넣습니다.
  3. 큐비트를 측정하여 임의 비트를 가져옵니다.
  4. 큐비트를 0 상태로 다시 설정합니다.

Q# 프로그램 만들기

  1. Visual Studio Code를 열고 새 텍스트 파일 파일을 > 선택하여 새 파일을 만듭니다.

  2. 파일을 RandomNumberGenerator.qs로 저장합니다. 이 파일에는 프로그램에 대한 Q# 코드가 포함됩니다.

  3. 다음 코드를 파일에 복사합니다 RandomNumberGenerator.qs .

    namespace QuantumRandomNumberGenerator {
    
        @EntryPoint()
        operation GenerateRandomBit() : Result {
            // Allocate a qubit.
            use q = Qubit();
    
            // Set the qubit into superposition of 0 and 1 using the Hadamard 
            H(q);
    
            // At this point the qubit `q` has 50% chance of being measured in the
            // |0〉 state and 50% chance of being measured in the |1〉 state.
            // Measure the qubit value using the `M` operation, and store the
            // measurement value in the `result` variable.
            let result = M(q);
    
            // Reset qubit to the |0〉 state.
            // Qubits must be in the |0〉 state by the time they are released.
            Reset(q);
    
            // Return the result of the measurement.
            return result;
        }
    }
    

최신 QDK에는 Q# 및 양자 컴퓨팅에 대해 자세히 알아보는 데 사용할 수 있는 기본 제공 Q# 샘플 집합이 포함되어 있습니다. 샘플을 보려면 새 Q# 파일을 열고 입력 sample한 다음 옵션 목록에서 보려는 샘플을 선택합니다. 이 단원의 "임의 비트 샘플"에서 Q# 코드를 찾을 수 있습니다.

Q# 코드 탐색

  1. 작업을 마우스로 H 가리키면 정의에 대한 간단한 요약이 표시됩니다.
  2. 작업 앞에 커서를 H 놓고 마우스 오른쪽 단추를 클릭하고 정의로 이동을 선택합니다. 그러면 함수에 대한 표준 라이브러리 코드의 읽기 전용 보기가 열립니다.

로컬로 프로그램 실행

  1. 새 터미널인 터미널 > 새 터미널을 엽니다.
  2. 기본 제공 시뮬레이터에서 로컬로 프로그램을 테스트하려면 오른쪽 위에 있는 재생 아이콘 드롭다운에서 Q# 파일 실행을 선택하거나 Ctrl+F5를 누릅니다. 출력이 터미널의 디버그 콘솔에 표시됩니다.
  3. 프로그램을 다시 실행하여 다른 결과를 확인합니다.

다음 단원에서는 양자 난수 생성기의 두 번째 단계를 구현합니다. 여러 임의 비트를 결합하여 더 큰 숫자를 형성합니다.