Skip to content

RPN (Asset Criticality)

Desumai edited this page Aug 18, 2023 · 7 revisions

RPN Calculation

The formula to calculate RPNs is system score * breakdown frequency * breakdown impact. The formula is located in lib\criticality\functions.dart.

RPN Priority Calculation

To use asset RPN to calculate asset priority, possible priority values are classified into RPN ranges (e.g. Very low <= 100, 100 < low < = 200). These ranges are calculated using rpnDistRange(rpnList, rpnPercentDist). Pseudocode (without efficiency boosting steps or case checking):

//Calculates the maximum RPN value for an asset priority group according
//to the target asset priority group distributions given by a list
//from least to greatest asset priority (very low to very high). Returns a
//list of the maximum RPN value (inclusive) for RPN priority groups from low to high.

rpnList = list of rpns
percentDistribution = list of target percent distributions from least to greatest priority
FOR rpn IN rpnList
	IF rpn <= 0
		REMOVE rpn from rpnList
SORT rpnList from least to greatest
results = []
targetDistribution = 0
FOR(i = 0; i < percentDistribution.length, i++)
	targetDistribution += percentDistribution[i]
	index = round(rpnList.length * targetDistribution) - 1
	diff = targetDistribution - (rpnList.length - index - 1)/list.length
	IF count(rpnList[index] in rpnList) > 1
		firstIndex = rpnList.firstIndexOf(rpnList[index])
		tempDiff = targetDistribution - (rpnList.length - firstIndex- 1)/list.length
		IF(tempDiff < diff && firstIndex != -1)
			diff = tempDiff
			index = firstIndex	
		lastIndex = rpnList.lastIndexOf(rpnList[index])
		tempDiff = targetDist - (rpnList.length - lastIndex - 1)/list.length
		IF(tempDiff < diff && lastIndex!= -1)
			diff = tempDiff
			index = lastIndex
	result.append(rpnList[index]
	
	FOR(j = i; j < percentDistribution.length, j++)
		percentDistribution[j] += diff / (percentDistribution.length - i - 1)

return result

Currently algorithm does not check for duplicates when finding rpn priority ranges. Only one check is done at the end before returning the results.

Clone this wiki locally