101 κβαντική χημεία, πώς να ξεκινήσετε

Μεταξύ των πιθανών χρήσεων του οπτικού υλικού και των κβαντικών υπολογιστών, υπάρχει η χημική προσομοίωση. Όντας εκθετικά ταχύτερος από τους κλασσικούς ομολόγους τους, οι κβαντικοί υπολογιστές δίνουν ελπίδες για την ανάπτυξη φαρμάκων και άλλες χημικές διεργασίες. Αυτό το άρθρο δεν είναι για έμπειρους κβαντικούς ερευνητές. Είναι μια εισαγωγή για να παρακινήσουμε αγόρια και κορίτσια σε αυτόν τον τομέα. Για να αποφευχθεί η υπερφόρτωση πληροφοριών, ο σχεδιασμός του κυκλώματος δεν καλύπτεται εδώ. Αν σας ενδιαφέρει αυτό κάντε κλικ στον σύνδεσμο αναφοράς στο κάτω μέρος.

Ας ξεκινήσουμε: το σημείο εκκίνησης για την κβαντική χημεία και την ανάπτυξη φαρμάκων είναι το μεταβλητό κβαντικό ιδιολύτη (VQE). Στην πράξη, ο VQE είναι ένας υβριδικός αλγόριθμος (μερικώς κβαντικός και εν μέρει κλασικός) που υπολογίζει τις ιδιοτιμές του Ερμιτιανού πίνακα H (θα επανέλθουμε αργότερα σε αυτό). Εκτός από ενδιαφέρον για προσομοιώσεις χημείας, είναι σημαντικό γιατί είναι μια υβριδική προσέγγιση. Δηλαδή, ενώ περιμένουμε να έχουμε καλύτερα αμιγώς κβαντικά συστήματα που να λειτουργούν, κάνουμε κάτι στην κβαντική σφαίρα και κάτι σε έναν κλασικό υπολογιστή, και ωστόσο επιτυγχάνουμε αποτελέσματα.

Σε αυτό το πλαίσιο, κάτι που ακούτε πολύ είναι «συγκρίνοντας τις ενέργειες». Οι ακριβείς υπολογισμοί των παραγώγων των μοριακών ιδιοενεργειών είναι απαραίτητοι για τη μοντελοποίηση χημικών αντιδράσεων. Το πιο σημαντικό χαρακτηριστικό των μορίων είναι η βασική τους ενέργεια. Αντιπροσωπεύει τη χαμηλότερη δυνατή ενεργειακή κατάσταση που μπορεί να βρίσκεται ένα μόριο στη θεμελιώδη κατάσταση. Η ενέργεια ενός μορίου είναι πραγματικά σημαντική γιατί μας λέει τη διαμόρφωση ηλεκτρονίων αυτού του μορίου. Αυτό μπορεί να μας βοηθήσει να προσομοιώσουμε μόρια στο μέλλον.

Εάν μπορούμε να υπολογίσουμε τις ενέργειες θεμελιώδους κατάστασης, μπορούμε να μαντέψουμε ποια μόρια θα αλληλεπιδράσουν μεταξύ τους. Δυστυχώς, κάθε φορά που προσθέτουμε ένα σωματίδιο στο σύστημα, το υπολογιστικό κόστος αυξάνεται εκθετικά. Εδώ είναι χρήσιμος ένας κβαντικός υπολογιστής και το VQE.

Οι ακόλουθες ενότητες περιλαμβάνουν

  1. Ελάχιστο φόντο
  2. Εφαρμογή Qiskit του VQE
  3. Περαιτέρω αναγνώσεις και συμπεράσματα

Ιστορικό

Ο VQE είναι ένας αλγόριθμος που χρησιμοποιεί τη μέθοδο μεταβλητής που χρησιμοποιείται στην κβαντική μηχανική. Εάν είναι η πρώτη φορά που ακούτε "μέθοδος μεταβλητής", μην ανησυχείτε. Σημαίνει ότι μπορούμε να υπολογίσουμε την ενέργεια θεμελιώδους κατάστασης ενός συστήματος, κάνοντας μια σωστή εικασία της κυματικής συνάρτησής του (που ονομάζεται ansatz), η οποία αντιπροσωπεύει το μόριο.

Δεν έχετε ακούσει ποτέ για μια συνάρτηση κύματος;

Μια κυματική συνάρτηση είναι μια συνάρτηση που ορίζει την κβαντική κατάσταση ενός απομονωμένου συστήματος. Γενικά αντιπροσωπεύεται από ψ( ), προφέρεται [psi].

