0

I have a Function V which depends on two variables v1 and v2 and a parameter-Array p containing 15 Parameters. I want to Minimize my Function V regarding v1 and v2, but there is no closed expression for my Function, so I can't build and use the Derivatives.

The Problem is the following : For caluclating the Value of my Function I need the Eigenvalues of two 4x4 Matrices (which should be symmetric and real by concept, but sometimes the EigenSolver does not get real Eigenvalues). These Eigenvalues I calculate with the Eigen Package. The entries of the Matrices are given by v1,v2 and p.

There are certain Input Sets for which some of these Eigenvalues become negative. These are Input Sets which I want to ignore for my calculation as they will lead to an complex Function value and my Function is only allowed to have real values.

Is there a way to include this? My first attempt was a Nelder-Mead-Simplex Algorithm using the GSL-Library and an way too high Output value for the Function if one of the Eigenvalues becomes negative, but this doesn't work.

Thanks for any suggestions.

MrBaer
  • 13
  • 3

1 Answers1

0

For the Nelder-Mead simplex, you could reject new points as vertices for the simplex, unless they have the desired properties.

Your method to artificially increase the function value for forbidden points is also called penalty or barrier function. You might want to re-design your penalty function.

Another optimization method without derivatives is the Simulated Annealing method. Again, you could modify the method to avoid forbidden points.

What do you mean by "doesn't work"? Does it take too long? Are the resulting function values too high?

Depending on the function evaluation cost, it might be an approach to simply scan a 2D interval, evaluate all width x height function values and drill down in the tile with the lowest function values.

Axel Kemper
  • 10,544
  • 2
  • 31
  • 54
  • Do you know how to reject new points in the gsl implementation of the NM-Simplex algorithm? Sorry about the uncertainty: It doesn't work means: It does find a Minima, but it is way too high. One of the parameters in p is a Temperature and I calculate the Minimum at every Temperature. For High Temperature, the Minimum should become Zero, but it raises linear. If I comment the critical part out of my Function I can see the desired Plot regarding Minima over Temperature, but the critical Part makes it raise linear. – MrBaer Jul 22 '15 at 12:41
  • No, I don't know this implementation. But it should be rather easy to adopt one of the many open source versions or to re-write the [pseudo code](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method). – Axel Kemper Jul 22 '15 at 12:51