package com.flightfeather.uav.model
|
|
import com.flightfeather.uav.lightshare.bean.DataVo
|
|
/**
|
* 权重
|
* 某种影响因素在不同情况下对某种监测数据产生的权重影响
|
*/
|
abstract class BaseWeight <M: BaseMData, S : BaseSOP> {
|
|
abstract val tag:String
|
|
// 区间阈值
|
abstract val sectionValues: List<Double>
|
|
// 区间对应权重
|
abstract val weights: List<Double>
|
|
// 上次计算的权重值
|
private var lastWeight = -1.0
|
|
// 权重是否变化
|
var isChange = true
|
|
fun getWeight(mData: M, sop: S): Double? {
|
if (!isChange) {
|
if (lastWeight < 0) {
|
val v = onWeightFactor(mData, sop) ?: return null
|
lastWeight = weightCal(v)
|
}
|
// println("$tag: $lastWeight")
|
return lastWeight
|
} else {
|
val v = onWeightFactor(mData, sop) ?: return null
|
lastWeight = weightCal(v)
|
// println("$tag: $lastWeight")
|
return lastWeight
|
}
|
}
|
|
/**
|
* 获取权重因子值
|
*/
|
abstract fun onWeightFactor(mData: M, sop: S): Double?
|
|
/**
|
* 权重计算
|
* @param value 影响因素的值
|
*/
|
private fun weightCal(value: Double): Double {
|
for (i in sectionValues.indices) {
|
if (value < sectionValues[i]) {
|
return weights[i]
|
}
|
}
|
return weights.last()
|
}
|
}
|