Python Forum
Minimize function with SciPy
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Minimize function with SciPy
#1
Hello everyone,
I'm currently trying to minimize a function using a Python algorithm. The function is a bit complicated and requires an FEA solver to be calculated. Anyway, I was able to define my function in the classical way according to the parameter I'm trying to optimize:
def fonction_calcul(Parametre1):
      blabla function definition
      return function value
As this last function definition works well, I can easily get the values of my calculation_function for the parameter values I want. Knowing this, I thought I could then "foolishly" use scipy.optimize to find the minimization value of my function, but alas, it doesn't work!
Here's what I get starting with x=1

x_start=1.0
>>>	
result = spo.minimize(fonction_calcul, x_start)
>>>	
result
      fun: 106.69134802297765
 hess_inv: array([[1]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 2
      nit: 0
     njev: 1
   status: 0
  success: True
        x: array([1.])
Overall, as you can see, minimize calculates a single value and stops at this value, considering that it has optimized well (knowing that in this case, the minimization value is around 0.03...).

I've tried minimize with a "classic" function (polynomial) and it works well for finding the minimization value...

Any idea how to make minimize function in my case?

Thanks a lot!
Pierre
Reply
#2
I guess you're using python to:
  • retrieve results from your FEA solver
  • to calculate the cost function value
  • to start the optmization process (with constraints?)


Nontheless here I would suggest you to have a look to a powerfull optimizer which is Dakota inculing a lot of solvers (determinist & stochastic methods for instance); I wonder if now a python api exists (to be confirmed - i used it a long time ago).

Paul
PierreLCV likes this post
Reply
#3
Dear paul,
Thank you for your reply ! I will take a look at Dakota :)
However, i really would like to understand why minimize (which appears to be a basic function) is not working...

Regards,
Pierre
Reply
#4
here is the well known Rosembrock test case: 2 variables, unconstraint problem, single (global) minimum.

Keep in mind that:
  • several evaluations/iterations are necessary; in your case, 1 iteration = 1 FEA
  • gradient/hessian are numerically estimated (1 estimation = 1 simulation)
  • your cost function is essential to succeed
  • of course you can add constraints to bracket variables

Hope it helps.

from scipy.optimize import minimize
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html


def Rosembrock(x):   
    # f(x, y) = (1 - x)**2 + 100*(y - x**2)**2
    # minimum in (x, y) = (1, 1)
    return (1 - x[0])**2 + 100*(x[1] - x[0]**2)**2


# Method = 'NM'     # "Nelder-Mead"
# Method = 'BFGS'   # "Broyden-Fletcher-Goldfarb-Shanno"
# Method = 'CG'     # "Conjugate-gradient"
Method = 'SLSQP'    # "Sequential Least SQuares Programming"

# Starting point
x0 = [2., 3]

if (Method == 'NM'):
    # order 0 method (Nelder-Mead)
    #x0 = starting point
    
    Results = minimize(Rosembrock, 
                       x0, 
                       method='nelder-mead',
                       options={'xatol': 1e-8, 'disp': False}
                       )

    
else:
    # order 1 gradient based method (BFGS / CG / SLSQP)
    # Gradient and Hessian are numerically calculated => several evaluations are needed
    Results = minimize(Rosembrock, 
                       x0, 
                       method = Method,
                       jac = '3-point',
                       options={'disp': False}
                       )

# Optimization results:
print(f"Optimized value: {Results.x}")
print(f"Cost function value after optimization: {Results.fun}")
print(f"Number of iterations: {Results.nit}")
print(f"Number of function evalutaions: {Results.nfev}")
print(f"Status: {Results.message}")
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to edit Tkinter Minimize, Maximize, and Close Buttons kucingkembar 7 230 Apr-26-2024, 11:36 AM
Last Post: kucingkembar
  How to Minimize ADB window OomKoos 0 402 Dec-29-2023, 12:41 PM
Last Post: OomKoos
  Can I minimize the code??? shantanu97 4 2,326 Mar-23-2021, 05:26 PM
Last Post: jefsummers
  How to use scipy.optimization.brute for multivariable function Shiladitya 9 6,305 Oct-28-2020, 10:40 PM
Last Post: scidam
  ModuleNotFoundError: No module named 'scipy.optimize'; 'scipy' is not a package AaronKR 1 10,308 Jul-09-2020, 02:36 AM
Last Post: bowlofred

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020