This is an old revision of the document!
Declare the feedback view in views.samm:
fbview trackEU compare trackEU.v trackEU.t “Tracking Energy Use“ 20 0.001
where the line contains the following parameters:
type of view (= fbview)
view name
model scope
.v file name
.t file name
description
default number of iterations
convergence tolerance
Here is an example of the .v and .t files for a simple feedback view that modifies a model input until the model output matches some given “golden” value in the last time slice.
viewName.v:
varToAdjust F modelCalculatedVal U goldenValToTrackOn U
viewname.t:
creview varToAdjust[dims][] view modelCalculatedVal[dims][] view goldenValToTrackOn[dims][] ! These are the built in variables available in the .t file ! $fbViewIteration ! $fbViewMaxIters ! $fbViewTolerance if $background == false say ("This view requires a background.") quit (-1) endif keep percentDecreaseScnLI[dims] keep goldenToModelRatioOrig[dims] local goldenToModelRatio[dims] = goldenValToTrackOn[dims][1] / modelCalculatedVal[dims][1] if $fbViewIteration == 1 say ("Iteration: 1") ! Make your adjustment for the first iteration -- in this case we will decrease the value by some percent ...this is just an example local percentDecrease_bck[dims] = create (; dimFrom1=varToAdjust[dims][1], dim=SEQ;time:1981:2006:1;year, data=1) percentDecrease_scn[dims] = copyshape (percentDecrease_bck[dims]) percentDecrease_scn[dims] = table (;with=percentDecrease_bck[dims], title="..enter required percent decrease..") varToAdjust[dims][2] = percentDecrease_scn[dims] / 100 * -1 + 1 * varToAdjust[dims][1] goldenToModelRatioOrig[dims] = goldenToModelRatio[dims] percentDecreaseScnLI[dims] = percentDecrease_scn[dims] quit (1) else say ("Iteration: ", $fbViewIteration) local goldenToModelRatioLI[dims] = goldenToModelRatio[dims] ! Calculate the adjusted variable value local ratioDiff[dims] = percentDecreaseScnLI[dims] - goldenToModelRatioOrig[dims] local percentDecrease_scn[dims] = 1 - goldenToModelRatioOrig[dims] * percentDecreaseScnLI[dims] / ratioDiff[dims] varToAdjust[dims][2] = percentDecrease_scn[dims] / 100 * -1 + 1 * varToAdjust[dims][1] export (percentDecrease_scn[dims]; format=tool, file=$persistence/percentDecreaseScnLI) !check tolerances for convergence !**NOTE** this one only checks for convergence in the last year! local tol[] = create(; data=$fbViewTolerance) local numNotConv[] = sum (boolgt (abs (extract (goldenToModelRatio[dims]; time:-0, shrink=on) - 1), tol[])) integer $numNotConv getobjinfo(numNotConv[], $numNotConv; info=dataElement) if ($numNotConv == 0) or ($fbViewIteration == $fbViewMaxIters) if ( mumble (" numNotConv = ", $numNotConv, " at iteration ",$fbViewIteration, " stopping due to ") if ($numNotConv == 0) say ("convergence") else say ("maximum iterations") endif quit(0) else say (" numNotConv = ", $numNotConv, " at iteration ",$fbViewIteration, " continuing") quit (1) endif endif
Note that feedback views require a background scenario to run (i.e. $background must be true).
$history | Object Type | Object Array Contents | Value of $numScns |
---|---|---|---|
true | U | object[][1] = history instance object[][2] = current instance | 2 |
true | F | object[][1] = history instance | 2 |