양자 프로그래밍 with QDK & Q#
참고. 이 글은 개인적으로 양자컴퓨터 프로그래밍과 Microsoft QDK/Q# 기술을 공부한 “자료”들을 기록하면서 더불어 관심있는 다른 분들과 공유하기 위한 용도입니다. 기술에 대한 풀이나 설명을 추가하지 않습니다(아직 역량이 부족합니다^^) |
- Microsoft Learn-1-Quantum 개발 키트를 사용하여 첫 번째 Q# 프로그램 만들기
- Microsoft Learn-2-양자 기반 최적화를 사용한 최적화 문제 해결
Microsoft 양자 프로그래밍 설명서
우선 Microsoft에서 Open Source로 제공하는 양자컴퓨터 프로그래밍 개발 도구(QDK)와 언어(Q#) 그리고 관련 Azure Quantum 서비스에 등에 대한 학습 자료로서 그 시작점은 “Microsoft Quantum 설명서” 가 가장 좋을 것 같습니다.
참고. 양자컴퓨팅(기반이 되는 양자역학)의 중요 개념인 양자 중첩상태(Superposition), 얽힘(Entanglement) 등의 학술적 개념과 Qubit(양자비트) 등에 대해서는 사전 이해가 있으면 더 많은 도움이 됩니다만, 없어도 괜찮습니다 문서에서 추가 설명을 다룹니다.
양자 기반 최적화를 사용한 최적화 문제 해결
지난 “Hello Q#” 이후에 바로 “최적화” 문제를 다룬다는 것은 중간에 너무 많은 부분이 생략된, 농으로 마치 “양자 도약”을 설명해야하는 어려움이 느껴집니다. 이러한 Learning 자료가 초급 수준에서 조금 더 많이 다루어졌으면 하는 바램입니다. 따라서 다음에는 좀 더 쉬운 그리고 개발자에 적합한 주제를 참고해서 내용을 정리해봐야 겠습니다.
어려워, 어려워…하지만 제가 이해한 낮은 수준에서 설명서에 대한 간단한 소개를 넣고자 합니다.
Database에서 “최적화“란 보통 하나의 쿼리가 가질 수 있는 수 많은 실행 계획 중에서 비용이 저렴하면서 성능이 괜찮은 방법을 선택하는 것을 말하죠, 수학이나 통계학에서는 어떤 함수의 최댓값이나 최솟값을 찾는 것을 의미합니다, 대표적으로 미분 가능한 함수가 그에 해당하죠.
예를 들어
와 같은 함수가 있을 때 x가 어떤 값에서 함수가 최소가 되는지 알 수 있습니다. R 언어를 사용할 경우 optimize() 함수를 이용하면 자동으로 함수의 최솟값이나 최댓값과 그에 해당하는 x 값을 찾아줍니다.
이번 과제는 양자 기반 알고리즘을 이용해서 그러한 “최적화”를 수행하는 내용을 다룹니다. 그 예제의 하나로 두 개의 컨테이너 선에 컨테이너를 싣는데 무게 배분을 최대한 균등하게 배치하는 것입니다. 즉 이 경우 두 컨테이너 선의 컨테이너 무게 차이를 최소로 하는 함수값을 찾는 것입니다.
저에게는 많이 어려웠습니다^^; 물리, 양자, 혹은 수학적 의미에 최적화에 대해서 익숙하지 않은 분들은 저와 같은 느낌이실겁니다. 그래도 한 번 끝까지 쭉~ 읽어보시면 어떤 내용인지 대략적인 감은 잡을 수 있을 겁니다.
실제 Q# 예제는 여기에 없지만, 다음에 찾게되면 공부해보고 결과 공유하겠습니다.
학습 목차는 아래와 같습니다.
요약 부분에 양자 기반 최적화 이해에 도움이 되는 학술적인 주제와 관련 링크도 포함되어 있으니 참고하세요.
언젠가 Q# 양자 프로그래밍을 사람들에게 소개해 줄 수 있는 그날을 고대하며… 😀