Elo Chess Algo:在一个事件循环中分配K因子以分离玩家

问题描述 投票:0回答:1

下面是Elo国际象棋评分算法的一部分(对不起命名约定,这是临时的:]

 let newRankRed = red[rank] + (redK * (results[result] - winProbRed))
 let newRankBlue = blue[rank] + (blueK * (Math.abs(results[result]-1) - winProbBlue))

K因子(redK,blueK)是一个数字,该数字将根据玩家进行的比赛次数而变化。 Player对象存储在数据库中,而record属性(它们具有的匹配数)只是Player对象上的number属性。我的问题是:两个玩家进行了一场比赛,结果被提交给了应用程序。该应用程序进入数据库,获取两个Player并检查其记录以确定每个Player的正确K因子。两个参与者,两个独立的K因子:分配正确的K因子的最佳方法是什么?我知道我们可以有很多条件语句,例如:

if (red.record >= 0 && red.record <=10) redK = 32
else if ...

但是这会产生冗长且笨拙的代码,并且必须为每个Player都完成。

有人可以提出更好的选择吗?

javascript algorithm chess
1个回答
0
投票

只是想通了。以下是解决方案的一部分;红色和蓝色是具有'record'属性的播放器对象:

let redK, blueK

let red = await PlayerData.getPlayerById(redId)
let blue = await PlayerData.getPlayerById(blueId)

[[red, redK], [blue, blueK]].forEach((pair) =>{
  if(pair[0].record >=0 && pair[0].record <= 12) pair[1]= 32
  else if(pair[0].record >=13 && pair[0].record <= 24) pair[1]= 24
  else pair[1]= 16
})

这使我不必为每个Player重写条件语句。如果有人有更好的解决方案,那就太好了。

© www.soinside.com 2019 - 2024. All rights reserved.