24 std::vector<std::vector<std::int64_t>> &
key_list,
26 std::vector<std::pair<std::int64_t, std::int64_t>> &
bounds) {
28 throw std::runtime_error(
"Key and value lists must have the same size.");
31 std::unordered_set<std::int64_t>
index_set;
45 for (std::size_t i = 0; i <
key_list.size(); ++i) {
50 std::unordered_map<std::int64_t, std::int64_t>
index_count;
56 std::vector<std::pair<std::int64_t, std::int64_t>>
int_keys;
69 [](
const auto &a,
const auto &b) {
70 return a.first.size() < b.first.size();
88 for (std::int64_t index = 0; index < this->
num_variables_; ++index) {
96 throw std::runtime_error(
"Variable with no interactions found.");
107 return std::min(std::abs(
current_min), std::abs(value));
114 return std::max(std::abs(
current_max), std::abs(value));
119 double abs_min_dE = std::numeric_limits<double>::infinity();
127 const std::int64_t index =
iter.first;
138 }
else if (
upper < 0) {
142 throw std::runtime_error(
"Bounds are not valid.");
152 throw std::runtime_error(
"No valid energy difference found.");
162 const std::vector<std::pair<std::int64_t, std::int64_t>> &
GetBounds()
const {
167 std::pair<std::vector<std::pair<std::int64_t, std::int64_t>>,
double>> &
171 const std::vector<std::vector<std::pair<std::size_t, std::int64_t>>> &
185 std::vector<std::pair<std::int64_t, std::int64_t>>
bounds_;
188 std::pair<std::vector<std::pair<std::int64_t, std::int64_t>>,
double>>
190 std::vector<std::vector<std::pair<std::size_t, std::int64_t>>>
Definition integer_polynomial_model.hpp:20
std::pair< double, double > GetMaxMinTerms() const
Definition integer_polynomial_model.hpp:102
std::int64_t GetEachVariableDegreeAt(const std::int64_t index) const
Definition integer_polynomial_model.hpp:175
const std::vector< std::pair< std::int64_t, std::int64_t > > & GetBounds() const
Definition integer_polynomial_model.hpp:162
std::vector< std::pair< std::vector< std::pair< std::int64_t, std::int64_t > >, double > > key_value_list_
Definition integer_polynomial_model.hpp:189
std::int64_t num_variables_
Definition integer_polynomial_model.hpp:184
IntegerPolynomialModel(std::vector< std::vector< std::int64_t > > &key_list, std::vector< double > &value_list, std::vector< std::pair< std::int64_t, std::int64_t > > &bounds)
Definition integer_polynomial_model.hpp:23
double GetConstant() const
Definition integer_polynomial_model.hpp:165
const std::vector< std::int64_t > & GetIndexList() const
Definition integer_polynomial_model.hpp:158
std::vector< std::int64_t > max_variable_degree_
Definition integer_polynomial_model.hpp:192
std::int64_t GetNumVariables() const
Definition integer_polynomial_model.hpp:161
const std::vector< std::vector< std::pair< std::size_t, std::int64_t > > > & GetIndexToInteractions() const
Definition integer_polynomial_model.hpp:172
const std::vector< std::int64_t > & GetEachVariableDegree() const
Definition integer_polynomial_model.hpp:178
std::vector< std::pair< std::int64_t, std::int64_t > > bounds_
Definition integer_polynomial_model.hpp:185
const std::vector< std::pair< std::vector< std::pair< std::int64_t, std::int64_t > >, double > > & GetKeyValueList() const
Definition integer_polynomial_model.hpp:168
std::vector< std::int64_t > index_list_
Definition integer_polynomial_model.hpp:183
std::vector< std::vector< std::pair< std::size_t, std::int64_t > > > index_to_interactions_
Definition integer_polynomial_model.hpp:191
double constant_
Definition integer_polynomial_model.hpp:186
auto json_parse(const json &obj, bool relabel=true)
parse json object from bqm.to_serializable
Definition parse.hpp:50
Definition algorithm.hpp:24