ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

MODTOLERANCE

MODTOLERANCEオプションは、モデルの連立ブロックにある方程式が収束したかどうかを判定する際に使用するオプションです。MODTOLERANCEは、方程式が収束したとみなす基準になる、連続する反復における方程式の結果の近似の程度を決定します。

データ型

INTEGER

構文

MODTOLERANCE = {n|3}

パラメータ

n

収束の判定に使用するINTEGER値。Oracle OLAPでは、連立ブロック内の各方程式を計算する際、現行の反復と前回の反復における方程式の結果に基づく比較値を作成します。比較値が許容誤差として判定されると、方程式は収束したとみなされます。

比較値は、次のように判定されます。

(thisResult - prevResult) / (prevResult+ MODGAMMA)

ここで、thisResultは現行の反復の結果で、prevResultは前回の反復の結果です。

前述の計算において、MODGAMMAは、比較値が反復間の変化の絶対量と比例的変化との比較の程度を制御するINTEGERオプションです。MODGAMMAのデフォルト値は1です。

許容誤差判定では、比較値が、10の負のMODTOLERANCE乗より小さいかどうかがOracle OLAPによって判定されます。この判定の計算は次のとおりです。

Comparison value  <  10**-MODTOLERANCE

この計算を記述するもう1つの方法は、次のとおりです。

Comparison value  < (1 / (10**MODTOLERANCE))

方程式が収束したとみなされるには、比較値が前述の判定を満たす必要があります。MODTOLERANCEのデフォルト値は3です。このデフォルト値では、比較値が0.001より小さい場合に、比較値が判定を満たします。

使用上の注意

収束の失敗

指定した反復回数内で方程式が収束に失敗すると、エラーが発生します。試行する反復の最大回数は、MODMAXITERSオプションで制御します。エラーが発生したときにOracle OLAPが実行するアクションは、MODERRORオプションで制御します。

結果の精度

MODTOLERANCEは、反復間の方程式の結果が近似する程度を制御するため、結果の解の精度も制御します。MODTOLERANCEの値が小さいと結果の精度は低くなり、値が大きいと精度は高くなります。

大きな値と小さな値

モデルに大きな値の方程式と非常に小さな値の方程式が混在している場合、MODTOLERANCEオプションの値を減らすよりも、MODGAMMAオプションの値を増やすほうが有効な場合があります。MODGAMMAを増やすことで、大きい値の方程式の精度を維持したまま小さい値の方程式をより迅速に収束させることができます。

開発時における迅速な収束

モデルの開発中、MODTOLERANCEに小さな値の使用が必要となることがあります。これによって結果の精度は落ちますが、モデル方程式はより迅速に収束します。モデルのデバッグ後、MODTOLERANCEの値を増やし、最終的に結果の精度を上げます。

連立ブロックの解決を制御するオプション

連立ブロックの解決を制御する際に使用可能なすべてのオプションのリストは、「モデル・オプション」を参照してください。

例5-61 MODTOLERANCEのデフォルト値の使用

次の文では、income.planというモデルのトレースを指定し、連立ブロックの解法としてGauss-Seidel法の使用を指定して、ディメンションを制限し、モデルを実行します。

MODTRACE = YES
MODSIMULTYPE = 'GAUSS'
LIMIT division TO 'Camping'
income.plan budget

これらの文によって生成される出力は次のとおりです。

(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

トレースで、連立方程式のブロックの最後の3回の反復でMarketing明細項目に対し計算された結果を確認できます。

MODTOLERANCEは、デフォルト値の3に設定されています。したがって、方程式を収束したと判定するには、その比較値が0.001より小さい必要があります。7回目の反復で、Marketingの比較値は次のように計算されます。

(73474.784648631100 - 73379.713232251300) / (73379.713232251300 + 1) = 0.0013

この比較値は0.001より大きいため、収束したと判定されません。

8回目の反復で、比較値は次のように計算されます。

(73446.025848156700 - 73474.784648631100) /(73474.784648631100 + 1) = 0.0004

この比較値は0.001より小さいため、収束したと判定されます。

例5-62 モデルの収束速度を上げるためのMODTOLERANCEの設定

次の文で、MODTOLERANCEの値を変更し、income.budモデルを実行します。

MODTOLERANCE = 2
income.plan budget

MODTOLERANCEが2に設定されているため、比較値が0.01より小さい場合、収束したと判定されます。この例では、Marketingの方程式は7回目の反復で収束したと判定されます。