The MODGAMMA option specifies a value to use in testing how much an equation in a simultaneous block of a model is changing between iterations. MODGAMMA controls the degree to which the test compares the absolute amount of the change between iterations versus the proportional change. MODGAMMA is especially important in testing equations that result in very small values.
See:
"Model Options" for descriptions of all of the options that control the solution of simultaneous blocks.INTEGER
MODGAMMA = {n|1}
An INTEGER
value to use in testing for convergence and divergence. As Oracle OLAP calculates each equation in a simultaneous block, it constructs a comparison value that is based on the results of the equation for the current iteration and the previous iteration. When the comparison value passes a tolerance test, the equation is considered to have converged. When the comparison value meets an overflow test, the equation is considered to have diverged.
The comparison value that is tested is as follows.
(thisResult - prevResult) DIVIDED BY (prevResult PLUS MODGAMMA)
where thisResult is the result of this iteration and prevResult is the result of the previous iteration.
Oracle OLAP calculates the absolute value of the enclosed expression. The default value of MODGAMMA is 1
.
In the test for convergence, the MODTOLERANCE option determines how closely the results of an equation must match between successive iterations. With the default value of 3
for MODTOLERANCE, the equation is considered to have converged when the comparison value is less than 0.001
.
In the test for divergence, the MODOVERFLOW option determines how dissimilar the results of an equation must be in successive iterations. With the default value of 3
for MODOVERFLOW, the equation is considered to have diverged when the comparison value is greater than 1000
.
The comparison value that Oracle OLAP evaluates in tests of convergence and divergence is fundamentally a proportional value. It expresses the change between iterations as a proportion of the previous results. In the test for convergence, the change between iterations must be small in proportion to the previous results. In the test for divergence, the change between iterations must be large in proportion to the previous results. By testing a proportional value, rather than testing the absolute amount of change, Oracle OLAP can apply the same test criteria to all equations, regardless of the magnitude of the equation results.
However, the comparison value that Oracle OLAP tests is not strictly proportional. When the results of an equation are very close to zero, the denominator of a strictly proportional comparison value would also be very close to zero, and thus the comparison value itself would generally be large. Therefore, the test for convergence would be difficult to satisfy, while the test for divergence would be easy to meet. To solve this problem, Oracle OLAP adds the value of MODGAMMA to the denominator of the comparison value. When the default value of 1 is used for MODGAMMA, the effect of MODGAMMA is as follows:
When the equation results are close to zero, the denominator is close to one and the test is essentially a test of the absolute change between iterations.
When the equation results are very large, the effect of adding MODGAMMA to the denominator is negligible, and the test is close to being a strictly proportional test.
For equation values close to zero, you can control the sensitivity to the tests for convergence and divergence by changing the value of MODGAMMA. When equation values are very small, you essentially scale the changes in model values between iterations when you change the value of MODGAMMA. For example, when you change MODGAMMA from 1 to 2, the comparison value is essentially cut in half. As a consequence, you reduce the likelihood that divergence will occur.
Ways to Increase Speed of Convergence of Model Equations
The default value of MODGAMMA is appropriate in most situations. When you increase the value of MODGAMMA, the model equations will converge more quickly, but the results will be less precise. The smaller the equation value, the more pronounced is the effect of increasing MODGAMMA; convergence is attained relatively more quickly for small model values, while more precision is lost.
You can also force the simultaneous blocks of a model to converge more quickly by decreasing the value of MODTOLERANCE and thereby relaxing the test for convergence. However, when you do this, you sacrifice the precision of all the results, not just the results of equations with small values.
Therefore, when a model contains some equations with large values and some equations with very small values, it might be preferable to increase MODGAMMA rather than decreasing MODTOLERANCE. By increasing MODGAMMA, you might be able to force equations with small values to converge more quickly while retaining the precision of equations with large values.
Example 6-53 Using the Default MODGAMMA Value
The following statements specify a trace for a model called income.bud
, specify that the Gauss-Seidel method should be used for solving simultaneous blocks, limit a dimension, and run the model.
MODTRACE = YES MODSIMULTYPE = 'GAUSS' LIMIT division TO 'Camping' income.bud budget
These statements produce the following output.
(MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 16) = 0.026243533 ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 17) = 0.024054312 ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 18) = 0.025788293 ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 19) = 0.024390642 ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 20) = 0.025501664 ... (MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 21) = 0.024608562
In the trace, you can see the results that were calculated for the NET.INCOME line item in the final six iterations over a block of simultaneous equations.
The value of MODTOLERANCE is its default value of 3
. This means that for an equation to pass the convergence test, its comparison value must be less than .001
.
MODGAMMA is set to its default value of 1
. The equation for the NET.INCOME line item passed the convergence test in the twenty-first iteration. The comparison value for Net.Income
in the twenty-first iteration was calculated as follows.
(0.024608562967 - 0.025501664970 = 0.00087) / (0.025501664970 + 1)
Example 6-54 Setting MODGAMMA to Speed up the Convergence of a Model
The following statements change the MODGAMMA setting and run the income.bud
model.
MODGAMMA = 2 income.bud budget
With MODGAMMA set to 2
, the equation for Net.Income
converges in the eighteenth iteration. The comparison value for Net.Income
in the eighteenth iteration is calculated as follows.
(0.025788293304 - 0.024054312748 = 0.00086) / (0.024054312748 + 2)