Cómo configurar las opciones de estado, control y parámetro en problemas dimensionados de Dymos?
Tengo una ecuación diferencial ordinaria (ODE) dada en la forma , donde x, u y d son vectores (por ejemplo, ). He formulado este sistema en OpenMDAO/Dymos utilizando entradas y salidas dimensionadas.
self.add_input('x', shape=(num_nodes, Nx))
para Nx estados. Ver: https://openmdao.github.io/dymos/getting-started/defining-odes.html?highlight=dimensioned#dimensioned-inputs-and-outputs
Mi ODE y trayectoria funcionan bien, sin embargo, tengo interés en tener cierta información aclarada:
(1) Veo que al agregar estados, entradas y parámetros, puedo proporcionar restricciones de caja únicas a través de upper
y lower
(https://openmdao.github.io/dymos/features/phases/constraints.html?highlight=dimensioned#path-constraints). Por ejemplo, el estado 1 puede tener límites [0,1], mientras que el estado 2 tiene límites [-1,5]. Mi pregunta es, ¿funciona de la misma manera proporcionar información de ref
y ref0
? Lo probé (por ejemplo, ref0 = [0,-1]
), pero no puedo decir si está haciendo algo en realidad.
(2) ¿Se pueden especificar las unidades de elementos específicos de los problemas dimensionados? Por ejemplo, el estado 1 es una temperatura y el estado 2 es un voltaje. No parece que pueda hacer simplemente:
self.add_input('x', shape=(num_nodes, 2), units=['K', 'V'])
porque esto devuelve un error.
(3) ¿Se pueden especificar propiedades de optimización diferentes para piezas individuales en los vectores de estado, entrada y dimensión? Por ejemplo, digamos que quiero optimizar la entrada 1 (opt=True
), pero no la entrada 2 (opt=False
). Idealmente, esperaría que
phase.add_parameter('u', opt=[True, False])
pero esto devuelve un error.
Si esta funcionalidad es posible, ¿podría indicarme dónde puedo encontrar más información? He revisado la documentación de Dymos pero no pude encontrar mucho sobre el tema.
davy.ai
Como experto en TI especializado en OpenMDAO, puedo proporcionar las siguientes respuestas a tus preguntas:
ref
yref0
, no funciona de la misma manera que suministrar restricciones utilizandolower
yupper
.ref
yref0
se utilizan para escalar variables de entrada/salida y no se utilizan para imponer restricciones. Solo se utilizan para escalar variables y asegurarse de que estén dentro de un rango específico. Por ejemplo, si deseas asegurarte de que tus entradas y salidas se encuentren dentro de un rango específico o tengan unidades específicas, puedes utilizarref0
yref
para escalar todas las variables.Sí, puedes especificar las unidades de elementos específicos en los problemas con dimensiones. Pero necesitas definir cada estado con su propia declaración
add_input()
. Por ejemplo, si el estado 1 es temperatura y el estado 2 es voltaje, puedes hacer lo siguiente:add_parameter()
y establecer el argumentoopt
como una lista booleana que contengaTrue
oFalse
para cada parámetro. Por ejemplo, para optimizar la entrada 1 (opt=True
) y no la entrada 2 (opt=False
), puedes hacer lo siguiente:Ten en cuenta que esto solo es aplicable cuando se utiliza el
ScipyOptimizeDriver
. Otros solucionadores pueden no admitirlo.