QCOR
iterative_qpe.hpp
1 #pragma once
2 #include "qcor_qsim.hpp"
3 
4 namespace qcor {
5 namespace QuaSiMo {
6 // Iterative QPE workflow to estimate the energy of a Hamiltonian operator.
7 // For the first pass, we implement this as a workflow.
8 // This can be integrated as a CostFuncEvaluator if needed.
10 public:
11  // Translate/stretch the Hamiltonian operator for QPE.
12  struct HamOpConverter {
13  double translation;
14  double stretch;
15  void fromObservable(Operator *obs);
16  std::shared_ptr<Operator> stretchObservable(Operator *obs) const;
17  double computeEnergy(double phaseVal) const;
18  };
19 
20  virtual bool initialize(const HeterogeneousMap &params) override;
21  virtual QuantumSimulationResult
22  execute(const QuantumSimulationModel &model) override;
23  virtual const std::string name() const override { return "iqpe"; }
24  virtual const std::string description() const override { return ""; }
25 
26  static std::shared_ptr<CompositeInstruction> constructQpeTrotterCircuit(
27  std::shared_ptr<Operator> obs, double trotter_step, size_t nbQubits,
28  double compensatedAncRot = 0, int steps = 1, int k = 1, double omega = 0, bool cau_opt = true);
29 
30 private:
31  std::shared_ptr<CompositeInstruction>
32  constructQpeCircuit(std::shared_ptr<Operator> obs, int k, double omega,
33  bool measure = true) const;
34 
35 private:
36  // Number of time slices (>=1)
37  int num_steps;
38  // Number of iterations (>=1)
39  int num_iters;
40  HamOpConverter ham_converter;
41 
42  bool cau_opt = true;
43 };
44 } // namespace QuaSiMo
45 } // namespace qcor
qcor::Operator
Definition: qcor_observable.hpp:24
qcor::QuaSiMo::QuantumSimulationWorkflow
Definition: qcor_qsim.hpp:256
qcor::QuaSiMo::QuantumSimulationModel
Definition: qcor_qsim.hpp:81
qcor
Definition: qcor_syntax_handler.cpp:15
qcor::QuaSiMo::IterativeQpeWorkflow::HamOpConverter
Definition: iterative_qpe.hpp:12
qcor::QuaSiMo::IterativeQpeWorkflow
Definition: iterative_qpe.hpp:9