我在确定同行评审研究论文之类的评分算法时遇到了棘手的问题。
上这门课:
public class ResearchPaper
{
int StudentID;
int PaperID;
string Title;
byte Grade;
}
Grade
是老师最初分配的从 0 到 100(F 到 A+)的分数。
成绩分配后,可以根据同行通过论文比较的反馈(间接)修改。如果同行说试卷 B(75 分)比试卷 A(80 分)好,那么试卷 A 减一分(新的 79 分),而试卷 B 得一分(新的 76 分)。这种情况可能会发生数千次,而试卷 B 的最终成绩可能会比试卷 A 好(这很好)。
我的计划是,如果同行评审同意论文 A 实际上比论文 B 好(老师给它们打分的方式),或者论文 A 会在失控的过程中获得分数,直到达到 100(这设置为最大值)。
该算法的问题在于,经过大量同行评议,最终所有论文都会通过相对不常见的评分更改达到相同的评分,这实际上会忽略教师最初分配的评分。
对于这样的事情有更好的算法吗?
最佳答案
我认为你有一个非常好的系统,但我会将 Grade
设为 sbyte
并将同行评审与初始评分分开。如果您有超过 100 篇论文,并且没有选择一篇论文进行投票,那么如果您不使用带符号的值,您的类(class)士气就会出现严重问题。
public class ResearchPaper
{
int StudentID;
int PaperID;
string Title;
sbyte InitialGrade;
sbyte PeerRating;
public sbyte Grade
{
get
{
return (InitialGrade + PeerRating);
}
}
}
public class PaperGrader
{
List<ResearchPaper> Papers;
public PaperGrader(List<ResearchPaper> Papers)
{
this.Papers = Papers;
}
public void Vote(int Id)
{
foreach (ResearchPaper Paper in Papers)
{
if (Paper.PaperID == Id)
{
Paper.PeerRating++;
continue;
}
else
{
Paper.PeerRating--;
}
}
}
}
此代码的一个有趣的副作用是您可以决定学生最喜欢或最不喜欢哪些论文。在理想的世界中,这会给你类似以下的结果:
关于c# - 比较评分算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384467/