Compartir a través de


Tutorial: Estimación de los recursos de un problema de química cuántica

En este tutorial, calculará los recursos físicos necesarios para calcular la energía de un hamiltoniano a la precisión química de 1 mHa mediante el estimador de recursos de Azure Quantum.

En este tutorial, aprenderá lo siguiente:

  • Clone un repositorio de ejemplo de GitHub.
  • Use archivos FCIDUMP como parámetros de argumento para aplicaciones de modelado y simulación química.
  • Ejecute la estimación de recursos para un problema a gran escala, que es una muestra de química doble factorizada.

Requisitos previos

  • Un entorno de Python con Python y Pip instalados.

  • La versión más reciente de Visual Studio Code con el Kit de desarrollo de Azure Quantum y las extensiones de Python instaladas.

  • El paquete y los scipy paquetes de numpy Azure Quantum qsharp más recientes.

    python -m pip install --upgrade qsharp numpy scipy 
    

Sugerencia

No es necesario tener una cuenta de Azure para ejecutar el estimador de recursos local.

Describir el problema

En este tutorial, evaluará las estimaciones de recursos físicos del algoritmo de cúbitización descrito en Phys. Rev. Research 3, 033055 (2021) para calcular la energía de un usuario proporcionado hamiltoniano a la precisión química de 1 mHa.

El algoritmo cuántico que calcula la energía del hamiltoniano se basa en la cúbitización factorizada doble. El hamiltoniano se describe en términos de integrales de uno y dos electrones en los archivos FCIDUMP (interacción de configuración completa) proporcionados que están disponibles a través de un URI HTTPS.

El enfoque de cúbitización se basa en la estimación de fase cuántica, pero en lugar de construir el estándar $U = \exp{(-i H/\alpha)}$ de la matriz hamiltoniana $H$, se toma $U = \exp{(-i \sin^{-1} (H/\alpha)}}$, que normalmente se puede implementar con menos recursos. Mediante la factorización doble, $H$ se representa de forma compacta a través de una combinación de una elección sensata de orbitales y compresión.

Carga del ejemplo en Visual Studio Code

El código de este tutorial se puede encontrar en el repositorio de ejemplo de Q#, en estimación/df-química. Se recomienda clonar el repositorio en la máquina local para ejecutar el ejemplo.

Para clonar el repositorio, ejecute el siguiente comando desde el terminal:

git clone https://github.com/microsoft/qsharp.git

Seleccionar y pasar un archivo FCIDUMP

En este ejemplo, el hamiltoniano se describe en términos de integrales de uno y dos electrones en el formato FCIDUMP. Puede elegir uno de los archivos FCIDUMP de la tabla siguiente o seleccionar su propio archivo FCIDUMP disponible en la máquina o en línea a través de un URI HTTPS accesible públicamente.

URI Nombre de instancia Descripción
https://aka.ms/fcidump/XVIII-cas4-fb-64e-56o XVIII-cas4-fb-64e56o 64 electrones, 56 espacio activo orbital de uno de los intermedios estables en el ciclo de fijación de carbono catalizado ruthenium.
https://aka.ms/fcidump/nitrogenase-54e-54o nitrogenase_54orbital 54 electrones, 54 espacio activo orbital del núcleo activo de la nitrógenoasa.
https://aka.ms/fcidump/fe2s2-10e-40o fe2s2-10e-40o 10 electrones, 40 espacio activo orbital de [2Fe, 2S] clúster.
https://aka.ms/fcidump/polyyne-24e-24o polyyne-24e-24o 24 electrones, 24 espacio activo orbital de la molécula poliyne.
https://aka.ms/fcidump/n2-10e-8o n2-10e-8o 10 electrones, 8 espacio activo orbital de nitrógeno desasociado a 3 distancia de Angstrom.

Para pasar el archivo FCIDUMP, debe ejecutar el archivo chemistry.py y pasar el nombre de archivo O URI FCIDUMP como argumento mediante -f o --fcidumpfile.

usage: chemistry.py [-h] [-f FCIDUMPFILE]

options:
  -h, --help           
  -f FCIDUMPFILE, --fcidumpfile FCIDUMPFILE                      

