Analysis Q&A - ARA-Trans/iAM GitHub Wiki
Does any attribute deteriorate on a section during a year in which that section has a treatment being applied (or a committed project)?
Every year, a treatment is applied. That might be the default treatment (No Treatment), but the system still treats it as a treatment. So, attributes always deteriorate except when they have a stated consequence (i.e., PCI +20 or DECK_SEEDED = 9.99)
Think about it like this: If you replace a bridge deck, the substructure will still deteriorate.
Noted that a treatment consequence has both a "change" expression and an "equation" expression. How do these relate to each other? If both are input, which one takes effect?
It is an either or If you use change, it makes the change just based on the current value. So, if it is PCI change of +20, it adds 20 no matter if the PCI is 10 or 80.
If you use equation, it calculates a change. For example, I might have a string value FUNCTIONAL_CLASS. If I apply a Widen treatment AND FUNCTIONAL_CLASS is not "Arterial" or "Collector", it would change it to "Collector". Equations are more intended to work with numeric values though. You would typically use an equation when there are multiple attributes used in the calculation of a new value.
What happens when multiple consequences are valid to be applied on a single attribute? Or is that disallowed?
In a given treatment the combination of criteria and attribute should only yield a single result. There is a case where a segment could meet multiple criteria. In that case, there has to be an order to which one is selected. A selection meeting multiple criteria is an issue throughout the analysis engine. The only one we know for sure is the blank or null criteria (I prefer null for a database point of view). This is the default criteria and should only be applied if no other criteria are matched.
Where are the committed projects set up in the desktop UI, before a simulation run? I see a "committed" node, but it won't open until after the simulation is run, so it doesn't seem like an input location.
That is a quirk of the desktop UI. They are an input to the analysis. It does not allow that to be populated until one run is completed. So that is can construct the UI with the various segments in that particular run. The web version does not require this.
Are scheduled treatments ever subject to the "number of years before any/same" restrictions?
For example, treatment A is applied and schedules treatment B in 2 years and also has "number of years before same" equal to 8; then, in 2 years, treatment B is applied and schedules treatment A in 3 years; then, in 3 more years, treatment A is applied, even though it hasn't been 8 years since the previous application of treatment A. Is this what happens? Or does treatment B's attempted scheduling of treatment A get ignored, or pushed out, or what?
Scheduling overrides shadowing (# of years before)
If treatment A schedules treatment C in 2 years, then next year treatment B schedules treatment D in 1 year, do both C and D happen the next year? (Or is it disallowed, or an error of some sort?)
This is likely an error case and should not be allowed. We are checking with the client.
Per year of simulation, in what order do sections have treatments "applied"/recorded against budgets? I might be missing concepts here. Like when "spending as budget permits", which potential projects "go first" in taking money out of the pot? (Edit: To clarify, this is about when the optimization value of 2 or more projects are equal.) (edited)
All possible treatments are ordered by Benefit/Cost (descending). Benefit is either the Incremental Benefit or Remaining Life. Cost is the unit cost (cost of the project divided by the area/quantity). When solving Budget Permits, the analysis loops through Priorities (outer loop) and Budgets (inner loop). It loops through the entire list of possible treatments in descending order. If Budget is available (Priority, Budget, Budget Criteria, Cash Flow, etc) the project is picked. Each section can only get one treatment per year. If no treatment is selected after loop, apply no treatment.
If two projects have the exact same Benefit Cost, take either. It does not happen often, but if it does there is no problem with picking either project. Remember, it is a Benefit/Unit Cost. Sections (bridges) are usually of different sizes. PennDot also adds a factor that starts each project at a different seed so there are never two projects with identical benefit.
In the desktop app, I see that committed projects have a "years before same" field. Since committed projects are treated uniquely, how can there ever be a "same" committed project?
You are correct that committed projects are unique, but they all have a Treatment Name. If the name of the treatment is the SAME, it is considered equal for Years Before Same.
How is "remaining life" computed for a single attribute?
The remaining life of a section is the number of years (fractional) that a Section will take for one of its Attributes to become reach its Remain Life Limit. Remaining life cannot be negative. The attribute with the lowest remaining life (multiple remaining life Criteria value pairs for a single Attribute can be valid simultaneously) is the sections remaining life.
Remaining life is calculated by determining the number of years before the attribute reaches the Remaining Life Limit. The remaining life limit is criteria driven. There may be multiple remaining life limits. For instance, Remaining Life Limit of PCI=20 for all roads, PCI=40 for Interstates and PCI=50 for roads with 100,000 vehicles per day. Your current value of PCI is 75 and the road meets all three criteria. Using a combination of the Performance/Deterioration equations, plus the consequence of No Treatment or Committed Project the value of PCI is calculated year by year. It reaches a value of 20 after 50 years. It reaches 40 after 37.5 years and reaches 50 at 17.8 years. The remaining life for this section is 17.8 for the attribute PCI. Remember, some attributes get larger with Deterioration/Performance (example IRI). In this case the Remaining life limit is a ceiling, not a floor.
What about "fractional" RL and how it can be computed. Fractionality seems to require root-finding (to the RL limit) over the performance curves, and these are functions with an arbitrary number of input variables.
You cannot just calculate the RL using the equations (or piecewise). You must determine which performance equation to use for the current year and deteriorate one year. Then apply No Treatment Consequence (or committed project). Determine which performance equation to use for Year+1, deteriorate using that equation, apply No Treatment Consequence and/or Committed project. Do this for the next 100 years. Your values could look something like 91.5(year 1), 88.5(year 2), 85.5(year 3), 83(year 4), 81.5(year 5), 80.5(year 6), 79.5 (year 7),.... This is done iteratively inputting each attribute. In a perfect world (without having to consider consequences), you could find the area under the curve by integrating the equation over limits (year 0 to 100). The problem is that we allow piecewise, non-linear equations with sharp breaks. Integration is not an option. Also the equations as you have pointed out contain an arbitrary number of input variables.
If your remaining life limit was 80, your remaining life would be 6.5. The value before the limit was 80.5, the value after the limit was 79.5.
(80.5 - 80) / (80.5 - 79.5) = 0.5 (which is the fractional remaining life which is add to 6 (the value at 80.5).
For RLL criteria, I assume they are evaluated only once, up-front at the beginning of the 100-year "outlook" loop, correct? If so, are they evaluated before or after the treatment-under-consideration is applied?
Yes. The remaining life limits (RLL) are evaluated with the section at its current value before the treatment is applied and any deterioration occurs. You do not recheck the RLL after each on year deterioration. They are also recalculated after the treatment is applied (using any changed consequences to re-evaluate RLL criteria) to get the new value for remaining life. The difference in remaining life in the do nothing scenario (No Treatment) and for the potential treatment is the remaining life improvement which is the Benefit for a Remaining Life/Cost(unit) analysis.
If a single attribute has multiple RLLs meeting their criteria, do we simply use the "worst" limit value (highest or lowest depending on direction of deterioration)?
Yes. Always use the shortest (worst remaining life). The reason is that different section (bridges) can have different criteria. All bridges may have a RLL of 3 for the Deck, but Interstate Bridges have a value of 5 (Interstate being a subset of all bridges).
The smallest value of Remaining Life is zero. Neither Benefit nor Remaining Life can be negative. With multiple attributes, the same applies. For Bridges for example a Bridge is out of Remaining Life when DECK < 5 or STRUCTURE < 6 or SUBSTRUCTURE < 3. In a bridge with a Deck of 9 (remaining life 40 years), Structure of 9 (remaining life 30 years) and SUBSTRUCTURE of 2 (remaining life -10 years which is set to 0). The Remaining Life of the Bridge is 0. One attribute SUBSTRUCTURE has failed, therefore the bridge has no remaining life.
The same concept apply to Deficient. Deficient are very similar to RLL, but subtly different. A Deficient rating/value is used in Targets and Deficient Met analysis. The reason we split them into two categories is that you can have a Deficient Level target that is higher than the level the asset has no remaining life. For example, we can say the 80% of bridges should have a DECK > 8, 90% Deck > 6, 99% Deck > 5 and 100% Deck > 4. The RLL may be a 4 for Deck, but the agency has other targets it is trying to meet.
A bridge that meets fixes all 4 targets (i.e. a bridge with a DECK of 3), will have its benefit multiplied by 4. Another bridge with a Deck of 5.5 will fix two of the targets (DECK > 8 and DECK >6) and multiplied by 2. A bridge with a DECK of 8.2 meets no Deficient limits (multiply by 0), and therefore cannot be selected as a treatment (treatments with 0 or negative benefit cannot be selected) for this Bridge as it will not improve the effort to meet the deficient targets.
What are "reasons" as named in the domain? Conceptually and data-structurally?
Conceptually, a reason is a description of a decision made by the analysis engine that has a key of asset, treatment type, and year. The asset-treatment-year combination is written to a table along with “Selected” if it was chosen and a different message if it was not chosen. This is being used to do a deep analysis on why certain treatments are not included in a given work plan.
Is the "No Treatment" treatment ever allowed to be customized? Is it always $0, only one consequence (age: +1), etc?
The No Treatment option may be customized, but it is always there. Essentially, every asset has a treatment every year of the work plan. The default treatment is “No Treatment” if nothing else can be selected. It applied consequences to attributes that we do not want deterioration curves for such as AGE. I can see a case where it could be more than $0 if a user was trying to account for the basic maintenance costs of the asset in the decision making process either to narrow the cost gap between other treatments and the default option or if a user wanted to keep track of required maintenance costs incurred by a work plan.
Suppose you have a selectable treatment named "Foo" with a same-shadow of 10 years, and it gets applied in 2025. Then suppose there's a committed project in 2026 with name "Foo" and a same-shadow of 5 years. What is the last year of shadow for "Foo" treatments, 2031 or 2035? And what is the governing rule in this situation, e.g. "always use the latest shadow value" or "always use the longest shadow value"?
A committed project shadow should override a non-committed project shadow to reduce user confusion. Therefore, in your example, the committed foo project would have a shadow to 2031. Scheduled treatments should be handled differently – Probably using the longest shadow. This would need to be discussed with the stakeholders to get more clarification on the requirements and usage associated with the behavior.
In what year are the consequences of a cash-flow/split treatment applied? First, last, spread out?
Consequences are applied in the final year of a cash flowed project, per PennDOT. During a project, attributes stay the same (again, per PennDOT). I am not sure how others would like to see this change. Some thought might be given to if this should be a setting but I think that would be down the road.
What does each element of the split treatment input UI mean within the simulation and how is each input meant to be handled?
When a treatment is applied, how is the treatment's budget-ordering handled w/r/t determining where to allocate cost?
Suppose we have treatment A with budget-order "B,C" (and both B and C's criteria evaluate true or are blank). Say B doesn't have enough remaining this year to cover A's cost. Do we spend the rest of B and take the balance out of C, or do we move over to C (and possibly repeat the process)?
For “Within Budget”, a project has to be funded totally within a budget. So, in your example, the analysis would try to fund A with B. If B did not have enough funding, it would then try with C. If that failed, A would be unfunded.
For “across budgets”, as much as possible is taken from the first budget and then the second budget is checked to see if the shortfall can be made up with the other budget. In this case, the analysis would try and fund A with B. If there was not enough in B, it would see if it could fund it with B+C. If so, it would take all the money available from B and then the remaining funding from C. Conceptually, this would make sense if there was some sort of reserve fund available for large projects.
The big thing here is where the Within Budget/Across Budget setting is applied – at the scenario level or the budget level. If it was at the budget level, for the across budget example, both B and C would have to be set to Across Budget.
Does the "Within Budget"/"Across Budgets" setting have an effect on this?
When rolling funds "across budgets", does anything ever roll over to the next year? Or does year-rollover only happen with the "Within Budget" setting?
Funding should always roll over if possible. I could see a setting in the analysis that would prevent this at the budget level.
We need a summary list of ALL optimization strategies and what their objective functions are. ("Incremental Benefit/Cost", etc)
You can optimize based on a value (what a project does for the network) only or a value-to-cost ratio (best bang for the buck). The issue is how is value determined. For that we have two options, benefit and remaining life.
Remaining life is the simpler option that was discussed previously, it is the amount of time it will take for a critical attribute to reach its minimum acceptable value.
Benefit looks at a differential calculation between the performance of a single, specified metric between the do nothing option and the treatment option. Both the no treatment and the treatment result will have a performance model (note: they can be different). The difference between the two is calculated (the oft mentioned “area between the curves”)
Most of the different options are based on these two items. Benefit only, Benefit/Cost, Delta Remaining Life, or Delta Remaining Life/Cost. The analysis ranks each possible treatment according to selected criteria and then goes down the list expending funds until budget runs out within a single year.
What is a multi-year option (versus a non-multi-year option)? I assume this does not refer to the 100-year future-outlook calculation of the objective function value of a feasible treatment.
The multiyear option is being deprecated. It never quite worked and definitely does not work with all the new features.
The two outliers are unlimited and no work. This is just doing everything that is feasible and doing nothing at all. With unlimited, it is possible to have multiple treatment options. I am not sure which metric is used in this case – I think it is benefit to cost ratio.
What is a multi-year option (versus a non-multi-year option)? I assume this does not refer to the 100-year future-outlook calculation of the objective function value of a feasible treatment.
We need a summary list of ALL spending strategies and how they operate. ("Until Targets Met", etc)
What exactly is happening during the "roll forward" logic at the beginning of the analysis? i.e. "rolling" from what to what?
Is it correct that the accumulation of projected cost during the 100-year outlook on a feasible treatment is just an absolute magnitude, independent of any budgets?
Cost is entirely independent from budget, or even checking if budget is available.
What is the complete list of all reasons-that-a-treatment-can-be-selected in the system?
There are reasons a treatment cannot be selected (many). If it does not fail a check why it cannot be selected, it is selected. There is no current list of the reasons.
In order to implement the "until target/deficient goals met" strategies: Are the target & deficient criteria re-evaluated after every treatment application in a single year? Or are they evaluated only one time, before any feasible treatments are applied?
They are checked after the application of each treatment. A difference is applied to the Target/Deficient goals.
The "reasons" output is for "the reason each Treatment was selected for a given year". Does this mean that there needs to be both (a) the reason the selected treatment was selected and (b) the reasons each other treatment was not selected, per year per section?
The key for Reasons is Section, Treatment, and Budget. So, for each specific combination of the three there will be a reason. When something is Selected, the others get listed as Any/All Shadow which means another selected treatment is blocking the application of the specific combination. This can happen in the same year or in subsequent years when the Time Before Any and/or Time Before all are non zero.
For instance if the current network average for all sections is 88.9 and we are looking for a Target of 90 as a network average. The total area for all sections is 1,000,000 square meters. We apply one treatment to one section with 100 square meters. The value before the treatment was 25. The value after the treatment was 100. The following calculations is made:
Old value = 25 * 100 /1,000,000
Old value = 0.0025
New value = 100 * 100 /1,000,000
New value = 0.01
Difference = 0.01 - 0.0025
Difference = 0.0075
New network average = 88.9 + 0.0075
New network average = 88.9075
We are not meeting our target, keep going. If we met our target we stop (assuming no other targets).
Every attribute has a value-per-section-year sequence, presumably from roll-up. Sometimes the latest year for which roll-up has made values available is before the start year of the analysis. To derive the values at the start year, we apply (a) performance curves, (b) any committed projects, and/or (c) the designated passive treatment, each year, until we arrive at the start year. Is this an accurate description of "roll forward"?
We roll forward attributes with performance curves. To do so we need to know which performance curve to use. When evaluating which performance curve to use it is necessary to evaluate the criteria. Ideally, the attribute in the criteria will have a value for the year in question. If it does not, use the Most Recent Value (from the rollup). If it does not have a Most Recent Value, use the default.
Currently, I don't believe the roll forward uses the no treatment consequences. It should in the new code. It should also apply the no treatment consequences.