Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

455
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!