Commit 3d64d8c0 authored by Daniel Claudino's avatar Daniel Claudino
Browse files

Added HeterogeneousMap to adapt constructor



Signed-off-by: default avatarDaniel Claudino <6d3@ornl.gov>
parent 956db691
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -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();
+13 −14
Original line number Diff line number Diff line
@@ -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());
  }

@@ -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>();
  }
};