es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gekko Optimization Suite para Python – si3 siempre <0

Estoy usando Python 3.8.10 y Gekko 1.0.1. Intenté usar el modelo.if3 para verificar si las variables son iguales o no con un -modelo.abs3 interno. Observé un comportamiento extraño que no pude explicar, por eso ejecuté el código de muestra de https://gekko.readthedocs.io/en/latest/model_methods.html (if3):

import numpy as np
import matplotlib.pyplot as plt
from gekko import GEKKO

m = GEKKO(remote=False)
p = m.Param()
y = m.if3(p-4, p**2, p+1)

# resolver con condición < 0
p.value = 3
print(p.value)
m.solve(disp=False)
print(y.value)

# resolver con condición >= 0
p.value = 5
print(p.value)
m.solve(disp=False)
print(y.value)

pero obtuve la siguiente salida:

3
[9.0]
5
[9.0]

¡Agradecería mucho cualquier ayuda!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Basándome en el código que has proporcionado, parece que la función if3 en Gekko no está funcionando como se esperaba. La función if3 debería devolver p^2 si p-4<0 o p+1 si p-4>=0. Sin embargo, en tu código, está devolviendo un valor constante de 9. Esto no es consistente con el comportamiento de la función if3 según se describe en la documentación de Gekko.

    Hay algunas cosas que puedes intentar para resolver este problema. Primero, asegúrate de haber instalado la última versión de Gekko. Mencionaste que estás utilizando la versión 1.0.1, pero la última versión hasta la fecha de redacción es la 0.2.8. También debes verificar que has instalado Gekko correctamente y que todas las dependencias necesarias están instaladas.

    Otra cosa que puedes intentar es utilizar el operador ternario en lugar de la función if3. El operador ternario es una alternativa más sencilla a la función if3 que se puede utilizar para obtener resultados similares. Aquí tienes un ejemplo de cómo puedes modificar tu código para utilizar el operador ternario en su lugar:

    import numpy as np
    import matplotlib.pyplot as plt
    from gekko import GEKKO
    
    m = GEKKO(remote=False)
    p = m.Param()
    y = (p**2 if p-4<0 else p+1)
    
    # resolver con condition<0
    p.value = 3
    print(p.value)
    m.solve(disp=False)
    print(y.value)
    
    # resolver con condition>=0
    p.value = 5
    print(p.value)
    m.solve(disp=False)
    print(y.value)
    

    Este código debería funcionar como se esperaba y devolver los valores correctos según la condición p-4. Si aún experimentas problemas, puedes intentar comunicarte con la comunidad de Gekko para obtener más ayuda.

Comments are closed.