Go to the documentation of this file.
35 int getNumSamples()
const override;
37 bool canSample()
const override;
42 std::unique_ptr<common::RNG> _rng,
46 std::shared_ptr<const statespace::R<N>>
mSpace;
47 std::unique_ptr<common::RNG>
mRng;
57 std::unique_ptr<common::RNG> _rng,
60 :
mSpace(std::move(_space)), mRng(std::move(_rng))
62 const auto dimension =
mSpace->getDimension();
65 for (std::size_t i = 0; i < dimension; ++i)
82 VectorNd value(mDistributions.size());
84 for (
auto i = 0; i < value.size(); ++i)
85 value[i] = mDistributions[i](*mRng);
111 std::unique_ptr<common::RNG> _rng,
114 :
mSpace(std::move(_space))
115 , mRng(std::move(_rng))
116 , mLowerLimits(_lowerLimits)
117 , mUpperLimits(_upperLimits)
120 throw std::invalid_argument(
"StateSpace is null.");
122 const auto dimension =
mSpace->getDimension();
124 if (
static_cast<std::size_t
>(
mLowerLimits.size()) != dimension)
126 std::stringstream msg;
127 msg <<
"Lower limits have incorrect dimension: expected "
129 throw std::invalid_argument(msg.str());
132 if (
static_cast<std::size_t
>(
mUpperLimits.size()) != dimension)
134 std::stringstream msg;
135 msg <<
"Upper limits have incorrect dimension: expected "
137 throw std::invalid_argument(msg.str());
140 for (std::size_t i = 0; i < dimension; ++i)
144 std::stringstream msg;
145 msg <<
"Unable to sample from StateSpace because lower limit exceeds"
146 <<
" upper limit on dimension " << i <<
": " <<
mLowerLimits[i]
148 throw std::invalid_argument(msg.str());
165 return mSpace->getDimension();
172 return std::vector<ConstraintType>(
181 auto defaultOutcomeObject
182 = dynamic_cast_or_throw<DefaultTestableOutcome>(outcome);
184 const auto value =
mSpace->getValue(
187 for (
auto i = 0; i < value.size(); ++i)
189 if (value[i] < mLowerLimits[i] || value[i] > mUpperLimits[i])
191 if (defaultOutcomeObject)
192 defaultOutcomeObject->setSatisfiedFlag(
false);
197 if (defaultOutcomeObject)
198 defaultOutcomeObject->setSatisfiedFlag(
true);
218 for (
auto i = 0; i < value.size(); ++i)
220 if (value[i] < mLowerLimits[i])
221 value[i] = mLowerLimits[i];
222 else if (value[i] > mUpperLimits[i])
223 value[i] = mUpperLimits[i];
236 auto stateValue =
mSpace->getValue(
239 const std::size_t dimension =
mSpace->getDimension();
240 _out.resize(dimension);
242 for (std::size_t i = 0; i < dimension; ++i)
244 if (stateValue[i] < mLowerLimits[i])
245 _out[i] = stateValue[i] - mLowerLimits[i];
246 else if (stateValue[i] > mUpperLimits[i])
247 _out[i] = mUpperLimits[i] - stateValue[i];
258 auto stateValue =
mSpace->getValue(
261 const std::size_t dimension =
mSpace->getDimension();
262 _out = Eigen::MatrixXd::Zero(dimension, dimension);
264 for (
auto i = 0; i < _out.rows(); ++i)
266 if (stateValue[i] < mLowerLimits[i])
268 else if (stateValue[i] > mUpperLimits[i])
277 std::unique_ptr<constraint::SampleGenerator>
281 throw std::invalid_argument(
"mRng is null.");
283 for (std::size_t i = 0; i <
mSpace->getDimension(); ++i)
285 if (!std::isfinite(mLowerLimits[i]) || !std::isfinite(mUpperLimits[i]))
287 std::stringstream msg;
288 msg <<
"Unable to sample from StateSpace because dimension " << i
290 throw std::runtime_error(msg.str());
294 return std::unique_ptr<RnBoxConstraintSampleGenerator<N>>(
296 mSpace, mRng->clone(), mLowerLimits, mUpperLimits));
Represents a N-dimensional real vector space with vector addition as the group operation.
Definition: Rn.hpp:18
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
Generator for drawing samples from a Sampleable.
Definition: Sampleable.hpp:44
std::shared_ptr< const StateSpace > ConstStateSpacePtr
Definition: StateSpace.hpp:15
Simple default TestableOutcome derivative class.
Definition: DefaultTestableOutcome.hpp:13
ConstraintType
Enum for classifying constraints used in Differentiable.
Definition: Differentiable.hpp:19
Base class for constraint outcomes.
Definition: TestableOutcome.hpp:13
std::shared_ptr< const statespace::R< N > > mSpace
Definition: RnConstantSampler-impl.hpp:46
Point in a R<N>.
Definition: Rn.hpp:22
Definition: StateSpace.hpp:167