¿Cuándo será el momento en que los ingenieros de software deben saber sobre la programación cuántica?

No necesita saber nada sobre computación cuántica para programar la máquina D-Wave. Es bastante sencillo, y lo explicaré brevemente. Reformula su problema de optimización en forma binaria cuadrática sin restricciones. Parece que,

[matemática] E (\ mathbf {z}) = \ sum \ limites_ {i, j} ^ N z_i Q_ {ij} z_j [/ matemática]

[matemática] z_i \ in \ {0,1 \} [/ matemática] (son variables binarias), [matemática] N [/ matemática] es el número de variables, [matemática] Q [/ matemática] es una matriz simétrica donde las diagonales actúan como pesos variables. Puede pensar en esto en términos de un gráfico con bordes ponderados dados por términos fuera de la diagonal de [math] Q [/ math]. El problema de optimización es minimizar [math] E (\ mathbf {z}) [/ math]. Entonces, es solo su problema de programación cuadrática estándar, excepto que no hay restricciones permitidas (no es difícil de manejar por lo general) y las variables deben ser binarias (puede hacerlas reales y hacer una expansión binaria, pero esto requeriría una máquina más grande con menos ruido).

Luego incrustar ese gráfico en el gráfico de hardware de la máquina, que se compone de “celdas unitarias” conectadas, donde cada celda unitaria consta de 8 qubits conectados de manera bipartita. Si tiene un gráfico de problemas completamente conectado, su incrustación requerirá [math] (k-1) ^ 2/2 [/ math] qubits (vértices en el gráfico de hardware), donde [math] k [/ math] es el número de vértices en el gráfico del problema. Aquí hay un gráfico:

Incrustar el problema en el hardware de manera óptima es un problema NP-difícil, pero esto no es algo de lo que los programadores tendrán que preocuparse. Puede pensar en el problema de incrustar parte en una especie de compilador de control de calidad proporcionado por D-Wave (y tal vez otros proveedores que piensan que tienen mejores teóricos de gráficos). Hay varias maneras de hacer esto. Si eres realmente bueno, como esos tipos de StackOverflow, puedes pensar mucho sobre cómo reestructurar tu problema para tener una asignación más natural en el gráfico de hardware (por ejemplo, conectividad escasa).

También existe la cantidad de tiempo que desea ejecutar este optimizador (llamado el programa de recocido) (que afectará la precisión de sus resultados), pero eventualmente podría ser tan simple como ejecutar muchas instancias para descubrir un punto óptimo que podría ser automatizado (los cálculos no son largos, actualmente tienen un tiempo de ejecución máximo en milisegundos).

Pero puedes ver que nada de esto me obligó a decir nada más que solo mencionar qubits. Todos esos detalles serán de lo que se preocuparán las personas de hardware y los “diseñadores de compiladores”, aunque es probable que los “programadores cuánticos” sean muy serios sobre el rendimiento, por lo que podrían pensar más en el mapeo de lo que su codificador promedio de Python podría pensar en piratear el código de ensamblaje Si realmente está preocupado, simplemente estudie su teoría de grafos (y en particular, reduzca los problemas y los algoritmos a problemas más fundamentales), la optimización y particularmente la programación cuadrática.

Es probable que haya IDE para ayudar a las personas a programar estas máquinas más fácilmente. De hecho, ese fue mi enfoque cuando comencé a investigar sobre computación cuántica adiabática. Hasta donde yo sé, es el primer IDE para AQC. Su objetivo es ayudar a diseñar nuevos gráficos de hardware, probar problemas, diseñar y probar nuevos programas de recocido, y eventualmente podrá modelar el ruido y la física subyacente de los dispositivos. Está destinado a ser útil tanto para los desarrolladores de algoritmos como para los ingenieros que trabajan en la construcción de dispositivos AQC. Aquí está la preimpresión: [1309.3575] Un entorno de desarrollo integrado para la programación cuántica adiabática