El Blog de QPath


q_rEngineer_QP_APP_b

Uso de Q Provider Factory de QuantumPath® con programas cuánticos implementados con Ocean SDK

Q Provider Factory es una librería Python de QrEngineer APP que permite adaptar al ecosistema QuantumPath® programas cuánticos desarrollados con diferentes SDKs de los principales proveedores cuánticos con el objetivo de facilitar a los desarrolladores el uso de todas las funcionalidades y ventajas de QPath® sin que el usuario tenga que renunciar a trabajar con su SDK favorito [1].

Una de las tecnologías soportadas por Q Provider Factory es Ocean SDK, software de desarrollo Python proporcionado por D-Wave que permite resolver problemas de optimización en sus computadoras cuánticas annealing.

A continuación mostraremos, paso a paso, como usar Q Provider Factory para transpilar y ejecutar, a través de QuantumPath®, un programa cuántico implementado con Ocean SDK. El ejemplo escogido para el artículo es el problema de optimización Nurse Scheduling”, cuyo código fuente puede encontrarse en el repositorio GitHub de D-Wave, donde hay un extenso catálogo de ejemplos de problemas de optimización implementados con este SDK.

 

 

Uso de Q Provider Factory

·       Instalar QrEngineer SDK.

Para trabajar con Q Provider Factory, es necesario instalar QrEngineer SDK, para lo que es necesario ejecutar la siguiente instrucción en una consola de comandos:

 pip install QrEngineerSDK

 

·       Identificar el fichero principal del programa cuántico a integrar con QuantumPath®, en este caso nurse_scheduling.py.

# Off-diagonal terms in soft nurse constraint

# Include only the same nurse, across days

for nurse in range(n_nurses):

    for day1 in range(n_days):

        for day2 in range(day1 + 1, n_days):

 

            ind1 = get_index(nurse, day1)

            ind2 = get_index(nurse, day2)

            Q[ind1, ind2] += 2 * lagrange_soft_nurse * preference ** 2

 

# Solve the problem, and use the offset to scale the energy

e_offset = (lagrange_hard_shift * n_days * workforce ** 2) +
(lagrange_soft_nurse * n_nurses * min_duty_days ** 2)

bqm = BinaryQuadraticModel.from_qubo(Q, offset=e_offset)

 

·       Identificar la línea donde finaliza la creación del objeto Binay Quadratic Model con la representación matemática del problema.

# Solve the problem, and use the offset to scale the energy

e_offset = (lagrange_hard_shift * n_days * workforce ** 2) +
(lagrange_soft_nurse * n_nurses * min_duty_days ** 2)

bqm = BinaryQuadraticModel.from_qubo(Q, offset=e_offset)

 

·       Añadir tras esa línea, el código de Q Provider Factory necesario para transpilar el circuito y ejecutarlo a través de QuantumPath®:

 

o   Añadir una sentencia import a la clase QProviderFactory del SDK.

 from QrEngineerSDK import QProviderFactory

 

o   Instanciar el objeto QProviderFactory, indicando las credenciales de QuantumPath®

qprovider = QProviderFactory(user = ‘***qpath user***’,
passwordSHA256=’***sha-256 encrypted password***’)

 

o   Transpilar el Binary Quadratic Model original a un circuito de annealing de QuantumPath®, usando la instrucción transpileDwaveBQM.

 

qpathCircuit = qProvider.transpileDwaveBQM(bqm)

 

o   Lanzar la ejecución del circuito a través de QuantumPath®, proporcionando el identificador de la solución, el dispositivo cuántico, el namespace, el nombre del circuito y el número de ejecuciones o sampleos a realizar.

 

qpathSolutionID = 10742
qpathDeviceID = 7
qpathCircuitName = ‘NurseScheduling’
qpathNamespace = ‘TEST’
qpathNumRepeats = 100
result =
qprovider.executeQPathCircuit(qpathSolutionID,qpathDeviceID,qpathCircuitName,
qpathNamespace,qpathNumRepeats,qpathCircuit)

 

o   Comprobar el resultado de la ejecución y mostrarlo por pantalla:

if result.success:
print(«Execution result: » + str(result.histogram))
else:
print(«Error executing the circuit» + result.error)

 

Una vez finalizada la ejecución en Q Provider Factory, el usuario puede acceder a QuantumPath® y visualizar en la solución indicada, el circuito y el flujo generados automáticamente por el SDK, y comprobar el resultado de la ejecución en la plataforma.

 

Ilustración 1: Circuito generado con QrEngineer Python SDK, visto en QuantumPath®

 

Además, como se puede observar en las siguientes ilustraciones, se pueden realizar las tareas de desarrollo y ejecución que se estimen oportunas con el problema de optimización “Nurse Scheduling” adaptado a QPath®.

Ilustración 2: Edición del Hamiltoniano “Nurse Scheduling” con Q Assets Compositor® for Annealing

IIlustración 3: QuantumPath® Runtime Dashboard

 

Hecha la adaptación no solo dispondremos del código original refactorizado y totalmente operativo, sino que tendremos como ventajas adicionales:

·       La posibilidad de lanzar el problema en todos aquellos dispositivos compatibles con tecnologías de optimización por annealing, que en QuantumPath® puede ser tanto QPU de otros proveedores como QPU basadas en puertas, mediante los servicios Q Agnostic QAOA® de la plataforma. Simplemente cambiando las cadenas de conexión y preparando la solución en el gestor de soluciones de QuantumPath®.