Το Hamiltonian είναι απλώς μια μαθηματική περιγραφή της συνολικής ενέργειας ενός συστήματος. Δεν μας τελειώνουν τα Hs (Hamiltonian, Hermitian, Hadamard…) να είστε προσεκτικοί.

Εάν μεταβάλλουμε το κύμα της συνάρτησης μέχρι να λάβουμε μια ελάχιστη τιμή της ενέργειας της θεμελιώδους κατάστασης, δεδομένου του μοντέλου μας για το Hamiltonian, μπορούμε να περιγράψουμε την ενέργεια ενός μορίου. Επιπλέον, το VQE βρίσκει τη χαμηλότερη δυνατή ιδιοτιμή ενός δεδομένου Ερμιτιανού πίνακα χάρη σε κάτι που ονομάζεται αρχή μεταβλητής.

Η αρχή της μεταβλητής δηλώνει ότι για έναν δεδομένο Ερμιτιανό πίνακα H, η προσδοκώμενη τιμή του πρέπει πάντα να είναι ίση ή μεγαλύτερη από τη χαμηλότερη δυνατή ιδιοτιμή. Για να το πετύχουμε αυτό χρειαζόμαστε ένα υβριδικό σύστημα, τόσο κβαντικό όσο και κλασικό. Το κβαντικό μέρος είναι όπου συμβαίνει η μαγεία.

Κβαντικό μέρος:

  1. Προετοιμάστε το ansatz (π.χ. παραμετροποιημένο από N γωνίες)
  2. πρώτα τι θέλουμε να χαρτογραφήσουμε το μοριακό Hamiltonian σε ένα qubit.
  3. Στη συνέχεια δοκιμάζουμε μια σειρά από συναρτήσεις κυμάτων

Κλασικό μέρος:

  1. Επιλέξτε νέες παραμέτρους (Nγωνίες) για να ελαχιστοποιήσετε τη λύση.
  2. Η διαδικασία Επανεκκίνηση στο τμήμα του κβαντικού υπολογιστή

Πιο συγκεκριμένα, χαρτογραφούμε τις αλληλεπιδράσεις των τροχιακών ηλεκτρονίων μέσα στα μόρια σε qubits για να μπορούμε να κάνουμε υπολογισμούς. Εφόσον δεν γνωρίζουμε ποια είναι η ενέργεια της θεμελιώδους κατάστασης, υπολογίζουμε την ενέργεια της θεμελιώδους κατάστασης για πολλές συναρτήσεις κύματος (συγκεκριμένη Hamiltonian σε μια δεδομένη διατομική απόσταση) και στη συνέχεια θέλουμε να υπολογίσουμε την ενέργεια αυτής της διαμόρφωσης ηλεκτρονίων. Η επιλογή του ansatz (εκπαιδευμένη εικασία είναι) είναι κρίσιμη.

Στη συνέχεια, θέλουμε να μετρήσουμε αυτές τις τιμές και να το στείλουμε στον κλασικό βελτιστοποιητή, επιτυγχάνοντας τη χαμηλότερη τιμή προσδοκίας και στέλνοντας τις τιμές πίσω στο κβαντικό μέρος επαναληπτικά. Λόγω του γεγονότος ότι καταλήγει να είναι ένας κλασικός βελτιστοποιητής, μερικοί άνθρωποι εικάζουν ότι το αποκαλούν "κβαντική μηχανική μάθηση". Ο Peruzzo συνόψισε αυτήν την επαναληπτική υβριδική προσέγγιση στο παρακάτω σχήμα:

"Speaking math", δεδομένου ενός Ερμιτιανού πίνακα H με μια άγνωστη ελάχιστη ιδιοτιμή λₘᵢₙ που σχετίζεται με την ιδιοκατάσταση |ψₘᵢₙ⟩, το VQE λαμβάνει μια εκτιμώμενη τιμή λθ που ορίζεται ως λₘᵢₙ≤λθ≡θ)|H| , όπου|ψ(θ)⟩ είναι η ιδιοκατάσταση που σχετίζεται με το λθ.

Τώρα ας δούμε πώς να το κάνουμε αυτό στην πράξη. Καθώς η πρόσβαση στο IBM quantum computer cloud είναι επί του παρόντος δωρεάν, εφαρμόζουμε στην Python τα VQE in Qiskit και PySCF (συλλογή ηλεκτρονικής δομής σε Python). Πιο συγκεκριμένα, χρησιμοποιούμε το Aqua (Algorithms for Quantum Applications), στο παρακάτω παράδειγμα έκδοσης 0.8.0.

Μπορούμε να χρησιμοποιήσουμε το QuantumLab όπως το χρησιμοποιούμε ως σημειωματάριο Jupyter:

