Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

456
Vistas
Recuperar la función simbólica del costo o la restricción en pydrake

Aparentemente, tengo una función de restricción lo suficientemente complicada que lleva más de 1 minuto llamar a prog.AddConstraint() , presumiblemente porque está gastando mucho tiempo construyendo la función simbólica (aunque si tiene otras ideas sobre por qué lleva tanto tiempo, se lo agradecería). ). Lo que me gustaría hacer es extraer la función de restricción simbólica y almacenarla en caché para que, una vez creada, no tenga que esperar 1 minuto y simplemente pueda cargarla desde el disco.

Mi problema es que no sé cómo acceder a esa función. Puedo ver claramente la expresión cuando la imprimo, por ejemplo en este ejemplo simplificado:

 from pydrake.all import MathematicalProgram prog = MathematicalProgram() x = prog.NewContinuousVariables(2, "x") c = prog.AddConstraint(x[0] * x[1] == 1) print(c)

Obtengo la salida:

 ExpressionConstraint 0 <= (-1 + (x(0) * x(1))) <= 0

Me doy cuenta de que podría analizar esa cadena y extraer la parte que representa la función, pero parece que debería haber una mejor manera de hacerlo. Estoy pensando que podría extraer la función de expresión y los límites superior/inferior y usarlos posteriormente en mis llamadas AddConstraint .

En mi caso de uso real, necesito aplicar la misma restricción a varios pasos de tiempo en una trayectoria, por lo que creo que sería útil crear la función simbólica una vez cuando llamo AddConstraint para el primer paso de tiempo y luego todos los pasos de tiempo posteriores no deberían tengo que volver a crear la función simbólica, solo puedo usar la versión almacenada en caché y aplicarla a las variables relevantes. La expresión implica una descomposición de Cholesky de una matriz de covarianza, por lo que se aplican muchas restricciones.

Cualquier ayuda es muy apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En mi caso de uso real, necesito aplicar la misma restricción a varios pasos de tiempo en una trayectoria, por lo que creo que sería útil crear la función simbólica una vez cuando llamo AddConstraint para el primer paso de tiempo y luego todos los pasos de tiempo posteriores no deberían tengo que volver a crear la función simbólica, solo puedo usar la versión almacenada en caché y aplicarla a las variables relevantes. La expresión implica una descomposición de Cholesky de una matriz de covarianza, por lo que se aplican muchas restricciones.

Recomiendo encarecidamente escribir esta restricción utilizando una evaluación de función, en lugar de una expresión simbólica. Un ejemplo es que si desea imponer la restricción lb <= my_evaluator(x) <= ub , entonces puede llamarlo de esta manera

 def my_evaluator(x): # Do Cholesky decomposition and other things to evaluate it. Return the evaluation result. return result prog.AddConstraint(my_evaluator, lb, ub, x)

Es conveniente agregar una restricción usando una expresión simbólica cuando su restricción es lineal en las variables de decisión; de lo contrario, es mejor evitar usar una expresión simbólica para agregar una restricción. (Evaluar una expresión simbólica, especialmente una que involucra la descomposición de Cholesky, lleva mucho tiempo).

Para obtener más detalles sobre cómo agregar una restricción no lineal genérica, puede consultar nuestro tutorial

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda