From 9c82af688894fa1506f09b378c44e6df2b63b28b Mon Sep 17 00:00:00 2001 From: Christopher Dembia Date: Mon, 25 May 2020 20:05:28 -0700 Subject: [PATCH 1/2] Add 'negate' property to MocoOutputGoal. --- Moco/Moco/MocoGoal/MocoOutputGoal.cpp | 4 ++++ Moco/Moco/MocoGoal/MocoOutputGoal.h | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/Moco/Moco/MocoGoal/MocoOutputGoal.cpp b/Moco/Moco/MocoGoal/MocoOutputGoal.cpp index ee00cf0c6..60e05ec57 100644 --- a/Moco/Moco/MocoGoal/MocoOutputGoal.cpp +++ b/Moco/Moco/MocoGoal/MocoOutputGoal.cpp @@ -24,6 +24,7 @@ void MocoOutputGoal::constructProperties() { constructProperty_output_path(""); constructProperty_divide_by_displacement(false); constructProperty_divide_by_mass(false); + constructProperty_negate(false); } void MocoOutputGoal::initializeOnModelImpl(const Model& output) const { @@ -45,6 +46,9 @@ void MocoOutputGoal::calcIntegrandImpl( const SimTK::State& state, double& integrand) const { getModel().getSystem().realize(state, m_output->getDependsOnStage()); integrand = m_output->getValue(state); + if (get_negate()) { + integrand *= -1.0; + } } void MocoOutputGoal::calcGoalImpl( diff --git a/Moco/Moco/MocoGoal/MocoOutputGoal.h b/Moco/Moco/MocoGoal/MocoOutputGoal.h index 2669ddb9c..54ab92377 100644 --- a/Moco/Moco/MocoGoal/MocoOutputGoal.h +++ b/Moco/Moco/MocoGoal/MocoOutputGoal.h @@ -56,6 +56,11 @@ class OSIMMOCO_API MocoOutputGoal : public MocoGoal { return get_divide_by_mass(); } + /// Set if the output value should be negated (i.e., to maximize rather + /// than minimize its value). + void setNegate(bool tf) { set_negate(tf); } + bool getNegate() const { return get_negate(); } + protected: void initializeOnModelImpl(const Model&) const override; void calcIntegrandImpl( @@ -72,6 +77,10 @@ class OSIMMOCO_API MocoOutputGoal : public MocoGoal { "false)"); OpenSim_DECLARE_PROPERTY(divide_by_mass, bool, "Divide by the model's total mass (default: false)"); + OpenSim_DECLARE_PROPERTY(negate, bool, + "Negate the output value (i.e., maximize the output) " + "(default: false)."); + void constructProperties(); mutable SimTK::ReferencePtr> m_output; From f1eb5e25a70df450edb8a6d6a123cc407b231193 Mon Sep 17 00:00:00 2001 From: Christopher Dembia Date: Mon, 25 May 2020 20:07:09 -0700 Subject: [PATCH 2/2] Add 'negate' property to MocoOutputGoal. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 515ce3ebd..fc99a7c11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ Change Log 0.5.0 (in development) ---------------------- +- 2020-05-25: MocoOutputGoal can now negate the value of an output. + - 2020-05-16: Moved ActivationCoordinateActuator from opensim-moco to opensim-core.