The MODSIMULTYPE option specifies the method to use for solving simultaneous blocks in a model.
See:
"Model Options" for a list of all of the options that control the solution of simultaneous blocks.ID
MODSIMULTYPE = {'AITKENS'|'GAUSS'}
(Default) Oracle OLAP uses the Aitkens delta-squared solution method. In the first two of every three iterations over a block of simultaneous equations, the equations are solved using the values from the previous iteration, and the results are tested for convergence and divergence. In every third iteration, the results are obtained not by solving the equations, but by making a next-guess calculation. This calculation uses the results of the previous three iterations. The results of the guesses are not tested for convergence and divergence, and the solution always continues to the next iteration.
Oracle OLAP uses the Gauss-Seidel solution method. Equations in a simultaneous block are solved in each iteration over the block. The results are tested for convergence and divergence in each iteration.
Oracle OLAP uses an iterative method to solve the equations in a simultaneous block. In each iteration, except the next-guess iterations in an Aitkens solution, a comparison value is calculated from the result of the current iteration and the result of the previous iteration. When the comparison value falls within a specified tolerance (see the MODTOLERANCE option), the equation is considered to have converged. When the comparison value is too great (see the MODOVERFLOW option), the equation is considered to have diverged and solution of the block ends.
When all equations in a block converge, the block is considered solved. When any equation diverges or when any equation fails to converge after a specified number of iterations (see the MODMAXITERS option), solution of the block (and of the model) fails and Oracle OLAP generates an error.
The Aitkens method requires three values to perform a next-guess calculation. Therefore, in the first three iterations over a simultaneous block, Oracle OLAP solves the equations. The fourth iteration is a next-guess iteration that uses the results from the first three iterations in its calculation.
Thereafter, every third iteration is a next-guess iteration that calculates results by using the previous guess and the equation results from the intervening two iterations. For example, the seventh iteration makes a next-guess calculation that is based on the guess from the fourth iteration and the equation results from the fifth and sixth iterations.
The Aitkens method usually speeds convergence, and it generally produces more accurate results than the Gauss-Seidel method. However, the Aitkens method requires more memory because the results of three previous iterations are stored.
In general, you should use the Aitkens method. You should use the Gauss-Seidel method only when limited memory is a problem on your system.
Handling NA Values When Solving Simultaneous Blocks in a Model
In calculating equation results and making next-guess calculations, Oracle OLAP observes the setting of the NASKIP2 option. NASKIP2 controls how NA
values are handled when +
(plus) and -
(minus) operations are performed. The setting of NASKIP2 is important when you specify a solution variable that contains NA
values. Since the values in the solution variable are used as the initial values in the first iteration over a simultaneous block, the results of the equations might be NA
when there are NA
values in the solution variable. An NA
result in the first iteration might also produce NA
results in later iterations. Therefore, to avoid obtaining NA
for the results, you can make sure that the solution variable does not contain NA
values or you can set NASKIP2 to YES
before running the model.
A simultaneous equation might fail to converge when it assigns data to a variable with an INTEGER data type or when you specify a solution variable with an INTEGER data type for a dimension-based model. Oracle OLAP converts the data to decimal values when it calculates the equation in each iteration, but the results are stored in the INTEGER variable between iterations. This has the effect of rounding the values and thereby interfering with a progression toward convergence.
A simultaneous equation might fail to converge when it contains a function that produces rounded values (such as INSTRB or ROUND) or when it contains a function that introduces discontinuities in the data (such as MAX or MIN).
The solution of a simultaneous block is sensitive to starting values. For example, when a model has a proportional relationship between two model values, then starting values close to zero will inhibit convergence. You should thus attempt to use starting values that are reasonable for the equations being solved.
The solution of a simultaneous block is also sensitive to the order of the equations. When you compile a model, the model compiler determines an optimal equation order that is based on the dependencies among the equations.
To force the equations in a simultaneous block to be solved in a particular order, you can write the equations in the desired order and set the MODINPUTORDER option to YES
before compiling the model. When MODINPUTORDER is YES
, the model compiler leaves the equations in a simultaneous block in the order in which they appear in the model.
By placing simultaneous equations in a particular order and setting MODINPUTORDER to YES
before compiling the model, you might be able to encourage convergence in some models. In general, however, it is preferable to rely on the model compiler to order the equations.
After running a model, you can use the MODEL.XEQRPT program to produce a report about the execution of the model.
Example 6-60 Economizing on Memory Requirements
When a model named budget98
is a complex model that will iterate over a large number of dimension values in a simultaneous block, you can economize on the memory requirements of the model solution by using the Gauss-Seidel method.
The following statements specify the Gauss-Seidel method and run the model.
MODSIMULTYPE = 'GAUSS' budget98 budget