21#include <unordered_map>
26#include <Eigen/Sparse>
43 static_assert(std::is_floating_point<FloatType>::value,
44 "FloatType must be floating-point type.");
51 Eigen::SparseMatrix<FloatType, Eigen::RowMajor>;
97 if (interaction.rows() != interaction.cols()) {
98 std::runtime_error(
"interaction.rows() != interaction.cols()");
124 return this->
energy(spins);
128 Eigen::ColMajor> &
spins)
const {
140 if (
spins.size() !=
this->get_num_spins()) {
141 throw std::out_of_range(
"Out of range in energy in CSRSparse graph.");
144 using Vec = Eigen::Matrix<FloatType, Eigen::Dynamic, 1, Eigen::ColMajor>;
146 for (
size_t i = 0; i <
spins.size(); i++) {
152 return (s.transpose() *
158 Eigen::ColMajor> &
spins)
const {
160 for (
size_t i = 0; i <
temp_spins.size(); i++) {
CSRSparse graph: just store CSR Sparse Matrix (Eigen::Sparse) The Hamiltonian is like.
Definition csr_sparse.hpp:42
const Interactions get_interactions() const
get interactions (Eigen Matrix)
Definition csr_sparse.hpp:183
FloatType calc_energy(const Spins &spins) const
calculate total energy
Definition csr_sparse.hpp:123
FloatType energy(const Spins &spins) const
calculate total energy
Definition csr_sparse.hpp:139
FloatType energy(const Eigen::Matrix< FloatType, Eigen::Dynamic, 1, Eigen::ColMajor > &spins) const
Definition csr_sparse.hpp:157
CSRSparse(const Interactions &interaction)
CSRSparse constructor.
Definition csr_sparse.hpp:96
CSRSparse(const CSRSparse< FloatType > &)=default
CSRSparse copy constructor.
CSRSparse(CSRSparse< FloatType > &&)=default
CSRSparse move constructor.
Interactions _J
interactions (the number of intereactions is num_spins*(num_spins+1)/2).
Definition csr_sparse.hpp:75
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > Interactions
interaction type
Definition csr_sparse.hpp:51
FloatType calc_energy(const Eigen::Matrix< FloatType, Eigen::Dynamic, 1, Eigen::ColMajor > &spins) const
Definition csr_sparse.hpp:127
FloatType value_type
float type
Definition csr_sparse.hpp:56
Abstract graph class.
Definition graph.hpp:37
std::size_t get_num_spins() const noexcept
get number of spins
Definition graph.hpp:89
auto json_parse(const json &obj, bool relabel=true)
parse json object from bqm.to_serializable
Definition parse.hpp:50
std::vector< Spin > Spins
Definition graph.hpp:27
Definition algorithm.hpp:24
double FloatType
Note:
Definition compile_config.hpp:37