c# - 比较评分算法

标签 c# algorithm

我在确定同行评审研究论文之类的评分算法时遇到了棘手的问题。

上这门课:

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--;
            }
        }
    }
}

此代码的一个有趣的副作用是您可以决定学生最喜欢或最不喜欢哪些论文。在理想的世界中,这会给你类似以下的结果: Ideal Results

关于c# - 比较评分算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384467/

相关文章:

c# - 如何在带有 StringTemplate 的循环中使用 IF 语句

c# - SelectPdf HtmlToImage 抛出 "Conversion error: Unknown error"

c# - 如何在 asp.net 中为不同的浏览器定义不同的 css 文件?

c# - 为什么 IF 和条件运算符之间的 IL 如此不同?

python - 使用一组中尽可能多的数字求和

java - 打印子集的最佳递归算法

c# - 将 NameValueCollection 绑定(bind)到 GridView?

c++ - 生成一组随机 x、y、z 数,它们之间的差异在定义的限制之间最小

c++ - std::vector 超出最小堆范围:C++

performance - 高效存储和评估大量 boolean 表达式