7

我正在为一个班级写一些儿童数学教育软件。

我将尝试以有趣的方式通过随机生成的不同类型的数学问题向不同技能水平的学生提出问题。

使用基于计算机的数学软件的挫折之一是它的僵化。如果有人参加了在线数学课程,您就会知道参加在线测验并因为您的问题没有完全按照他们的形式或一些奇怪的间距问题而抛出正确答案的挫败感。

所以,最初我想,“我知道!我将在答案框中使用表达式解析器,这样我就可以评估他们输入的任何内容,即使它不是同一种形式,我也可以检查如果答案相同的话。” 所以我启动了我的 IDE 并开始实施Shutting Yard 算法。

这将解决它不采取最小形式的分数的问题和其他问题。

然而,我突然想到,一个棘手的学生可以简单地将大部分问题输入答案框中,而我的表达式解析器会尽职尽责地解析并将其评估为正确答案!

那么,我不应该在这种情况下使用表达式解析器吗?我真的必须生成单一形式的答案并进行字符串比较吗?

4

5 回答 5

5

一种可能的解决方案是记下您的表达式评估器需要多少步来评估问题的原始表达式,并将其与最佳答案进行比较。如果差异太大,那么问题还没有被充分减少,你可以建议学生继续前进。

不过,如果学生提出的答案比您自己对“最佳”的定义更好,请不要感到惊讶!我是几个班级的助教/评分员,最聪明的学生通常在他们的问题集上得到优于教授提供的答案。

于 2009-04-30T15:44:09.103 回答
2

对于您正在寻找确切答案的简单问题,删除空格并进行字符串比较是合理的。

对于更高级的问题,您可以使用 Shunting Yard Algorithm(或类似算法),但可能对其进行参数化,以便您可以打开/关闭减少以防止棘手的学生。您会注意到“简单”答案仍然可以使用解析器,但您将禁用所有缩减。

例如,在除法问题上,您将禁用“/”减少。

于 2009-04-30T15:44:16.607 回答
1

这是一个很好的问题。

如果您正在编写一个表达式系统和一个评估/转换/等效引擎(在某处没有可用的引擎吗?我几乎 100% 确定某处有一个开源引擎),那么它更像是一个教育/代数问题:是学生的答案在代数上更接近原始表达式或预期表达式。

我不确定如何回答,只是一个想法(不一定实用):也许您的评估引擎可以将转换步骤计算为等效。如果答案对预期的步骤比对原始答案的步骤少,那可能没问题。如果它太接近原版,它不是。

于 2009-04-30T15:44:19.773 回答
0

您可以使用表达式解析器,但对答案中允许的表达式的复杂性应用限制。

例如,如果目标是减少 (4/5)*(1/2),并且您希望允许 (2/5) 或 (4/10),那么您可以将允许答案的集合限制为树采用 (x/y) 形式,并且也计算为正确的数字。也许您还允许“0.4”,即计算结果为正确数字的 (x) 形式的表达式。

如果您手动对问题进行评分,这正是您将(隐含地)做的事情——您将寻找一个正确但也属于可接受的类别的答案。

于 2009-04-30T15:45:12.500 回答
0

在数学评估软件中执行此操作的常用方法是允许问题设置者指定正确答案中不允许的表达式/字符串。

如果您碰巧对现有软件感兴趣,可以使用开源 Stack http://www.stack.bham.ac.uk/(或 MapleTA 等各种商业选项)。我怀疑你会遇到的大多数问题 Stack 也遇到过,所以即使你不想使用它,看看它是如何处理事情的也可能是有教育意义的。

于 2009-05-12T21:45:19.993 回答