49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
|
// 计算标准差
|
|||
|
function caculate_standar_deviation(data) {
|
|||
|
// 计算数学期望(均值)
|
|||
|
const calculateMean = (values) => {
|
|||
|
const total = values.reduce((acc, value) => acc + parseFloat(value), 0);
|
|||
|
return total / values.length;
|
|||
|
};
|
|||
|
|
|||
|
// 计算标准差
|
|||
|
const calculateStandardDeviation = (values, mean) => {
|
|||
|
const variance = values.reduce((acc, value) => acc + Math.pow(parseFloat(value) - mean, 2), 0) / values.length;
|
|||
|
return Math.sqrt(variance);
|
|||
|
};
|
|||
|
|
|||
|
// 计算每个用户的标准差
|
|||
|
const results = Object.keys(data).reduce((acc, user) => {
|
|||
|
const values = data[user];
|
|||
|
const mean = calculateMean(values);
|
|||
|
const stddev = calculateStandardDeviation(values, mean);
|
|||
|
acc[user] = stddev;
|
|||
|
return acc;
|
|||
|
}, {});
|
|||
|
return results;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 计算每个用户最终得分,满分为100分
|
|||
|
* @param {Array} alluser_mhs24h 每个用户过去24小时平均算力
|
|||
|
* @param {Number} hash_percent 24小时平均算力权重
|
|||
|
* @returns 每个用户最终得分
|
|||
|
*/
|
|||
|
function score(alluser_mhs24h, hash_percent = 1) {
|
|||
|
// 提取 mhs24h 数值
|
|||
|
const hashrateValues = alluser_mhs24h.map((obj) => obj.mhs24h);
|
|||
|
|
|||
|
// 计算总和
|
|||
|
const totalHashrate = hashrateValues.reduce((sum, value) => sum + value, 0);
|
|||
|
|
|||
|
const result = {};
|
|||
|
|
|||
|
// 计算每个用户的算力占比
|
|||
|
for (let { user, mhs24h } of alluser_mhs24h) {
|
|||
|
result[user] = (mhs24h / totalHashrate) * hash_percent;
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
module.exports = { caculate_standar_deviation, score };
|