Loading examples/hybrid/adapt_h2.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -10,13 +10,14 @@ __qpu__ void initial_state(qreg q) { int main() { // Define the Hamiltonian using the QCOR API std::string opstr = "(0.1202,0) Z0 Z1 + (0.168336,0) Z0 Z2 + (0.1202,0) Z2 Z3 + (0.17028,0) " "Z2 + (0.17028,0) Z0 + (0.165607,0) Z0 Z3 + (0.0454063,0) Y0 Y1 X2 X3 + " "(-0.106477,0) + (-0.220041,0) Z3 + (0.174073,0) Z1 Z3 + (0.0454063,0) " "Y0 Y1 Y2 Y3 + (-0.220041,0) Z1 + (0.165607,0) Z1 Z2 + (0.0454063,0) X0 " "X1 Y2 Y3 + (0.0454063,0) X0 X1 X2 X3"; auto H = qcor::createObservable(opstr); auto H = 0.1202 * Z(0) * Z(1) + 0.168336 * Z(0) * Z(2) + 0.1202 * Z(2) * Z(3) + 0.17028 * Z(2) + 0.17028 * Z(0) + 0.165607 * Z(0) * Z(3) + 0.0454063 * Y(0) * Y(1) * X(2) * X(3) - 0.106477 - 0.220041 * Z(3) + 0.174073 * Z(1) * Z(3) + 0.0454063 * Y(0) * Y(1) * Y(2) * Y(3) - 0.220041 * Z(1) + 0.165607 * Z(1) * Z(2) + 0.0454063 * X(0) * X(1) * Y(2) * Y(3) + 0.0454063 * X(0) * X(1) * X(2) * X(3); // optimizer auto optimizer = qcor::createOptimizer("nlopt"); Loading lib/hybrid/qcor_hybrid.hpp +5 −4 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ void execute_adapt(qreg q, const HeterogeneousMap &&m); template <typename... KernelArgs> class ADAPT { protected: std::shared_ptr<Observable> observable; Observable &observable; void *state_prep_ptr; const std::string pool, subAlgo; const int nElectrons; Loading @@ -481,14 +481,15 @@ protected: qreg q; public: ADAPT(void (*state_prep_kernel)(std::shared_ptr<CompositeInstruction>, qreg, KernelArgs...), std::shared_ptr<Observable> obs, const int _ne, const std::string _pool, Observable &obs, const int _ne, const std::string _pool, const std::string _subAlgo, std::shared_ptr<Optimizer> opt) : state_prep_ptr(reinterpret_cast<void *>(state_prep_kernel)), observable(obs), nElectrons(_ne), pool(_pool), subAlgo(_subAlgo), optimizer(opt) { q = qalloc(obs->nBits()); q = qalloc(obs.nBits()); } double execute(KernelArgs... initial_args) { Loading @@ -507,7 +508,7 @@ public: {"optimizer", optimizer}, {"sub-algorithm", subAlgo}, {"accelerator", accelerator}, {"observable", observable}}); {"observable", &observable}}); return q.results()->getInformation("opt-val").template as<double>(); } }; Loading Loading
examples/hybrid/adapt_h2.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -10,13 +10,14 @@ __qpu__ void initial_state(qreg q) { int main() { // Define the Hamiltonian using the QCOR API std::string opstr = "(0.1202,0) Z0 Z1 + (0.168336,0) Z0 Z2 + (0.1202,0) Z2 Z3 + (0.17028,0) " "Z2 + (0.17028,0) Z0 + (0.165607,0) Z0 Z3 + (0.0454063,0) Y0 Y1 X2 X3 + " "(-0.106477,0) + (-0.220041,0) Z3 + (0.174073,0) Z1 Z3 + (0.0454063,0) " "Y0 Y1 Y2 Y3 + (-0.220041,0) Z1 + (0.165607,0) Z1 Z2 + (0.0454063,0) X0 " "X1 Y2 Y3 + (0.0454063,0) X0 X1 X2 X3"; auto H = qcor::createObservable(opstr); auto H = 0.1202 * Z(0) * Z(1) + 0.168336 * Z(0) * Z(2) + 0.1202 * Z(2) * Z(3) + 0.17028 * Z(2) + 0.17028 * Z(0) + 0.165607 * Z(0) * Z(3) + 0.0454063 * Y(0) * Y(1) * X(2) * X(3) - 0.106477 - 0.220041 * Z(3) + 0.174073 * Z(1) * Z(3) + 0.0454063 * Y(0) * Y(1) * Y(2) * Y(3) - 0.220041 * Z(1) + 0.165607 * Z(1) * Z(2) + 0.0454063 * X(0) * X(1) * Y(2) * Y(3) + 0.0454063 * X(0) * X(1) * X(2) * X(3); // optimizer auto optimizer = qcor::createOptimizer("nlopt"); Loading
lib/hybrid/qcor_hybrid.hpp +5 −4 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ void execute_adapt(qreg q, const HeterogeneousMap &&m); template <typename... KernelArgs> class ADAPT { protected: std::shared_ptr<Observable> observable; Observable &observable; void *state_prep_ptr; const std::string pool, subAlgo; const int nElectrons; Loading @@ -481,14 +481,15 @@ protected: qreg q; public: ADAPT(void (*state_prep_kernel)(std::shared_ptr<CompositeInstruction>, qreg, KernelArgs...), std::shared_ptr<Observable> obs, const int _ne, const std::string _pool, Observable &obs, const int _ne, const std::string _pool, const std::string _subAlgo, std::shared_ptr<Optimizer> opt) : state_prep_ptr(reinterpret_cast<void *>(state_prep_kernel)), observable(obs), nElectrons(_ne), pool(_pool), subAlgo(_subAlgo), optimizer(opt) { q = qalloc(obs->nBits()); q = qalloc(obs.nBits()); } double execute(KernelArgs... initial_args) { Loading @@ -507,7 +508,7 @@ public: {"optimizer", optimizer}, {"sub-algorithm", subAlgo}, {"accelerator", accelerator}, {"observable", observable}}); {"observable", &observable}}); return q.results()->getInformation("opt-val").template as<double>(); } }; Loading