**Previously**, we demonstrated the key concepts, application, and validation of synthetic streamflow generation. A historical inflow timeseries from the Research Triangle region was obtained, and multiple synthetic streamflow scenarios were generated and validated using the Kirsch Method (Kirsch et. al., 2013). But *why* did we generate these hundreds of timeseries? What is their value within the MORDM approach, and how do we use them?

These questions will be addressed in this blog post. Here, we will cover how risk of failure (ROF) triggers use these synthetic streamflow timeseries to dynamically assess a utility’s ability to meet its performance objectives on a weekly basis. Once more, we will be revisiting the Research Triangle test case.

**Some clarification**

Before proceeding, there are some terms we will be using frequently that require definition:

- Timeseries – Observations of a quantity (e.g.: precipitation, inflow) recorded within a pre-specified time span.
- Simulation – A set of timeseries (synthetic/historical) that describes the state of the world. In this test case, one simulation consists of a set of three timeseries: historical inflow and evaporation timeseries, and one stationary synthetic demand timeseries.
- State of the world (SOW) – The “smallest particle” to be observed, or one fully realized world that consists of the hydrologic simulations, the set deeply-uncertain (DU) variables, and the system behavior under different combinations of simulations and DU variables.
- Evaluation – A complete sampling of the SOW realizations. One evaluation can sample all SOWs, or a subset of SOWs.

**About the ROF trigger**

In the simplest possible description, risk of failure (ROF) is the probability that a system will fail to meet its performance objective(s). The ROF *trigger *is a measure of a stakeholder’s risk tolerance and its propensity for taking necessary action to mitigate failure. The higher the magnitude of the trigger, the more risk the stakeholder must be willing to face, and the less frequent an action is taken.

More formally, the concept of *Risk-of-Failure* (ROF) was introduced as an alternative decision rule to the more traditional *Days-of-Supply-Remaining* (DSR) and *Take-or-Pay* (TOP) approaches in Palmer and Characklis’ 2009 paper. As opposed to the static nature of DSR and TOP, the ROF method emphasizes flexibility by using rule-based logic in using near-term information to trigger actions or decisions about infrastructure planning and policy implementation (Palmer and Characklis, 2009).

Adapted from the economics concept of risk options analysis (Palmer and Characklis, 2009), its flexible, state-aware rules are time-specific instances, thus overcoming the curse of dimensionality. This flexibility also presents the possibility of using ROF triggers to account for decisions made by more than one stakeholder, such as regional systems like the Research Triangle.

Overall, the ROF trigger is state-aware, system-dependent *probabilistic decision rule that is capable of reflecting the time dynamics and uncertainties inherent in human-natural systems*. This ability is what allows ROF triggers to aid in identifying how short-term decisions affect long-term planning and vice versa. In doing so, it approximates a closed-loop feedback system in which decisions inform actions and the outcomes of the actions inform decisions (shown below). By doing so, the use of ROF triggers can provide system-specific alternatives by building rules off historical data to find triggers that are robust to future conditions.

**ROF triggers for water portfolio planning**

As explained above, ROF triggers are uniquely suited to reflect a water utility’s cyclical storage-to-demand dynamics. Due to their flexible and dynamic nature, these triggers can enable a time-continuous assessment (Trindade et. al., 2019) of:

- When the risks need to be addressed
- How to address the risk

This provides both operational simplicity (as stakeholders only need to determine their threshold of risk tolerance) and system planning adaptability across different timescales (Trindade et. al., 2019).

**Calculating the ROF trigger value, α**

Let’s revisit the Research Triangle test case – here, we will be looking at the data from the town of Cary, which receives its water supply from the Jordan Lake. The necessary files to describe the hydrology of Cary can be found in **‘water_balance_files’ in the GitHub repository**. It is helpful to set things up in this hypothetical scenario: the town of Cary would like to assess how their risk tolerance affects the frequency at which they need to trigger water use restrictions. *The higher their risk tolerance, the fewer restrictions they will need to implement*. Fewer restrictions are favored as deliberately limiting supply has both social and political implications.

We are tasked with determining how different risk tolerance levels, reflected by the ROF trigger value α, will affect the frequency of the utility triggering water use restrictions. Thus, we will need to take the following steps:

- The utility determines a suitable ROF trigger value, α.
- Evaluate the current risk of failure for the current week
*m*based on the week’s storage levels. The storage levels are a function of the historical inflow and evaporation rates, as well as projected demands. - If the risk of failure during
*m*is at least α, water use restrictions are triggered. Otherwise, nothing is done and storage levels at week*m*+1 is evaluated.

Now that we have a basic idea of how the ROF triggers are evaluated, let’s dive in a little deeper into the iterative process.

**Evaluating weekly risk of failure**

Here, we will use a simple analogy to illustrate how weekly ROF values are calculated. **Bernardo’s post here** provides a more thorough, mathematically sound explanation on this method.

For now, we clarify a couple of things: first we have two synthetically-generated datasets for inflow and evaporation rates that are conditioned on historical weekly observations (columns) and SOWs (rows). We also have one synthetically-generated demand timeseries conditioned on projected demand growth rates (and yes, this is were we will be using the Kirsch Method previously explained). We will be using these three timeseries to calculate the storage levels at each week in a year.

