Bilevel optimization using Moco

OpenSim Moco is a software toolkit to solve optimal control problems with musculoskeletal models defined in OpenSim using the direct collocation method.
POST REPLY
User avatar
Israel Luis
Posts: 11
Joined: Thu Oct 24, 2019 3:21 am

Bilevel optimization using Moco

Post by Israel Luis » Wed Dec 13, 2023 1:54 pm

Hi Moco Community,

I am interested in modelling and simulating exoskeleton assistance, and I was thinking in using Moco for this aim. In this regard I wonder if it is possible to use Moco to run a two-levels optimization. My idea is to solve the muscle redundancy in low level based on a muscle activation squared, and in the high level, solve for the optimal parameters of an exoskeleton based on a minimal energy expenditure.

For instance, let's assume the assistive moment is a sinusoid where the peak moment and peak timing are design variables, and they are optimized to minimize metabolic rates, and the assistive moment is added to support ankle during walking, where the muscle redundancy is based on minimal activation squared. There are two aims in this problem, minimize muscle activation and also metabolic rates, and they might derive in opposite muscle control in some situations. I am sure it is possible to solve the muscle redundancy and exoskeleton parameters simultaneously with the same objective, but I wonder if it is possible to solve for two "criteria" simultaneously using Moco. If it is possible, can you please point out the paper or maybe if there is an example already?

Israel

User avatar
Nicholas Bianco
Posts: 988
Joined: Thu Oct 04, 2012 8:09 pm

Re: Bilevel optimization using Moco

Post by Nicholas Bianco » Fri Dec 15, 2023 10:45 am

Hi Israel,

You can optimize model parameters using the MocoParameter interface, and simultaneously minimize metabolic effort and muscle activation, but this would all happen within a single, "one-level", optimization problem. Moco doesn't support solving true bilevel optimization problems directly, but there's nothing preventing you from using Moco to solve an inner loop optimization problem within your own bilevel optimization framework.

-Nick

POST REPLY