Conceptos iniciales de Microsoft Q# (Q-sharp, Quantum Katas) Lenguaje de Computación Cuántica
En esta página:
Con el paso de los años la computación cuántica se potencia más, en la actualidad los cálculos cuánticos ayudan a resolver problemas complejos en tan solo segundos, en otras épocas resolver problemas complejos tomaban años y eso significaba un atraso para la humanidad, los ámbitos como la medicina, ingeniería, transportes, medio ambiente, ciencia, etc. están trabajando con la computación cuántica y se esta dando un gran avance en dichas áreas, en este artículo hablaremos de Microsoft Q# el entorno de desarrollo de aplicaciones cuánticas que Microsoft lanzó hace unos meses.
Introduccion a Q# (Q-sharp)
Q# es un lenguaje de programación exclusivo para escribir algoritmos cuánticos, estos algoritmos cuánticos componen un sub-programa con fines específicos, este programa se ejecutará en un procesador cuántico en una computadora ‘host’ que soporte cálculos cuánticos
Un modelo natural de definir a la computación cuántica es tratarlo como un co-procesador informático utilizado en GPU, FPGA, etc. Cuando se ejecuta una acción en el procesador, este trabaja con una lógica principal y se ejecuta de manera normal o clásica ‘host’ y cuando esta lógica necesita procesar datos cuánticamente, utilizará un sub-programa cuántico en otro plano para obtener resultados de manera rápida, luego el ‘host’ obtiene estos resultados del sub-programa para ser mostrados en pantalla.
En este modelo hay 3 niveles de computación:
- Computación Clásica Multitarea: Esta lee los datos que ingresen al sistema, hace la configuración del computo cuántico, desencadena el cálculo cuántico, procesa los resultados del cálculo y muestra los resultados en pantalla al usuario.
- Computación Cuántica: Esta ocurre necesariamente en el dispositivo cuántico y contiene un algoritmo cuántico.
- Computación Clásica: Es requerida para la ejecución de un algoritmo cuántico.
Instalación Q#
Microsoft nos ofrece la posibilidad de trabajar con un Kit de Desarrollo Cuántico para Visual Studio y para instalarlo debes de tener instalado NET Framework y porsupuesto Microsoft Visual Studio, puedes descargar la versión Visual Studio Community que es gratuita.
- Descarga Microsoft Visual Studio y paso seguido procede a instalarlo.
- Descarga el Kit de Desarrollo Cuántico para Visual Studio que esta en el Marketplace y tambien instálalo.
- Si no tienes instalado Net Framework descarga la versión Runtime (Obligatorio para trabajar con Visual Studio).
Con esto ya tenemos instalado las herramientas necesarias para empezar a crear algoritmos cuánticos.
Escribiendo tu primer Programa Cuántico
Abre Visual Studio y Crea un Nuevo Proyecto, luego en la parte izquierda en las plantillas selecciona Instalados y por ultimo dale click en Aplicación Q# y le ponemos de nombre Operación.
Se nos Crea un archivo llamado Operacion.qs y le agregamos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
namespace Quantum.Operacion { open Microsoft.Quantum.Primitive; open Microsoft.Quantum.Canon; operation Set (count : Int, initial: Result) : (Int,Int) { body { mutable numOnes = 0; using (qubits = Qubit[1]) { for (test in 1..count) { Set (initial, qubits[0]); let res = M (qubits[0]); // Cuenta el número de unidades que vimos: if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // Devuelve la cantidad de veces que vimos a | 0> y la cantidad de veces que vimos a | 1> return (count-numOnes, numOnes); } } } |
En el código anterior la operación Set realizará bucles en las interacciones en el count, luego se setea un valor initial en un qubit y medirá M los resultados. Juntará estadísticas en ceros y unos y las mostrará al usuario que hizo el pedido. Luego restablece el qubit al estado Zero.
Todas las operaciones mencionadas se definen como operaciones cuánticas primitivas que están definidas en el namespace Microsoft.Quantum.Primitive.
Ahora vamos a crear un archivo llamado Operador.cs en donde colocaremos el siguiente código que esta en lenguaje C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using Microsoft.Quantum.Simulation.Core; using Microsoft.Quantum.Simulation.Simulators; namespace Quantum.Bell { class Driver { static void Main(string[] args) { using (var sim = new QuantumSimulator()) { // Probamos valores iniciales Result[] initials = new Result[] { Result.Zero, Result.One }; foreach (Result initial in initials) { var res = BellTest.Run(sim, 1000, initial).Result; var (numZeros, numOnes) = res; System.Console.WriteLine( $"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4}"); } } System.Console.WriteLine("Presiona una tecla para continuar..."); System.Console.ReadKey(); } } } |
Ahora para ver los resultados, presionamos F5 en Visual Studio y obtenemos lo siguiente:
1 2 3 4 5 |
Init:Zero 0s=1000 1s=0 Init:One 0s=0 1s=1000 Presiona una tecla para continuar... |
Con esto tenemos nuestros primero resultados creados con algoritmos cuánticos, si intentas crear cálculos más complejos, tenlo por seguro que se procesarán a un velocidad increíble, esa es quizás la principal característica de la computación cuántica, resultados de problemas grandes en tiempos inimaginables.
Repositorio Github
Microsoft puso a disposición un repositorio con plantillas y ejemplos para trabajar con menos complicaciones con Q#, para acceder al repositorio puedes acceder haciendo click en este enlace, en el repositorio encontrarás documentación de como implementarlo y despegarlo adecuadamente para trabajar con Q# o directamente puedes clonarlo abriendo tu consola de comando Gitbash:
1 2 3 |
$ git clone https://github.com/Microsoft/QuantumKatas.git |
Notas
- Los pasos mencionados pueden variar en futuras versiones, hasta la fecha de esta artículo los pasos son los correctos.
- Si te enteraste de nuevos cambios, por favor compártelo en un comentario, para que los desarrolladores estén enterados, apoyémonos el uno al otro.
Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.
- Articulos
- 30-07-2018
- 30-07-2018
- Crear un Post - Eventos Devs - Foro
Social
Redes Sociales (Developers)
Redes Sociales (Digital)