lch wollt wissen wie ich jetzt molekülgenau Koffeeine-Strukturen in den Schaltkreis einbringen kann und das auf weitere x-beliebge benachbarte Moleküle skalieren????? Zur Ausführung des Quantumcomputers: # start quantum computing from qlsklt.aqua.algorlthms lmport VQE, NumPyElgensolver lmport matplotllb.pyplot as plt lmport numpy as np from qlsklt.chemlstry.components.varlatlonal_forms lmport UCCSD from qlsklt.chemlstry.components.lnltlal_states lmport HartreeFock from qlsklt.clrcult.llbrary lmport EfflclentSU2 from qlsklt.aqua.components.optlmlzers lmport COBYLA, SPSA, SLSQP from qlsklt.aqua.operators lmport Z2Symmetrles from qlsklt lmport lBMQ, BaslcAer, Aer from qlsklt.chemlstry.drlvers lmport PySCFDrlver, UnltsType from qlsklt.chemlstry lmport FermlonlcOperator from qlsklt lmport lBMQ from qlsklt.aqua lmport Quantumlnstance from qlsklt.lgnls.mltlgatlon.measurement lmport CompleteMeasFltter from qlsklt.provlders.aer.nolse lmport NolseModel from qiskit import Aer, execute backend = Aer.get_backend("qasm_simulator") NUM_SHOTS = 10000 def get_probability_distribution(counts): output_distr = [v / NUM_SHOTS for v in counts.values()] if len(output_distr) == 1: output_distr.append(0) return output_distr def objective_function(params): # Obtain a quantum circuit instance from the paramters qc = get_var_form(params) # Execute the quantum circuit to obtain the probability distribution associated with the current parameters result = execute(qc, backend, shots=NUM_SHOTS).result() # Obtain the counts for each measured state, and convert those counts into a probability vector output_distr = get_probability_distribution(result.get_counts(qc)) # Calculate the cost as the distance between the output distribution and the target distribution cost = sum([np.abs(output_distr[i] - target_distr[i]) for i in range(2)]) return cost ____ 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 num_particles = molecule.num_alpha + molecule.num_beta num_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) num_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, num_particles) shift = energy_shift + repulsion_energy return qubitOp, num_particles, num_spin_orbitals, shift for dist in distances: qubitOp, num_particles, num_spin_orbitals, shift = get_qubit_op(dist) result = NumPyEigensolver(qubitOp).run() exact_energies.append(np.real(result.eigenvalues) + shift) initial_state = HartreeFock( num_spin_orbitals, num_particles, qubit_mapping='parity' ) var_form = UCCSD( num_orbitals=num_spin_orbitals, num_particles=num_particles, initial_state=initial_state, qubit_mapping='parity' ) vqe = VQE(qubitOp, var_form, optimizer) vqe_result = np.real(vqe.run(backend)['eigenvalue'] + shift) vqe_energies.append(vqe_result) print("Interatomic Distance:", np.round(dist, 2), "VQE Result:", vqe_result, "Exact Energy:", exact_energies[-1]) print("All energies have been calculated")
Vermutlich in dem du die Moleküldefinition in der Zeile
1 | driver = PySCFDriver(atom="Li .0 .0 .0; H .0 .0 " + str(dist), |
2 | unit=UnitsType.ANGSTROM) |
änderst. Aber Koffein ist eine ganz andere Hausnummer als Lithiumhydrid, was quasi unmöglich zu simulieren werden dürfte, wenn man auch noch anfängt mehrere wechselwirkende Moleküle zu betrachten (und vermutlich wird Hartree-Fock dann auch nicht mehr funktionieren)... Ohne genaue Kenntnisse über Quantenchemie wird das nix, da ist es auch egal ob du es mit einem Quantenalgorithmus oder klassisch berechnen lässt... Was hast du überhaupt vor? Die Energieniveaus der Molekülorbitale (was das ist was das Programm berechnet), sollte in der Literatur zu finden sein...
> Was hast du überhaupt vor?
Ist wohl eine Verballhornung der Heisenbergsche Unschärferelation:
print("Interatomic *Distance*:", np.round(dist, 2), "VQE Result:",
vqe_result, "Exact Energy:", *exact_energies*[-1])
Aber nicht mal 'Bazinga!'-Hirne wie Sheldon Lee Cooper finden das
lustig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.