User Tools

Site Tools


howtos:toolcoding:feedback_views

This is an old revision of the document!


Feedback views

Declaring in views.samm

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

Template/Examples

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

Object Array Size and Contents

Note that feedback views require a background scenario to run (i.e. $background must be true).

Also, the “current” instance identified in the table below refers to the instance of a use-type (U) object in a fbview which - in the first iterations contains the value for the background (or worksheet) scenario - and in subsequent scenarios contains the value corresponding to the most recent iteration. If the background value of such a variable is required in iterations greater than 1, the value should be persisted using a keep object during the first iteration.

$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
object[][2] = background instance
object[][3] = new instance to be filled
3
false U object[][1] = current instance 3
false F object[][1] = background instance
object[][2] = new instance to be filled
3
howtos/toolcoding/feedback_views.1298343101.txt.gz · Last modified: 2011/02/22 02:51 by marcus.williams