In this challenge, you will explore optimizing quantum circuits, and more specficially - optimizing quantum oracles. In each task, you'll be given a quantum oracle that implements a certain classical function (the classical function definition is not included in the task). You'll need to rewrite the code so that it maintains its correctness, but requires as few resources as possible.
- The challenge contains 9 independent tasks. Your team can work on each task independently; tasks are submitted and scored separately.
- You can work on the challenge using a local Quantum Development Kit setup, Azure Quantum hosted notebooks, or qBraid platform.
- You'll need to create an Azure account and an Azure Quantum workspace to evaluate the resources used by your solution, regardless of the platform you're using.
- To work on each task, use the Jupyter notebooks iQuHack-challenge-2023-taskX.ipynb. Each notebook contains the step-by-step instructions for working on the task, including the code that helps you evaluate your solution.
- You will submit the tasks for challenge using qBraid platform.
Each task submission is evaluated automatically in two steps.
- First, the task correctness is checked by verifying that your code acts the same as the original oracle implementation. If your solution doesn't compile, throws a runtime error, or acts differently from the original oracle implementation, this submission will be ignored.
- Second, if the task is logically correct, its resource consumption is evaluated. For this, we submit a resource estimation job for your code, and calculate your score as (logical algorithmic qubits) * (algorithmic depth) (see resource estimation documentation, introductory workshop or resource estimation samples for the meaning of these parameters).
- Your goal is to minimize your score for each task. Your aggregate score in the scoreboard is a sum of ratios (your score for the task) / (the score of the initial oracle implementation for the task) for all tasks.
The score is defined as a product: (logical algorithmic qubits) * (algorithmic depth)
- The number of logical qubits after mapping scales proportional to the number of qubits in the circuit. Therefore, reducing the qubits in the circuit always helps, unless it leads to an increase in operations.
- The number of logical cycles depend on the number of Toffoli gates (translated to CCZ), T gates, single-qubit measurements (which you will not be using in this challenge), and rotation gates. Clifford operations do not increase logical cycles.
- Rotation gates are the most expensive ones and should be avoided when possible! (For this challenge, you should be able to avoid them completely, using only reversible computation)
- Multiple-controlled X gates (multiple-controlled Toffoli gates) are decomposed by the resource estimator. The number of cycles is 3 * (n - 1), where n >= 1 is the number of control qubits.
- The concrete formulas to determine the logical qubits and logical cycles (after mapping) from the input program is provided in the paper https://arxiv.org/pdf/2211.07629.pdf
- Number of logical qubits in (D1, page 29)
- Number of logical cycles in (D3, page 30)
- If you're working on qBraid, first fork this repository and click the above
Launch on qBraid
button. It will take you to your qBraid Lab with the repository cloned. - Once cloned, open terminal (first icon in the Other column in Launcher) and
cd
into this repo. Set the repo's remote origin using the git clone url you copied in Step 1, and then create a new branch for your team:
cd <microsoft_git_repo_name>
git remote set-url origin <url>
git branch <team_name>
git checkout <team_name>
- Use the environment manager (ENVS tab in the right sidebar) to activate the "Microsoft Q#". click Activate to add a new ipykernel for "Microsoft Q#".
-
From the FILES tab in the left sidebar, double-click on the
2023_Microsoft_Challenge
directory. -
You are now ready to begin hacking! Work with your team to complete the Microsoft Q# Challenge.
PLEASE MAKE SURE TO DO THE FOLLOWING BEFORE YOU SUBMIT
- Your team name, task #, and a point person's slack name (just in case we need to reach out).
Once you have completed any of the tasks and have added the team name, task # and a point person's slack name, if you are confused). Please got to File (File on the top left of the topbar) and click on the
Share notebook
button.
-
Enter
rickyyoung@qbraid.com
and share the file. If it shares successfully, the email should dissapear. Ricky will periodically run the autograder and the leaderboard will be updated accordingly. -
Then submit the remote project submission form that will show up on the iQuHACK website during the last 8 hours of hacking. The form will ask for a link to your repository and your team members (all of whom have to be remote iQuHACK participants to maintain elligibility).
Up to (3) teams with the highest team scores will be chosen as the winners of the Hackathon. Each member of the winning teams will get a Surface 2 headset.
- Introduction to Azure Quantum workshop at MIT iQuHack, Wednesday, January 25, 2023
- The Quantum Katas - a collection of tutorials and practice problems (chapters "Quantum Oracles and Simple Oracle Algorithms" and "Grover's search algorithm" are a good place to practice your work with marking oracles)
- Getting started with the resources estimator service
- A deep dive in resource estimation
- Azure Quantum and Microsoft Quantum Development Kit documentation