Ejecución del ejemplo de química

  1. En Visual Studio Code, abra la carpeta donde ha clonado el repositorio de ejemplo de Q#.

  2. Abra un nuevo terminal, Terminal -> Nuevo terminal y vaya al directorio donde se encuentra la muestra de química cuántica. Por ejemplo, si clona el repositorio de ejemplo de Q# en la máquina local, la ruta de acceso es qsharp/samples/estimation/df-chemistry.

  3. Ejecute el archivo chemistry.py y pase el archivo FCIDUMP. Por ejemplo, el siguiente comando descargará el archivo FCIDUMP n2-10e-8o en la carpeta de trabajo y ejecutará la estimación de recursos para él.

    python chemistry.py -f https://aka.ms/fcidump/n2-10e-8o
    

    Después, puede pasar la ruta de acceso al archivo descargado en su lugar.

    python chemistry.py -f n2-10e-8o
    
  4. El resultado de la estimación de recursos se muestra en el terminal. Por ejemplo, en la salida siguiente se muestra la estimación de recursos para el archivo FCIDUMP n2-10e-8o .

    Algorithm runtime: 19 mins
    Number of physical qubits required: 207.60k
    For more detailed resource counts, see file resource_estimate.json
    

Nota:

Después de ejecutar el archivo chemistry.py, se crea un archivo resource_estimation.json en la carpeta de trabajo. El archivo resource_estimation.json contiene la salida detallada del estimador de recursos. Estos son los parámetros del trabajo, los recuentos físicos, las propiedades de generador de T, los recuentos lógicos y las propiedades de cúbit lógicos.

Cambiar target parámetros

  1. Abra el archivo chemistry.py .

  2. Los target parámetros de la estimación de recursos se pueden encontrar en la llamada al qsharp.estimate archivo chemistry.py. En el siguiente fragmento de código se muestran los parámetros usados en este tutorial.

    # Get resource estimates
    res = qsharp.estimate(qsharp_string,
                          params={"errorBudget": 0.01,
                                  "qubitParams": {"name": "qubit_maj_ns_e6"},
                                  "qecScheme": {"name": "floquet_code"}})
    
  3. Si desea cambiar los target parámetros, puede hacerlo modificando el fragmento de código anterior. Por ejemplo, el siguiente fragmento de código muestra cómo cambiar el presupuesto de errores a 0.333. Para obtener más información, consulte Personalización de los target parámetros del estimador de recursos.

    # Get resource estimates
    res = qsharp.estimate(qsharp_string,
                          params={"errorBudget": 0.333,
                                  "qubitParams": {"name": "qubit_maj_ns_e6"},
                                  "qecScheme": {"name": "floquet_code"}})
    

¿Por qué son importantes las aplicaciones de química de la computación cuántica?

Este tutorial representa un primer paso para integrar la estimación de recursos de soluciones cuánticas a problemas de estructura electrónica. Una de las aplicaciones más importantes de los equipos cuánticos escalados es resolver problemas de química cuántica. La simulación de sistemas mecánicos cuánticos complejos tiene el potencial de desbloquear avances en áreas como la captura de carbono, la inseguridad alimentaria y el diseño de mejores combustibles y materiales.

Por ejemplo, uno de los archivos FCIDUMP proporcionados en esta muestra, nitrogenase_54orbital, describe la enzima nitrogenasa. Si podría simular con precisión cómo funciona esta enzima en un nivel cuántico, podría ayudarnos a comprender cómo producirla a escala. Podrías reemplazar el proceso muy intensivo de energía que se utiliza para producir suficiente fertilizante para alimentar el planeta. Esto tiene el potencial de reducir la huella de carbono mundial y también para ayudar a abordar las preocupaciones relativas a la inseguridad alimentaria en una población creciente.

Si desea profundizar en sus conocimientos, estos son algunos experimentos que puede probar:

  • Calcule algunos archivos FCIDUMP personalizados.
  • Modifique las suposiciones en el target equipo cuántico proporcionando parámetros de cúbit personalizados.
  • Consulte los otros cuadernos de ejemplo de estimación de recursos en la galería de ejemplos de Azure Quantum.
  • El tutorial Implementación del algoritmo de búsqueda de Grover muestra cómo escribir un programa de Q# que usa el algoritmo de búsqueda de Grover para resolver un problema de coloración de grafos.
  • En el tutorial Escritura y simulación de programas de nivel de cúbit en Q# se explora cómo escribir un programa de Q# que direccione directamente los cúbits específicos.
  • En el tutorial Explorar el entrelazamiento cuántico con Q# se muestra cómo operar en cúbits con Q# para cambiar su estado y se muestran los efectos de la superposición y el entrelazamiento.
  • Quantum Katas son tutoriales autodirigidos y ejercicios de programación basados en Jupyter Notebook destinados a enseñar los elementos de la computación cuántica y la programación de Q# al mismo tiempo.