[Insight-users] iteration number and optimizer values
Michael Kuhn
michakuhn at gmx . ch
Wed, 20 Aug 2003 18:32:33 -0600
Hi Luis,
I've again had a look at the values obtained by my observer (an
itk::Command object) that is observing a
QuaternionRigidTransformGradientDescentOptimizer. I believe to have
noticed the follwing things:
1. ) At iteration n, the metric value does not correspond to the current
position. The event is only triggered after the new position is set to
the optimizer (in QuaternionRigidTransformGradientDescentOptimizer):
this->SetCurrentPosition( newPosition );
this->InvokeEvent( IterationEvent() );
Therefore, the optimizer already returns the position based on which the
metric value is calculated in iteration n + 1. Thus, the position
obtained from the optimizer by calling optimizer->GetCurrentPosition()
in iteration n corresponds to the metric value obtained by calling
optimizer->GetValue() in iteration n + 1. (compare the "pseudo output"
below)
2. ) The iteration number obtained by optimizer->GetCurrentIteration()
(say, n) is increased by 1 compared to the iteration number of the last
iteration event (n - 1). The transform is the "new position" set before
invoking the last iteration event (n - 1) and would thus corresponds to
the metric value in iteration n (that is not executed, since we are at
the end of the optimization process). However, there is no new metric
value computed, therefore the metric value is the same as the one
obtained during the last iteration event (n - 1). Therefore, the metric
value now differs by two steps from the position. (compare the "pseudo
output" below)
I think, for debugging purposes it would be helpful if the three values
would correspond with respect to their index in every event.
Thanks,
Michael
pseudo output of an observer:
====================
---typeid(event): start--------
current iteration 0
current position: p0 (= initial guess)
metric value: 0
------------------------------
---typeid(event): iteration-----
current iteration: 0
current position p1
metric value: m0
------------------------------
---typeid(event): iteration-----
current iteration: 1
current position p2
metric value: m1
------------------------------
---typeid(event): iteration-----
current iteration: 2
current position p3
metric value: m2
------------------------------
---typeid(event):end---------
current iteration: 3
current position p4
metric value: m2
------------------------------
<http://www . itk . org/Insight/Doxygen/html/classitk_1_1QuaternionRigidTransformGradientDescentOptimizer . html>