Loading examples/hybrid/adapt_h2.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -19,14 +19,20 @@ int main() { 0.0454063 * X(0) * X(1) * X(2) * X(3); // optimizer auto optimizer = qcor::createOptimizer("nlopt"); auto optimizer = qcor::createOptimizer( "nlopt", {std::make_pair("nlopt-optimizer", "l-bfgs")}); // Create ADAPT-VQE instance // Run H2 with the singlet-adapted-uccsd pool int nElectrons = 2; std::string pool = "singlet-adapted-uccsd"; std::string subAlgo = "vqe"; qcor::ADAPT adapt(initial_state, H, nElectrons, pool, subAlgo, optimizer); std::string gradStrategy = "central-difference-gradient"; qcor::ADAPT adapt(initial_state, H, optimizer, {{"sub-algorithm", subAlgo}, {"pool", pool}, {"n-electrons", nElectrons}, {"gradient_strategy", gradStrategy}}); // Execute! auto energy = adapt.execute(); Loading lib/hybrid/qcor_hybrid.hpp +13 −14 Original line number Diff line number Diff line Loading @@ -474,21 +474,19 @@ template <typename... KernelArgs> class ADAPT { protected: Observable &observable; void *state_prep_ptr; const std::string pool, subAlgo; const int nElectrons; std::shared_ptr<Optimizer> optimizer; HeterogeneousMap options; // Register of qubits to operate on qreg q; public: ADAPT(void (*state_prep_kernel)(std::shared_ptr<CompositeInstruction>, qreg, KernelArgs...), Observable &obs, const int _ne, const std::string _pool, const std::string _subAlgo, std::shared_ptr<Optimizer> opt) Observable &obs, std::shared_ptr<Optimizer> opt, HeterogeneousMap _options) : state_prep_ptr(reinterpret_cast<void *>(state_prep_kernel)), observable(obs), nElectrons(_ne), pool(_pool), subAlgo(_subAlgo), optimizer(opt) { observable(obs), optimizer(opt), options(_options) { q = qalloc(obs.nBits()); } Loading @@ -502,13 +500,14 @@ public: // parent_composite now has the circuit in it auto accelerator = xacc::internal_compiler::get_qpu(); execute_adapt(q, {{"n-electrons", nElectrons}, {"pool", pool}, {"initial-state", parent_composite}, {"optimizer", optimizer}, {"sub-algorithm", subAlgo}, {"accelerator", accelerator}, {"observable", &observable}}); options.insert("initial-state", parent_composite); options.insert("observable", &observable); options.insert("optimizer", optimizer); options.insert("accelerator", accelerator); execute_adapt(q, std::move(options)); return q.results()->getInformation("opt-val").template as<double>(); } }; Loading Loading
examples/hybrid/adapt_h2.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -19,14 +19,20 @@ int main() { 0.0454063 * X(0) * X(1) * X(2) * X(3); // optimizer auto optimizer = qcor::createOptimizer("nlopt"); auto optimizer = qcor::createOptimizer( "nlopt", {std::make_pair("nlopt-optimizer", "l-bfgs")}); // Create ADAPT-VQE instance // Run H2 with the singlet-adapted-uccsd pool int nElectrons = 2; std::string pool = "singlet-adapted-uccsd"; std::string subAlgo = "vqe"; qcor::ADAPT adapt(initial_state, H, nElectrons, pool, subAlgo, optimizer); std::string gradStrategy = "central-difference-gradient"; qcor::ADAPT adapt(initial_state, H, optimizer, {{"sub-algorithm", subAlgo}, {"pool", pool}, {"n-electrons", nElectrons}, {"gradient_strategy", gradStrategy}}); // Execute! auto energy = adapt.execute(); Loading
lib/hybrid/qcor_hybrid.hpp +13 −14 Original line number Diff line number Diff line Loading @@ -474,21 +474,19 @@ template <typename... KernelArgs> class ADAPT { protected: Observable &observable; void *state_prep_ptr; const std::string pool, subAlgo; const int nElectrons; std::shared_ptr<Optimizer> optimizer; HeterogeneousMap options; // Register of qubits to operate on qreg q; public: ADAPT(void (*state_prep_kernel)(std::shared_ptr<CompositeInstruction>, qreg, KernelArgs...), Observable &obs, const int _ne, const std::string _pool, const std::string _subAlgo, std::shared_ptr<Optimizer> opt) Observable &obs, std::shared_ptr<Optimizer> opt, HeterogeneousMap _options) : state_prep_ptr(reinterpret_cast<void *>(state_prep_kernel)), observable(obs), nElectrons(_ne), pool(_pool), subAlgo(_subAlgo), optimizer(opt) { observable(obs), optimizer(opt), options(_options) { q = qalloc(obs.nBits()); } Loading @@ -502,13 +500,14 @@ public: // parent_composite now has the circuit in it auto accelerator = xacc::internal_compiler::get_qpu(); execute_adapt(q, {{"n-electrons", nElectrons}, {"pool", pool}, {"initial-state", parent_composite}, {"optimizer", optimizer}, {"sub-algorithm", subAlgo}, {"accelerator", accelerator}, {"observable", &observable}}); options.insert("initial-state", parent_composite); options.insert("observable", &observable); options.insert("optimizer", optimizer); options.insert("accelerator", accelerator); execute_adapt(q, std::move(options)); return q.results()->getInformation("opt-val").template as<double>(); } }; Loading