Συνοψίζοντας τα σεμινάρια Qiskit, πρώτα εισάγουμε όλες τις απαραίτητες βιβλιοθήκες, όλη την απαραίτητη χημεία και κύκλωμα qiskit, numpy (για τη δημιουργία του εύρους, την εξαγωγή πραγματικού τμήματος και κατά προσέγγιση) και πιθανώς το matplotlib για τη γραφική παράσταση της ενέργειας στο τέλος:

from qiskit.aqua.algorithms import VQE, NumPyEigensolver
import numpy as np
from qiskit.chemistry.components.variational_forms import UCCSD
from qiskit.chemistry.components.initial_states import HartreeFock
from qiskit.circuit.library import EfficientSU2
from qiskit.aqua.components.optimizers import COBYLA, SPSA, SLSQP
from qiskit.aqua.operators import Z2Symmetries
from qiskit import IBMQ, BasicAer, Aer
from qiskit.chemistry.drivers import PySCFDriver, UnitsType
from qiskit.chemistry import FermionicOperator
from qiskit.aqua import QuantumInstance
from qiskit.ignis.mitigation.measurement import CompleteMeasFitter
from qiskit.providers.aer.noise import NoiseModel

τότε αν υπολογίσουμε την ενέργεια θεμελιώδους κατάστασης (σε αυτή την περίπτωση για το LiH) σε διάφορες διατομικές αποστάσεις χρησιμοποιώντας τη βιβλιοθήκη PySCF. Αυτή είναι η γραμμή που πρέπει να αλλάξετε για να προσομοιώσετε ένα άλλο μόριο.

Ο Fermionic Operatorείναι το αντικείμενο που πραγματικά χαρτογραφεί τους φερμιονικούς Χαμιλτονιανούς σε qubit Hamiltonians.

def get_qubit_op(dist):
    driver = PySCFDriver(atom="Li .0 .0 .0; H .0 .0 " + str(dist),              unit=UnitsType.ANGSTROM, charge=0, spin=0, basis='sto3g')
    molecule = driver.run()
    freeze_list = [0]
    remove_list = [-3, -2]
    repulsion_energy = molecule.nuclear_repulsion_energy
    n_particles = molecule.num_alpha + molecule.num_beta
    n_spin_orbitals = molecule.num_orbitals * 2
    remove_list = [x % molecule.num_orbitals for x in remove_list]
    freeze_list = [x % molecule.num_orbitals for x in freeze_list]
    remove_list = [x - len(freeze_list) for x in remove_list]
    remove_list += [x + molecule.num_orbitals - len(freeze_list)  for x in remove_list]
    freeze_list += [x + molecule.num_orbitals for x in freeze_list]
    ferOp = FermionicOperator(h1=molecule.one_body_integrals, h2=molecule.two_body_integrals)
    ferOp, energy_shift = ferOp.fermion_mode_freezing(freeze_list)
    num_spin_orbitals -= len(freeze_list)
    n_particles -= len(freeze_list)
    ferOp = ferOp.fermion_mode_elimination(remove_list)
    num_spin_orbitals -= len(remove_list)
    qubitOp = ferOp.mapping(map_type='parity', threshold=0.00000001)
    qubitOp = Z2Symmetries.two_qubit_reduction(qubitOp, n_particles)
    shift = energy_shift + repulsion_energy
    return qubitOp, n_particles, num_spin_orbitals, shift

Στη συνέχεια χρησιμοποιούμε την παραπάνω συνάρτηση σε έναν βρόχο for που επαναλαμβάνεται για όλο το εύρος των προτεινόμενων αποστάσεων (ένα εύρος μεταξύ 0,5 και 4,0 σε απόσταση 0,1).

Για κάθε επανάληψη, πρώτα υπολογίζουμε την ακριβή ενέργεια θεμελιώδους κατάστασης χρησιμοποιώντας τον τελεστή qubit και έναν κλασικό ακριβή ιδιολύτη:

get_qubit_op(dist) 

Στη συνέχεια, δημιουργείται η αρχική κατάσταση |ψ⟩ και χρησιμοποιείται για τον ορισμό του ansatz minθ(|ψ(θ)⟩).

Η συνάρτηση με το όνομα VQE που ονομάζεται ωςVQE(qubitOp, var_form, optimizer, 'paulis') υπολογίστε την προσδοκώμενη τιμή του H στο ψ(θ)⟩. Η αρχική κατάσταση ορίζεται από τη μέθοδο Hartree-Fock.

