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

완료됨

일반 컴퓨터에서는 난수가 아니라 의사 난수를 생성합니다. 의사 난수 생성기는 일부 초기값(시드라고 함)을 기준으로 결정적 숫자 시퀀스를 생성합니다. 임의 값을 보다 정확하게 근사하기 위해 이 시드는 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. 큐비트를 제로 상태로 다시 설정합니다.

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. 기본 제공 시뮬레이터에서 로컬로 프로그램을 테스트 실행하려면 @EntryPoint() 아래 명령 목록에서 실행을 클릭하거나 Ctrl+F5를 누릅니다. 디버그 콘솔에 출력이 표시됩니다.
  3. 다른 결과를 보려면 프로그램을 다시 실행합니다.

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