Sub FRPRMN(): Conjugate Gradient Method in Multidimensions with Constraints ??


monir
08-11-2009, 06:48 PM
Hi;

I would very much appreciate your expert help.
I've just asked Marc_ba of a previous and similar post (2008) if he had been able to resolve the issue and would like to share how.

In the meantime, here's a concise description of the problem with more details.

1) I'm trying the NR Fortran optimization routine FRPRMN() with derivative information to locate the global minima of a 3-variable function. The routine uses the line minimization routine LINMIN() with f1dim(), DBRENT(), df1dim(), etc.

2) The difficulty is that the function is ONLY defined in restricted ranges of its variables, which encompass a few local extrema:
...x1:: -0.01 to -0.09
...x2:: 0.9595 to 1.0000
...x3:: -14.34 to -1.00
Outside the above ranges, the function is UNDEFINED (and possibly singular!).

3) In sub LINMIN() code, the initial guess for brackets is given by:
...ax = 0.
...xx = 1.
The first assignment ax = 0. corresponds to the given starting point P(1:3) in call FRPRMN(). No problem there!
The second assignment xx = 1. is a problem, since it produces intervals outside the above restricted ranges of x1, x2 or x3, and as result the minimization routine FRPRMN() goes erratic and returns meaningless quantities.

4) Numerous sporadic attempts (by trial-and-error) were made to assign smaller values to xx in sub LINMIN() hoping for the best, with no real success.

5) Perhaps, one should loop through the 3 values of xt in fun f1dim(x); comparing each with the limits of 2) above. If any exceeds the limit, don't execute its f1dim=func(xt) but go back to LINMIN() and adjust xx (or do something!!).
This idea would most likely disrupt the program's logic, unless "carefully" implemented.

Could someone please advise on how to fix the problem ??

Thank you kindly.
Monir