Subspace minimization in GENCAN

36 views
Skip to first unread message

Andrea Cassioli

unread,
May 7, 2012, 7:50:39 PM5/7/12
to TANGO Project - ALGENCAN
Hi,
I am using ALGENCAN to solve a box constrained problem. if I have
understood, in fact the solver switches to GENCAN. Reading the
algorithm on which GENCAN is based, I was wondering if could be
possible to notify to the objective function what is the current
subspace in which the optimization takes place. Indeed in many
situation the objective function is somehow separable in term of its
computation and thus it might be computed much more efficiently. Does
anyone ever look at this? In my case I figured out that usually less
than 1/3 of the variables are used.

I guess that in practice a pointer to some kind of integer array
should be passed along the code....

Best,
Andrea Cassioli Ph.D.

Ernesto G. Birgin

unread,
May 8, 2012, 11:53:53 AM5/8/12
to tango-...@googlegroups.com
Dear Andrea,

Your idea seems to be very interesting.

If you were using Fortran, I would recommend you to include the common block that is declared within the file sources/algencan/rspace.com. "rspace" mean reduced space and, in fact, the common block has an array named "ind" whose first "nind" positions correspond to the indices of the variables of the current reduced space.

Adding all this information as parameters of the evalf subroutine (and all the other user-provided subroutines) appears to be a little bit complicated. My suggestion is: declare a global array z in your C code to save the last point at which or objective function was evaluated. Every time your C coded evalf function is called, compare parameter x with your global variable z. The different elements between z and x will allow you to identify the free variables (the ones that are changing) and to take advantage of the savings your are mentioning.

I hope it helps.

Regards,
Ernesto.

Jose Mario Martinez

unread,
May 8, 2012, 4:29:53 PM5/8/12
to Ernesto G. Birgin, tango-...@googlegroups.com
Essentially I agree with Ernesto.
In addition there is more work that you can save.
The gradient has a lot of computation in common with the function evaluation in your problem.
You can save  a lot of work if you use the following principle: The gradient is only evaluated at points in which the function have
been just evaluated.
In fact the principle is not exactly true. It is true  when (a) you use the Hessians (code evalh)) and (b) The last functional value
is the smallest one so far obtained.
You can pass this information by common betwen evalf and evalg.
Moreover, the same information, namely, the indexes at which ai^t x is out of the interval, can be saved in evalf and passed
by common to evalh.
The information about the smallest value of f can be stored internally to evalf. I mean that, in evalf you can always compare
the new functional value com;puted with the best one so far computed and send, by common to evalg, the information
that the new is the best or not.
Essentially, if you save all this work, the computer time will be halved.
Regards,
Mario

--
You received this message because you are subscribed to the Google Groups "TANGO Project - ALGENCAN" group.
To view this discussion on the web visit https://groups.google.com/d/msg/tango-project/-/MkwXqcponCQJ.

To post to this group, send email to tango-...@googlegroups.com.
To unsubscribe from this group, send email to tango-projec...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/tango-project?hl=en.

Reply all
Reply to author
Forward
0 new messages