You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中编写距离越短得分越高的评分公式?

距离相关评分公式实现方案

根据你需求的「距离越近分数越高、越远越低,超过最大距离得0分」,这里提供几种实用的公式实现方案,直接适配你给出的Kotlin代码框架:

1. 线性评分(最常用、直观)

这种方案是分数随距离均匀衰减,距离为0时拿满分1000,达到maxDistance时得0分,中间按比例计算。适合需要公平对应距离的场景。

补全后的代码:

fun rating(distance: Float): Int {
    val maxDistance = 11750F
    val fullScore = 1000
    
    return if (distance > maxDistance) {
        0
    } else {
        // 计算比例后转整数,可根据需求用toInt()直接截断或roundToInt()四舍五入
        ((1 - distance / maxDistance) * fullScore).roundToInt()
    }
}

2. 非线性评分(侧重近距离优势)

如果需要让近距离的分数衰减更慢,或者远距离分数掉得更快,可以用幂次函数调整衰减曲线。比如平方项会让近距离的分数更稳定,只有距离接近最大值时才快速降到0。

补全后的代码:

fun rating(distance: Float): Int {
    val maxDistance = 11750F
    val fullScore = 1000
    val decayPower = 2.0 // 幂次越大,近距离分数越稳定,远距离衰减越快
    
    return if (distance > maxDistance) {
        0
    } else {
        val ratio = distance / maxDistance
        ((1 - Math.pow(ratio.toDouble(), decayPower)) * fullScore).roundToInt()
    }
}

3. 反向指数衰减

另一种非线性方案是用指数函数,适合需要极近距离拿高分,超过一定距离快速降分的场景:

fun rating(distance: Float): Int {
    val maxDistance = 11750F
    val fullScore = 1000
    val decayFactor = 0.0005 // 因子越大,衰减速度越快
    
    return if (distance > maxDistance) {
        0
    } else {
        // e的负距离*衰减因子次方,再乘以满分
        (Math.exp(-decayFactor * distance) * fullScore).roundToInt()
    }
}

选择建议

  • 选线性评分:需要分数和距离成严格反比、逻辑简单易懂的场景
  • 选非线性评分:需要突出近距离优势,或者弱化远距离差异的场景
  • 选指数衰减:需要极近距离的目标获得显著高分的场景

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:50:41