·       El problema generado en el repositorio de activos de QuantumPath®. Lo que, de nuevo, proporciona una migración del problema a la plataforma “no code” y meter la solución dentro del ciclo de vida de soluciones del producto.

·       Encapsular la solución resultado en soluciones que bajo los servicios de qSOA® puede ser explotados en aplicativos clásicos.

 

 

Uso de Q Provider Factory Web UI

Q Provider Factory Web UI permite acelerar el proceso anterior, automatizando la refactorización del código original del programa y escribiendo por el usuario el código de Q Provider Factory SDK necesario. Para ello el usuario deberá seguir los siguientes pasos:

·       Acceder a la herramienta y autenticarse con sus credenciales de QuantumPath®.

·       Crear un nuevo proyecto o acceder a uno ya existente.

Ilustración 4: Catálogo de proyectos de Q Provider Factory.

 

·       Adjuntar el código fuente del circuito o programa cuántico

Ilustración 5: Formulario para añadir un circuito cuántico.

Ilustración 6: Código del circuito cuántico añadido a un proyecto.

 

·       Desde la pestaña “Code migrations”, generar nuevo código de integración con QuantumPath®, indicando:

o   Namespace y nombre del circuito a crear en QPath®.

o   Solución de QPath® donde ubicar el circuito.

o   Dispositivo cuántico donde lanzar la ejecución del circuito.

Ilustración 7: Formulario para generar el código de una nueva integración con QPath®.

 

·       Del código fuente, seleccionar el fichero principal del programa y la línea donde se va a insertar el código de Q Provider Factory.

Ilustración 8: Selección de la ubicación donde se insertará el código de Q Provider Factory.

 

·       Guardar el código generado y descargarlo para su ejecución localmente.

Ilustración 9: Código generado por la herramienta.

   

·      Antes de ejecutarlo, el usuario deberá editarlo e insertar su password:

o   Codificada en Base64: 

qprovider = QProviderFactory(user = ‘***quantum path user***’,
passwordB64=’***Base64-encoded password***’)

o   O encriptada en SHA256:

provider = QProviderFactory(user = ‘***quantum path user***’,
passwordSHA256=’***sha-256 encrypted password***’)

Al lanzar la ejecución del programa desde una consola de comandos local, se puede ver el resultado de la integración y ejecución contra QPath®:

Ilustración 10: Consola de comandos ejecutando el programa “Nurse scheduling” modificado.

 

Hecho lo anterior, al igual que se mostró en el apartado de Q Provider Factory, el desarrollador podrá acceder, visualizar y también trabajar con el problema de optimización “Nurse Scheduling” desde QuantumPath®.

 

 

Resumen

QuantumPath® es una plataforma Full-Stack para el desarrollo de software cuántico y el control del ciclo de vida de sistemas híbridos cuántico/clásicos: desde la creación del algoritmo cuántico, pasando por su desarrollo, prueba y aplicación, integración, hasta su despliegue y reutilización. Una plataforma concebida para hacer posible la ingeniería y el ciclo de vida del software cuántico híbrido.

Como hemos podido ver, gracias a los adaptadores de Q Provider Factory de QPath®, ha sido tarea de pocos pasos adaptar a QuantumPath® el programa “Nurse Scheduling”. Con esto los desarrolladores pueden disponer de un nuevo valor añadido al poder utilizar otras herramientas sobre su plataforma seleccionada, además de poder continuar utilizando el código y mantenerlo en su entorno original reutilizando los contenidos ganados en dicho entorno, en este caso Ocean SDK de D-Wave, que también puede utilizarse directamente desde QPath®.

Esta opción de trabajo abre un nuevo camino al desarrollador y al desarrollo del aplicativos cuánticos de una manera poco traumática si, haciendo posible la reutilización de los conocimiento y la intuición ganada, se desea migrar para poder utilizar algunas de las muchas funcionalidades propias de QPath®, a saber: agnóstica de la tecnología de un determinado fabricante, gestión de activos, herramientas de diseño Q Assets Compositor®, metalenguajes, compiladores, transpiladores, unidades de ejecución escalables bajo demanda, resultados unificados, adaptadores de integración, catálogo de servicios cuánticos por nombrar las funcionalidades más relevantes así como aprovechar la  la arquitectura qSOA® para la integración dinámica de los programas con la IT clásica de las organizaciones, la gestión de los riesgos tecnológicos … En fin, poder utilizar toda la pila ALM orientada al desarrollo profesional de sistemas de software híbridos cuántico/clásicos.

Una vez adaptado el programa “Nurse Scheduling” a la plataforma entrará en el ciclo de vida, como un elemento ya nativo, del resto de las capacidades de QPath® (QAgnostic, QHybrid, QQuality, QManagement, QBusiness y QWorkforce). Este ecosistema ofrece otras posibilidades de explotación del desarrollo adaptado a QPath®, al poder utilizar en su ciclo de vida el amplio conjunto de herramientas, servicios, métodos y procesos de la plataforma diseñados desde la perspectiva de la Ingeniería del Software Cuántico.

[1] Martínez, A. Peterssen, G. Hevia, J.L. QrEngineer APP beta 1, herramienta de reingeniería de software cuántico (I). El Blog de QPath. Agosto 2023.