59 Eigen::Matrix<FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
62 Eigen::Matrix<FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>;
74 utility::gen_matrix_from_trotter_spins<
FloatType, Eigen::ColMajor>(
76 interaction(init_interaction.get_interactions()),
77 num_classical_spins(init_trotter_spins[0].size()), gamma(gamma) {
78 if (!(init_trotter_spins.size() >= 2)) {
79 throw std::invalid_argument(
80 "trotter slices must be equal or larger than 2.");
84 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
99 const FloatType gamma,
const size_t num_trotter_slices)
100 : interaction(init_interaction.get_interactions()),
101 num_classical_spins(init_classical_spins.size()), gamma(gamma) {
104 if (!(num_trotter_slices >= 2)) {
105 throw std::invalid_argument(
106 "trotter slices must be equal or larger than 2.");
111 for (
auto &spins : init_trotter_spins) {
112 spins = init_classical_spins;
117 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
121 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
133 this->trotter_spins =
134 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
148 trotter_spins.cols());
150 for (
auto &spins : init_trotter_spins) {
151 spins = classical_spins;
154 this->trotter_spins =
155 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
170 const auto &spins = this->trotter_spins;
173 this->dE = -2 * spins.cwiseProduct(this->interaction * spins);
188 inline static std::size_t
mod_t(std::int64_t a,
189 std::size_t num_trotter_slices) {
192 return (a + num_trotter_slices) % num_trotter_slices;
246 Eigen::Matrix<FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>;
258 utility::gen_matrix_from_trotter_spins<
FloatType, Eigen::ColMajor>(
259 init_trotter_spins)),
261 utility::gen_matrix_from_graph<Eigen::RowMajor>(init_interaction)),
262 num_classical_spins(init_trotter_spins[0].size()), gamma(gamma) {
263 if (!(init_trotter_spins.size() >= 2)) {
264 throw std::invalid_argument(
265 "trotter slices must be equal or larger than 2.");
269 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
284 const FloatType gamma,
const size_t num_trotter_slices)
286 utility::gen_matrix_from_graph<Eigen::RowMajor>(init_interaction)),
287 num_classical_spins(init_classical_spins.size()), gamma(gamma) {
291 if (!(num_trotter_slices >= 2)) {
292 throw std::invalid_argument(
293 "trotter slices must be equal or larger than 2.");
298 for (
auto &spins : init_trotter_spins) {
299 spins = init_classical_spins;
304 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
308 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
320 this->trotter_spins =
321 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
335 trotter_spins.cols());
337 for (
auto &spins : init_trotter_spins) {
338 spins = classical_spins;
341 this->trotter_spins =
342 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
357 const auto &spins = this->trotter_spins;
360 this->dE = -2 * spins.cwiseProduct(this->interaction * spins);
375 inline static std::size_t
mod_t(
const std::int64_t a,
376 const std::size_t num_trotter_slices) {
379 return (a + num_trotter_slices) % num_trotter_slices;
433 Eigen::Matrix<FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>;
445 utility::gen_matrix_from_trotter_spins<
FloatType, Eigen::ColMajor>(
446 init_trotter_spins)),
447 interaction(init_interaction.get_interactions()),
448 num_classical_spins(init_trotter_spins[0].size()), gamma(gamma) {
449 if (!(init_trotter_spins.size() >= 2)) {
450 throw std::invalid_argument(
451 "trotter slices must be equal or larger than 2.");
455 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
470 const FloatType gamma,
const size_t num_trotter_slices)
471 : interaction(init_interaction.get_interactions()),
472 num_classical_spins(init_classical_spins.size()), gamma(gamma) {
476 if (!(num_trotter_slices >= 2)) {
477 throw std::invalid_argument(
478 "trotter slices must be equal or larger than 2.");
483 for (
auto &spins : init_trotter_spins) {
484 spins = init_classical_spins;
489 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
493 rand_pool =
TrotterMatrix(num_classical_spins + 1, trotter_spins.cols());
505 this->trotter_spins =
506 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
520 trotter_spins.cols());
522 for (
auto &spins : init_trotter_spins) {
523 spins = classical_spins;
526 this->trotter_spins =
527 utility::gen_matrix_from_trotter_spins<FloatType, Eigen::ColMajor>(
542 const auto &spins = this->trotter_spins;
545 this->dE = -2 * spins.cwiseProduct(this->interaction * spins);
560 inline static std::size_t
mod_t(
const std::int64_t a,
561 const std::size_t num_trotter_slices) {
564 return (a + num_trotter_slices) % num_trotter_slices;
608template <
typename GraphType>
610 const GraphType &init_interaction,
611 const typename GraphType::value_type gamma) {
627template <
typename GraphType>
629 const GraphType &init_interaction,
630 const typename GraphType::value_type gamma,
631 const std::size_t num_trotter_slices) {
CSRSparse graph: just store CSR Sparse Matrix (Eigen::Sparse) The Hamiltonian is like.
Definition csr_sparse.hpp:42
two-body all-to-all interactions The Hamiltonian is like
Definition dense.hpp:44
Sparse graph: two-body intereactions with O(1) connectivity The Hamiltonian is like.
Definition sparse.hpp:40
std::vector< Spin > Spins
Definition graph.hpp:27
auto make_transverse_ising(const TrotterSpins &init_trotter_spins, const GraphType &init_interaction, const typename GraphType::value_type gamma)
helper function for TransverseIsing constructor
Definition transverse_ising.hpp:609
std::vector< graph::Spins > TrotterSpins
trotterized spin (std::vector<Spins>) trotter_spins[i][j] -> jth spin in ith trotter slice.
Definition transverse_ising.hpp:32
Definition algorithm.hpp:24
double FloatType
Note:
Definition compile_config.hpp:37
TransverseIsing(const TrotterSpins &init_trotter_spins, const graph::CSRSparse< FloatType > &init_interaction, FloatType gamma)
TransverseIsing Constructor.
Definition transverse_ising.hpp:441
TrotterMatrix trotter_spins
trotterlized spins
Definition transverse_ising.hpp:570
static std::size_t mod_t(const std::int64_t a, const std::size_t num_trotter_slices)
Definition transverse_ising.hpp:560
void reset_spins(const graph::Spins &classical_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:518
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Definition transverse_ising.hpp:430
std::size_t num_classical_spins
number of real classical spins (dummy spin excluded)
Definition transverse_ising.hpp:580
FloatType gamma
coefficient of transverse field term
Definition transverse_ising.hpp:585
void reset_spins(const TrotterSpins &init_trotter_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:504
TrotterMatrix dE
trotterlized dE (spatial direction)
Definition transverse_ising.hpp:595
Eigen::Matrix< FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > TrotterMatrix
Definition transverse_ising.hpp:433
TransverseIsing(const graph::Spins &init_classical_spins, const graph::CSRSparse< FloatType > &init_interaction, const FloatType gamma, const size_t num_trotter_slices)
TransverseIsing Constuctor with initial classical spins.
Definition transverse_ising.hpp:468
void reset_dE()
reset dE
Definition transverse_ising.hpp:537
const SparseMatrixXx interaction
interaction
Definition transverse_ising.hpp:575
TrotterMatrix rand_pool
rand_pool
Definition transverse_ising.hpp:590
TransverseIsing(const graph::Spins &init_classical_spins, const graph::Dense< FloatType > &init_interaction, const FloatType gamma, const size_t num_trotter_slices)
TransverseIsing Constuctor with initial classical spins.
Definition transverse_ising.hpp:97
const MatrixXx interaction
interaction
Definition transverse_ising.hpp:203
std::size_t num_classical_spins
number of real classical spins (dummy spin excluded)
Definition transverse_ising.hpp:208
Eigen::Matrix< FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > TrotterMatrix
Definition transverse_ising.hpp:62
TrotterMatrix rand_pool
rand_pool
Definition transverse_ising.hpp:218
TrotterMatrix dE
trotterlized dE (spatial direction)
Definition transverse_ising.hpp:223
TransverseIsing(const TrotterSpins &init_trotter_spins, const graph::Dense< FloatType > &init_interaction, const FloatType gamma)
TransverseIsing Constructor.
Definition transverse_ising.hpp:70
TrotterMatrix trotter_spins
trotterlized spins
Definition transverse_ising.hpp:198
FloatType gamma
coefficient of transverse field term
Definition transverse_ising.hpp:213
Eigen::Matrix< FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXx
Definition transverse_ising.hpp:59
void reset_dE()
reset dE
Definition transverse_ising.hpp:165
void reset_spins(const TrotterSpins &init_trotter_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:132
void reset_spins(const graph::Spins &classical_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:146
static std::size_t mod_t(std::int64_t a, std::size_t num_trotter_slices)
Definition transverse_ising.hpp:188
TrotterMatrix trotter_spins
trotterlized spins
Definition transverse_ising.hpp:385
std::size_t num_classical_spins
number of real classical spins (dummy spin excluded)
Definition transverse_ising.hpp:395
TrotterMatrix rand_pool
rand_pool
Definition transverse_ising.hpp:405
void reset_spins(const graph::Spins &classical_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:333
void reset_dE()
reset dE
Definition transverse_ising.hpp:352
const SparseMatrixXx interaction
interaction
Definition transverse_ising.hpp:390
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Definition transverse_ising.hpp:243
TransverseIsing(const TrotterSpins &init_trotter_spins, const graph::Sparse< FloatType > &init_interaction, FloatType gamma)
TransverseIsing Constructor.
Definition transverse_ising.hpp:254
TrotterMatrix dE
trotterlized dE (spatial direction)
Definition transverse_ising.hpp:410
FloatType gamma
coefficient of transverse field term
Definition transverse_ising.hpp:400
void reset_spins(const TrotterSpins &init_trotter_spins)
reset spins with trotter spins
Definition transverse_ising.hpp:319
TransverseIsing(const graph::Spins &init_classical_spins, const graph::Sparse< FloatType > &init_interaction, const FloatType gamma, const size_t num_trotter_slices)
TransverseIsing Constuctor with initial classical spins.
Definition transverse_ising.hpp:282
Eigen::Matrix< FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > TrotterMatrix
Definition transverse_ising.hpp:246
static std::size_t mod_t(const std::int64_t a, const std::size_t num_trotter_slices)
Definition transverse_ising.hpp:375
TransverseIsing structure with discrete-time trotter spins.
Definition transverse_ising.hpp:39
ordinary homogeneous transverse field system (using beta and annealing schedule (s) for annealing par...
Definition system.hpp:48