Address o1 review comments
parent
a25a0a923b
commit
4fa192248d
|
@ -43,18 +43,20 @@ struct HybridGaussianConditional::Helper {
|
||||||
|
|
||||||
/// Construct from a vector of mean and sigma pairs, plus extra args.
|
/// Construct from a vector of mean and sigma pairs, plus extra args.
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
Helper(const DiscreteKey &mode, const P &p, Args &&...args) {
|
explicit Helper(const DiscreteKey &mode, const P &p, Args &&...args) {
|
||||||
nrFrontals = 1;
|
nrFrontals = 1;
|
||||||
minNegLogConstant = std::numeric_limits<double>::infinity();
|
minNegLogConstant = std::numeric_limits<double>::infinity();
|
||||||
|
|
||||||
std::vector<GaussianFactorValuePair> fvs;
|
std::vector<GaussianFactorValuePair> fvs;
|
||||||
std::vector<GC::shared_ptr> gcs;
|
std::vector<GC::shared_ptr> gcs;
|
||||||
|
fvs.reserve(p.size());
|
||||||
|
gcs.reserve(p.size());
|
||||||
for (const auto &[mean, sigma] : p) {
|
for (const auto &[mean, sigma] : p) {
|
||||||
auto gaussianConditional =
|
auto gaussianConditional =
|
||||||
GC::sharedMeanAndStddev(std::forward<Args>(args)..., mean, sigma);
|
GC::sharedMeanAndStddev(std::forward<Args>(args)..., mean, sigma);
|
||||||
double value = gaussianConditional->negLogConstant();
|
double value = gaussianConditional->negLogConstant();
|
||||||
minNegLogConstant = std::min(minNegLogConstant, value);
|
minNegLogConstant = std::min(minNegLogConstant, value);
|
||||||
fvs.push_back({gaussianConditional, value});
|
fvs.emplace_back(gaussianConditional, value);
|
||||||
gcs.push_back(gaussianConditional);
|
gcs.push_back(gaussianConditional);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +65,7 @@ struct HybridGaussianConditional::Helper {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Construct from tree of GaussianConditionals.
|
/// Construct from tree of GaussianConditionals.
|
||||||
Helper(const Conditionals &conditionals)
|
explicit Helper(const Conditionals &conditionals)
|
||||||
: conditionals(conditionals),
|
: conditionals(conditionals),
|
||||||
minNegLogConstant(std::numeric_limits<double>::infinity()) {
|
minNegLogConstant(std::numeric_limits<double>::infinity()) {
|
||||||
auto func = [this](const GC::shared_ptr &c) -> GaussianFactorValuePair {
|
auto func = [this](const GC::shared_ptr &c) -> GaussianFactorValuePair {
|
||||||
|
@ -80,7 +82,8 @@ struct HybridGaussianConditional::Helper {
|
||||||
pairs = FactorValuePairs(conditionals, func);
|
pairs = FactorValuePairs(conditionals, func);
|
||||||
if (!nrFrontals.has_value()) {
|
if (!nrFrontals.has_value()) {
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"HybridGaussianConditional: need at least one frontal variable.");
|
"HybridGaussianConditional: need at least one frontal variable. "
|
||||||
|
"Provided conditionals do not contain any frontal variables.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -100,20 +103,20 @@ HybridGaussianConditional::HybridGaussianConditional(
|
||||||
Conditionals({mode}, conditionals)) {}
|
Conditionals({mode}, conditionals)) {}
|
||||||
|
|
||||||
HybridGaussianConditional::HybridGaussianConditional(
|
HybridGaussianConditional::HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters)
|
const std::vector<std::pair<Vector, double>> ¶meters)
|
||||||
: HybridGaussianConditional(DiscreteKeys{mode},
|
: HybridGaussianConditional(DiscreteKeys{mode},
|
||||||
Helper(mode, parameters, key)) {}
|
Helper(mode, parameters, key)) {}
|
||||||
|
|
||||||
HybridGaussianConditional::HybridGaussianConditional(
|
HybridGaussianConditional::HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const Matrix &A, Key parent,
|
const Matrix &A, Key parent,
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters)
|
const std::vector<std::pair<Vector, double>> ¶meters)
|
||||||
: HybridGaussianConditional(DiscreteKeys{mode},
|
: HybridGaussianConditional(DiscreteKeys{mode},
|
||||||
Helper(mode, parameters, key, A, parent)) {}
|
Helper(mode, parameters, key, A, parent)) {}
|
||||||
|
|
||||||
HybridGaussianConditional::HybridGaussianConditional(
|
HybridGaussianConditional::HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
|
const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters)
|
const std::vector<std::pair<Vector, double>> ¶meters)
|
||||||
: HybridGaussianConditional(
|
: HybridGaussianConditional(
|
||||||
|
|
|
@ -89,18 +89,18 @@ class GTSAM_EXPORT HybridGaussianConditional
|
||||||
|
|
||||||
/// Construct from mean `mu_i` and `sigma_i`.
|
/// Construct from mean `mu_i` and `sigma_i`.
|
||||||
HybridGaussianConditional(
|
HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters);
|
const std::vector<std::pair<Vector, double>> ¶meters);
|
||||||
|
|
||||||
/// Construct from conditional mean `A1 p1 + b_i` and `sigma_i`.
|
/// Construct from conditional mean `A1 p1 + b_i` and `sigma_i`.
|
||||||
HybridGaussianConditional(
|
HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const Matrix &A, Key parent,
|
const Matrix &A, Key parent,
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters);
|
const std::vector<std::pair<Vector, double>> ¶meters);
|
||||||
|
|
||||||
/// Construct from conditional mean `A1 p1 + A2 p2 + b_i` and `sigma_i`.
|
/// Construct from conditional mean `A1 p1 + A2 p2 + b_i` and `sigma_i`.
|
||||||
HybridGaussianConditional(
|
HybridGaussianConditional(
|
||||||
const DiscreteKey mode, Key key, //
|
const DiscreteKey &mode, Key key, //
|
||||||
const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
|
const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
|
||||||
const std::vector<std::pair<Vector, double>> ¶meters);
|
const std::vector<std::pair<Vector, double>> ¶meters);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue