Должен ли я использовать анализатор выражений в моей игре Math? - PullRequest
7 голосов
/ 30 апреля 2009

Я пишу детское программное обеспечение по математике для класса.

Я попытаюсь представить проблемы студентам разного уровня квалификации со случайно сгенерированными математическими задачами разных типов в увлекательной игровой форме.

Одним из недостатков использования компьютерного математического программного обеспечения является его жесткость. Если кто-то посещал онлайн-урок по математике, вы будете знать все о том, как разочаровались в проведении онлайн-викторины и выбросили правильный ответ, потому что ваша проблема не отформатирована в их форме или какая-то странная проблема.

Итак, первоначально я подумал: «Я знаю! Я использую синтаксический анализатор выражений в поле ответа, чтобы иметь возможность оценивать все, что они вводят, и даже если он не будет в той же форме, я буду возможность проверить, если это тот же ответ. " Поэтому я запускаю свою IDE и начинаю реализовывать алгоритм Shunting Yard.

Это решило бы проблему отсутствия дробей в наименьшей форме и другие вопросы.

Однако потом меня поразило, что хитрый ученик просто мог бы ввести большинство проблем в поле для ответов, и мой анализатор выражений послушно проанализировал бы и оценил его до правильного ответа!

Итак, я не должен использовать парсер выражений в этом случае? Мне действительно нужно сгенерировать одну форму ответа и сравнить строки?

Ответы [ 5 ]

5 голосов
/ 30 апреля 2009

Одним из возможных решений является отметить, сколько шагов ваш оценщик выражений делает, чтобы оценить исходное выражение задачи, и сравнить его с оптимальным ответом. Если разница слишком велика, значит, проблема не была достаточно уменьшена, и вы можете предложить ученику продолжать.

Не удивляйтесь, если студенты придумают лучшие ответы, чем ваше собственное определение «оптимального», хотя! Я был учителем / оценщиком в нескольких классах, и у самых ярких учеников обычно были ответы на их проблемные наборы, которые превосходили те, что были предоставлены профессором.

2 голосов
/ 30 апреля 2009

Для простых задач, где вы ищете точный ответ, тогда разумно удалить пробелы и сравнить строки.

Для более сложных задач вы можете использовать алгоритм Shunting Yard (или аналогичный), но, возможно, параметризовать его, чтобы вы могли включать / выключать сокращения, чтобы защититься от хитрого ученика. Вы заметите, что «простые» ответы все еще могут использовать анализатор, но вы бы отключили все сокращения.

Например, для вопроса о делении вы бы отключили сокращение "/".

1 голос
/ 30 апреля 2009

Это отличный вопрос.

Если вы пишете систему выражений и механизм оценки / преобразования / эквивалентности (разве нет такого где-нибудь? Я почти на 100% уверен, что где-то есть открытый код), то это скорее образование проблема алгебры: является ли ответ ученика алгебраически ближе к исходному выражению или к ожидаемому выражению.

Я не уверен, как на это ответить, но просто идея (не обязательно практическая): возможно, ваш механизм оценки может посчитать шаги преобразования в эквивалентность. Если для ответа требуется меньше шагов к ожидаемому, чем для оригинала, возможно, все в порядке. Если это слишком близко к оригиналу, это не так.

0 голосов
/ 13 мая 2009

Обычный способ сделать это в программном обеспечении для оценки математики - разрешить задающему вопрос задавать выражения / строки, которые не допускаются в правильном ответе.

Если вам интересно существующее программное обеспечение, есть стек с открытым исходным кодом http://www.stack.bham.ac.uk/ (или различные коммерческие опции, такие как MapleTA). Я подозреваю, что с большинством проблем, с которыми вы столкнетесь, Stack также столкнулся, поэтому даже если вы не хотите его использовать, может быть полезно изучить, как он подходит к вещам.

0 голосов
/ 30 апреля 2009

Вы можете использовать синтаксический анализатор выражений, но применять ограничения на сложность выражений, разрешенных в ответе.

Например, если целью является уменьшение (4/5) * (1/2) и вы хотите разрешить либо (2/5), либо (4/10), то вы можете ограничить набор допустимых ответов к выражениям, деревья которых принимают форму (х / у) и которые также оцениваются в правильное число. Возможно, вы бы также допустили «0,4», то есть выражения вида (x), которые оцениваются как правильные числа.

Это именно то, что вы бы (неявно) делали, если бы оценивали задачу вручную - вы искали бы правильный ответ, который также попадает в приемлемый класс.

...