Αυτός ο τύπος βελτιστοποιητή ορίζεται από ένα άθροισμα συμβολοσειρών Pauli, όπου κάθε συμβολοσειρά Pauli (προϊόν των πινάκων Pauli σε κάθε τοποθεσία) χρησιμοποιεί ένα κύκλωμα που σχετίζεται με το αντίστοιχο |ψ(θ)⟩. Μόλις εκτελούνται όλα αυτά τα κυκλώματα, μπορούμε να υπολογίσουμε την προσδοκώμενη τιμή του H στο |ψ(θ)⟩.

Εναλλακτικά, ο αλγόριθμος περιορισμένης βελτιστοποίησης κατά γραμμική προσέγγιση (COBYLA) αρχικοποιείται ως

optimizer = COBYLA(maxiter=500, tol=0.0001)
backend = BasicAer.get_backend("statevector_simulator")
distances = np.arange(0.5, 4.0, 0.1)
exact_energies = []
vqe_energies = []
optimizer = SLSQP(maxiter=5)
for dist in distances:
    qubitOp, num_particles, n_spin_orbitals, shift = get_qubit_op(dist)
    result = NumPyEigensolver(qubitOp).run()
    exact_energies.append(np.real(result.eigenvalues) + shift)
    initial_state = HartreeFock(
        n_spin_orbitals,
        num_particles,
        qubit_mapping='parity'
    ) 
    var_form = UCCSD(
        num_orbitals=n_spin_orbitals,
        num_particles=num_particles,
        initial_state=initial_state,
        qubit_mapping='parity'
    )
    vqe = VQE(qubitOp, var_form, optimizer)
    results = np.real(vqe.run(backend)['eigenvalue'] + shift)
    vqe_energies.append(results)
    print("Interatomic Distance:", np.round(dist, 2), "VQE Result:",   results, "Exact Energy:", exact_energies[-1])
    
print("Done")

Η γραφική παράσταση ενέργειας που προκύπτει (vqe_energies και exact_energies) θα μοιάζει με αυτό:

Τα αποτελέσματα είναι πολύ καλά και πράγματι δεν βλέπουμε την ακριβή ενεργειακή καμπύλη καθώς κρύβεται πίσω από την καμπύλη VQE. Έτσι, η απόσταση που δίνει την ελάχιστη ενέργεια σε αυτό το δοχείο είναι η πραγματική διατομική απόσταση που υπάρχει μεταξύ των ατόμων λιθίου και του υδρογόνου.

Περαιτέρω αναγνώσεις και συμπεράσματα

Πιο προηγμένες υλοποιήσεις προτείνουν αποτελεσματικά κυκλώματα προετοιμασίας κατάστασης που διατηρούν τη συμμετρία. Αν σας ενδιαφέρει αυτό το προηγμένο VEQ, προτείνω τη διάλεξη στο κανάλι Qiskit από τη Σοφία Οικονόμου:

ή ελέγξτε το προηγμένο σημειωματάριο VQE από την Qiskit.

Υπάρχουν εναλλακτικές βιβλιοθήκες κβαντικής χημείας, αν και ίσως χρειαστεί να αλλάξετε και το κβαντικό νέφος. Αυτά είναι

Το OpenFermion βασίζεται στο Cirq για τον υπολογιστή Google Quantum και στο OpenQemist για το Azure με Q#



Το VQE είναι το σημείο εκκίνησης των προσομοιώσεων χημείας με κβαντικό υπολογισμό και πιο προηγμένη προσέγγιση καθώς υπάρχουν αυτές που βασίζονται σε παγωμένα φυσικά τροχιακά. Ωστόσο, είναι ενδιαφέρον καθώς αντισταθμίζει τις τρέχουσες προκλήσεις στο θορυβώδες υλικό καθαρά κβαντικό με μια υβριδική προσέγγιση. Προφανώς, απέχουμε πολύ από το να προσομοιώσουμε τη σύνδεση των πρωτεϊνών και την ανακάλυψη φαρμάκων, αλλά είναι μια αρχή.

βιβλιογραφικές αναφορές

  1. Peruzzo, Alberto, et al. "Ένας μεταβλητός επιλύτης ιδιοτιμών σε έναν φωτονικό κβαντικό επεξεργαστή." Επικοινωνίες με τη φύση 5 (2014): 4213.
  2. McClean, Jarrod R., et al. «Άγονα οροπέδια σε τοπία εκπαίδευσης κβαντικών νευρωνικών δικτύων». Επικοινωνίες με τη φύση 9.1 (2018): 1–6.
  3. Kandala, Abhinav, et al. "Αποτελεσματικός από το υλικό μεταβλητό κβαντικό ιδιολύτη για μικρά μόρια και κβαντικούς μαγνήτες." Nature 549.7671 (2017): 242.

Συνδέστε αν θέλετε