The MODTOLERANCE option is used in testing whether each equation in a simultaneous block of a model has converged. MODTOLERANCE determines how closely the results of an equation must match between successive iterations for the equation to be considered to have converged.
INTEGER
MODTOLERANCE = {n|3}
An INTEGER
value to use in testing for convergence. 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.
The comparison value that is tested is as follows.
(thisResult - prevResult) / (prevResult+ MODGAMMA)
where thisResult is the result of this iteration and prevResult is the result of the previous iteration
In the preceding calculation, MODGAMMA is an INTEGER option that controls the degree to which the comparison value represents the absolute amount of change between iterations versus the proportional change. The default value of MODGAMMA is 1.
In the tolerance test, Oracle OLAP tests whether the comparison value is less than 10
to the negative power of MODTOLERANCE. The calculation for this test is as follows.
Comparison value < 10**-MODTOLERANCE
An equivalent way of writing this calculation is as follows.
Comparison value < (1 / (10**MODTOLERANCE))
For the equation to be considered to have converged, the comparison value must meet the test described earlier. The default value of MODTOLERANCE is 3
. With this default, the comparison value meets the test when it is less than 0.001
.
When an equation fails to converge after a specified number of iterations, an error occurs. The MODMAXITERS option controls the maximum number of iterations that are attempted. The MODERROR option controls the action that Oracle OLAP takes when an error occurs.
Since MODTOLERANCE controls how closely results of an equation must match between iterations, it therefore controls the precision of the results of the solution. A small value of MODTOLERANCE will result in less precision, while a large value will provide more precision.
When a model contains some equations with large values and some equations with very small values, it might be preferable to increase the value of the MODGAMMA option 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.
Faster Convergence During Development
While you are developing a model, you might want to use a small value for MODTOLERANCE. While this gives less precise results, the model equations will converge more quickly. After you have debugged the model, you can increase the value of MODTOLERANCE and thereby increase the precision of the final results.
Options for Controlling the Solution of Simultaneous Blocks
For a list of all the options that you can use to control the solution of simultaneous blocks, see "Model Options".
Example 6-61 Using the Default MODTOLERANCE Value
The following statements specify a trace for a model called income.plan
, 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.plan budget
These statements produce the following output.
(MOD= INCOME.PLAN) BLOCK 1: SIMULTANEOUS (MOD= INCOME.PLAN) ITERATION 1: EVALUATION (MOD= INCOME.PLAN) marketing = .15 * net.income (MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 1) = 11887.403671736 ... (MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 6) = 73379.713232251 ... (MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 7) = 73474.784648631 ... (MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 8) = 73446.025848156 (MOD= INCOME.PLAN) END BLOCK 1
In the trace, you can see the results that were calculated for the Marketing
line item in the final three iterations over a block of simultaneous equations.
MODTOLERANCE is set to its default value of 3
. This means that for an equation to pass the convergence test, its comparison value must be less than 0.001
. In the seventh iteration, Oracle OLAP calculates the comparison value for Marketing
as follows.
(73474.784648631100 - 73379.713232251300) / (73379.713232251300 + 1) = 0.0013
This comparison value is greater than 0.001
, so it did not pass the test for convergence.
In the eighth iteration, Oracle OLAP calculated the comparison value as follows.
(73446.025848156700 - 73474.784648631100) /(73474.784648631100 + 1) = 0.0004
Since this comparison value is less than 0.001
, it passed the convergence test.
Example 6-62 Setting MODTOLERANCE to Speed Up the Convergence of a Model
The following statements change the MODTOLERANCE value and run the income.bud
model.
MODTOLERANCE = 2 income.plan budget
With MODTOLERANCE set to 2
, any comparison value of less than 0.01
will pass the test for convergence. In this example, the equation for Marketing
passes the test in the seventh iteration.