The weekly ROFs are calculated as follows:

We begin on a path 52 steps from the beginning, where each step represents weekly demand, *d _{j}* where week j∈[1, 52]

We also have – bear with me, now – a crystal ball that let’s us gaze into *n*-multiple different versions of past inflows and evaporation rates.

At step *m _{j}*:

- Using the crystal ball, we look back into
*n*-versions of year-long ‘pasts’ where each alternative past is characterized by:- One randomly-chosen annual historical inflow timeseries,
*I*beginning 52 steps prior to week_{H}*m*_{j} - One randomly-chosen annual historical evaporation timeseries,
*E*beginning 52 steps prior to week_{H}*m*_{j} - The chosen demand timeseries,
*D*beginning 52 steps prior to week_{F}*m*_{j} - An arbitrary starting storage level 52 weeks prior to
*m*,_{j}*S*_{0}

- One randomly-chosen annual historical inflow timeseries,
- Out of all the
*n*-year-long pasts that we have gazed into, count the total number of times the storage level dropped to below 20% of maximum at least once,*f*. - Obtain the probability that you might fail in the future (or ROF),
*p*_{f}= ROF = f/n - Determine if
*ROF*> α. - Take your next step:

This process is repeated for all the *k*-different hydrologic simulations.

Here, the “path” represents the projected demand timeseries, the steps are the individual weekly projected demands, and the “versions of the past” are the *n*-randomly selected hydrologic simulations that we have chosen to look into. It is important that *n* ≥ 50 for the ROF calculation to have at least 2% precision (Trindade et. al., 2019).

**An example**

For example, say you (conveniently) have 50 years of historical inflow and evaporation data so you choose *n*=50. You begin your ROF calculation in Week 52. For *n*=1, you:

- Select the demands from Week 0-51.
- Get the historical inflow and evaporation rates for Historical Year 1.
- Calculate the storage for each week, monitoring for failure.
- If failure is detected, increment the number of failures and move on to
*n*=2. Else, complete the storage calculations for the demand timeseries.

This is repeated *n*=50 times, then *p _{f}* is calculated for Week 52.

You then move on to Week 53 and repeat the previous steps using demands from Week 1-52. The whole process is completed once the ROFs in all weeks in the projected demand timeseries has been evaluated.

**Potential caveats**

However, this process raises two issues:

- The number of combinations of simulations and DU variables are computationally expensive
- For every
*d*∈_{j}*D*,_{F}*n*-simulations of inflows and evaporation rates must be run*k*-times, where*k*is the total number of simulations - This results in (
*n*) computations*×*k - Next, this process has to be repeated for as many SOWs that exist (DU reevaluation). This will result in (
*n × k ×*number of DU variables) computations

- For every
- The storage values are dynamic and change as a function of
*D*,_{F}*I*and_{H}*E*_{H}

These problems motivate the following question: can we approximate the weekly ROF values given a storage level?

**ROF Tables**

To address the issues stated above, we generate ROF tables in which approximate ROF values for a given week and given storage level. To achieve this approximation, we first define *storage tiers* (storage levels as a percentage of maximum capacity). These tiers are substituted for *S _{0}* during each simulation.

Thus, for each hydrologic simulation, the steps are:

- For each storage tier, calculate the ROF for each week in the timeseries.
- Store the ROF for a given week and given storage level in an ROF table unique to the each of the
*k*-simulations - This associates one ROF value with a (
*d*) pair_{j}, S_{0}

The stored values are then used during the DU reevaluation, where the storage level for a given week is approximated to its closest storage tier value, *S _{approx}* in the ROF table, negating the need for repeated computations of the weekly ROF value.

The process of generating ROF tables can be found under **rof_table_generator.py** in the GitHub repository, the entirety of which can be found **here**.

**Conclusion**

Previously, we generated synthetic timeseries which were then applied here to evaluate weekly ROFs. We also explored the origins of the concept of ROF triggers. We also explained how ROF triggers encapsulate the dynamic, ever-changing risks faced by water utilities, thus providing a way to detect the risks and take adaptive and mitigating action.

In the next blog post, we will explore how these ROF tables can be used in tandem with ROF triggers to assess if Cary’s water utility will need to trigger water use restrictions. We will also dabble in varying the value of ROF triggers to assess how different risk tolerance levels, action implementation frequency, and individual values can affect a utility’s reliability by running a simple single-actor, two-objective test.

**Reference**s

Kirsch, B. R., Characklis, G. W., & Zeff, H. B. (2013). Evaluating the impact of alternative hydro-climate scenarios on transfer agreements: Practical improvement for generating synthetic streamflows. *Journal of Water Resources Planning and Management,* *139*(4), 396-406. doi:10.1061/(asce)wr.1943-5452.0000287

Palmer, R. N., & Characklis, G. W. (2009). Reducing the costs of meeting regional water demand through risk-based transfer agreements. *Journal of Environmental Management,* *90*(5), 1703-1714. doi:10.1016/j.jenvman.2008.11.003

Trindade, B., Reed, P., & Characklis, G. (2019). Deeply uncertain pathways: Integrated multi-city regional water supply infrastructure investment and portfolio management. *Advances in Water Resources,* *134*, 103442. doi:10.1016/j.advwatres.2019.103442