УДК: 681.142.2 Ю.А. Зорин Использование алгоритмов комбинаторной генерации при построении генераторов тестовых заданий Статья посвящена проблеме автоматизации процесса получения тестовых заданий на основе алгоритмов комбинаторной генерации. Автор раскрывает задачи, стоящие перед сообществом преподавателей, в плане разработки тестовых заданий. В результате выявленных проблем предлагается метод представления тестового задания с помощью деревьев И/ИЛИ, а также его синтаксическое описание для информационных систем. Ключевые слова: Генерация, деревья И/ИЛИ, информационные технологии, тестовые задания, комбинаторное множество, алгоритм комбинаторной генерации и нумерации комбинаторных множеств. Генератор тестовых заданий – это программа, результатом выполнения которой является информационный объект, содержащий один или несколько тестовых вопросов в определенном формате представления. Генераторы тестовых заданий являются важным инструментом контроля знаний и используются в педагогической практике учителями образовательных учреждений, преподавателями высшего и среднего образования, которым приходится работать над формированием многовариантных заданий, предназначенных для определения уровня знаний обучающихся. При этом применяются различные методы построения алгоритмов генерации: сочетания, перестановки, деревья и т.д. [4, 11 с.]. Методы построения алгоритмов генерации и нумерации комбинаторных множеств самые разнообразные и зависят от рассматриваемого комбинаторного множества. Самым распространенным является эвристический метод, когда алгоритм комбинаторной генерации разрабатывается специально для рассматриваемого множества. В таких алгоритмах описание базы знаний, необходимой для работы алгоритма, носит эвристический характер, построение алгоритма осуществляется на основе некоторых допущений, характерных для данного комбинаторного множества, и, после построения алгоритма, доказывается его эффективность. Такой метод построения алгоритмов комбинаторной генерации недостаточно эффективен, т.к. порой очень сложно выявить закономерности, которые лежат в основе рассматриваемого множества [4, 12 c.]. Сравнительно недавно появился метод построения алгоритмов генерации, основанный на использовании деревьев И/ИЛИ [2, 9 с.]. Автор метода показывает, что между вариантами полученного дерева И/ИЛИ и элементами исходного множества существует взаимно-однозначное соответствие. Следовательно, каждый вариант дерева И/ИЛИ описывает один элемент множества. Для получения генератора требуется представить исходное комбинаторное множество в виде дерева И/ИЛИ, построить алгоритм преобразования элемента множества в вариант дерева И/ИЛИ и алгоритм обратной трансформации. Таким образом, алгоритм получения варианта дерева И/ИЛИ является алгоритмом генерации элемента комбинаторного множества. Применение алгоритмов генерации при разработке многовариантных тестовых заданиях (табл. 1), позволяют не только решать проблему индивидуализации заданий, но и повышает достоверность результата оценки знаний за счет решения большого количества заданий. Таблица 1. Пример многовариантных заданий Вариант 1. 1. Аня купила проездной билет на месяц и сделала за месяц только 29 поездок. Сколько рублей она переплатила, если проездной билет стоит на месяц стоит 650 рублей, а разовая поездка - 20 руб.? 2. Найдите корень уравнения -14х-5=42-6х. Вариант 2. 1. Света приобрела проездной билет на год и сделала в течении 30 недель только 50 поездок. Сколько рублей она переплатила, если проездной билет на год стоит 6650 рублей, а разовая поездка - 20 руб.? 2. Найдите корень уравнения 4х+10=58+9х. 3. Из 870 деталей на складе 52 оказались бракованными. Какова вероятность взять бракованную деталь? Ответ указать с точностью 0,01. Вариант 3. 4. Аня купила проездной билет на месяц и сделала за месяц только 28 поездок. Сколько рублей она переплатила, если проездной билет стоит на месяц стоит 800 рублей, а разовая поездка - 22 руб.? 5. Найдите х: 20х=22-3х. 6. Из 600 помидор на ферме 21 оказалось недоспелыми. Какова вероятность сорвать спелый помидор? Ответ указать с точностью 0,001. 3. Из 400 деталей на складе 12 оказались бракованными. Какова вероятность взять исправную деталь? Ответ указать с точностью 0,1. Вариант 4. 7. Катя купила проездной билет на полгода и сделала за месяц только 15 поездок. Сколько рублей она переплатила, если проездной билет стоит на год стоит 6500 рублей, а разовая поездка - 18 руб.? 8. Решите уравнение: х=62-102х. 9. Из 800 деталей на складе 2 оказались бракованными. Какова вероятность взять бракованную деталь? Ответ указать с точностью 0,001. Зачастую разработчики тестовых заданий для вариаций вопросов применяют инструментальные средства, применяющие алгоритмы генерации для получения различных вариантов представления тестового задания за счет изменения числовых параметров в тексте вопроса, и, как следствие, генерацию ответа в виде формулы, в зависимости от выбранных параметров. Более распространен способ разработки алгоритма генерации того или иного задания на известных языках программирования (С, С++, Pascal, PHP и т.д.), что решает проблему генерации, однако данный способ не подходит для большинства преподавателей (в основном гуманитарных специальностей), не знакомых ни с одним языком программирования. Одним из возможных решений задачи сокращения времени на разработку тестовых вопросов является создание инструментального средства, реализующего метод построения генерации тестовых заданий на основе деревьев И/ИЛИ, что в конечном итоге позволит решить спектр задач по написанию, генерации и формированию банка тестовых заданий для различных систем тестирования. Для получения генератора требуется представить исходное комбинаторное множество, составляющих тестового задания в виде дерева И/ИЛИ, построить алгоритм преобразования элемента множества в вариант дерева И/ИЛИ и алгоритм обратной трансформации. Для этого текст задания разбивается на фрагменты. Обычно фрагменты разбиваются на узлы: постоянные и переменные [1, 183 с.]. Для переменных узлов записываются множества реализаций, каждый из которых представляет собой конкретный текст. Затем каждый из выделенных узлов реализаций анализируется и, если есть возможность, разбиваются на переменные и постоянные узлы. На рис. 1 изображена задача 1 (табл. 1) в представлении дерева И/ИЛИ. Рис. 1. Представление тестового задания в виде дерева И/ИЛИ Именованные ветви A, B, D, E и F имеют по 3, 2, 3, 30, 36 и 770 различных вариантов представления с учетом параметров, указанных в диапазоне (1-й узел ветви D, ветвь E, F), соответственно. Используя алгоритм подсчета вариантов в дереве И-ИЛИ, подсчитывается общее количество вариантов, которое будет равно 14968800. Для генерации конкретной задачи необходимо получить номер варианта и, используя алгоритм построения варианта, получить соответствующий вариант. Выполнив левосторонний обход варианта и выписав соответствующие узлы, получим конкретное описание функции [1, 184 с.]. Например, 1.Вариант {A1, B1, C, D1, E1, F, G} Аня купила проездной билет на год и сделала в течении 25 дней 5 поездок. Сколько рублей она переплатила, если проездной билет стоит 2400 рублей, а разовая поездка 15 рублей? 2.Вариант {A2, B1, C, D1, E1, F, G} Света купила проездной билет на год и сделала в течении 25 дней 5 поездок. Сколько рублей она переплатила, если проездной билет стоит 2400 рублей, а разовая поездка 15 рублей? Подобное представление наглядно отображает структуру всего вопроса для разработчика, однако необходим синтаксис описания подобных древовидных структур для возможности использования синтаксиса в инструментальных средствах. В 2010 году Титков А.В. разработал язык программирования GIL – Generation and Identification Language (язык генерации и нумерации), предназначенный для разработки алгоритмов генерации и нумерации комбинаторных объектов, основанный на использовании деревьев И/ИЛИ и их рекурсивных композиций. Однако, это самостоятельный язык программирования, а также набор библиотек для программиста. Таким образом, синтаксис языка GIL взят за основу создания синтаксиса описания генератора тестовых заданий, пользоваться которым может педагогическое сообщество [3, 83 c.]. Для записи деревьев И/ИЛИ предлагается использовать скобочную нотацию: круглыми скобками обозначаются И-узлы, фигурными – ИЛИ-узлы, узлы без скобок являются листами. Узлы дерева могут быть именованными и неименованными. Именованные – это те узлы, у которых есть идентификатор, неименованные – те, у которых идентификатора нет. Идентификатор узла является атомом и может представлен двумя типами: строкой или числом. Идентификатор может состоять из любого набора символов, исключая зарезервированные символы и знак пробела [4, 62 с.]. Задание, представленное на рис. 1 в виде дерева И/ИЛИ на языке GIL, выглядит следующим образом: Main(A{“Аня”, “Света”, “Марина”}, B {“купила”, “приобрела”}, “проездной билет”, C{“на год”, “на полгода”, “на месяц”}, D{(“и сделала в течении”,[1..28],”дней”), “и сделал в течении месяца”, “в течении недели”}, E{([15..20], “поездок”)}, F{“сколько рублей она переплатила, если проездной билет стоит”, [100,100..7000], “рублей, а разовая поездка”,[15..20],”рублей?”})) Применение деревьев И/ИЛИ для генерации тестовых заданий позволяет описывать не только тексты вопросов, но также описывать ответы и формировать корректные условия задач в зависимости от выбираемой ветви. Введем понятия статично-именованные ветви и условноименованные ветви. Статично-именованные ветви имеют зарезервированное название и предназначены для выполнения определенных операций, например, главный узел ветви с названием IF, позволяет задавать условия выбора: «истина» - выбирается ветвь левая, «ложь» - правая, имя ветви MATH – упрощение математического выражения. Условно-именованные ветви имеют префикс в названии, например, префикс “#”, так, например, условно-именованная ветвь #ANS, не включается в процесс общей генерации, а только идентифицируется для последующего применения. Рассмотрим пример создания тестового задания по нахождению корней квадратного уравнения (рис. 2). Рис. 2. Задача «Квадратное уравнение», описанное в виде дерева И/ИЛИ Из описанного задания (рис. 2) возможна генерация 200 тыс. различных вариантов. Ниже приведены два возможных вариантов задания: Решите квадратное уравнение: 5x2+12.5x-2=0. Решите биквадратное уравнение: x4+25x2-8=0. Из рис. 2 очевидно использование условно-именных ветвей K1, ANSWER, которые идентифицируются в зависимости от поведения ветви S и не отображаются в общем выводе. Дальнейшее применение условно-именных ветвей возможно в без написания префикса «#». Применение деревьев И/ИЛИ для представления тестовых заданий определенной предметной области позволяет формировать различные алгоритмы генерации вопросов. Предложенная система генерации тестовых заданий проходит апробацию в Томском государственном университете систем управления и радиоэлектроники, в качестве инструмента для создания контрольных и экзаменационных работ для студентов дистанционной формы обучения. Список литературы 1. Использование деревьев И/ИЛИ для генерации вопросов и задач//Кручинин В.В. Вестник ТГУ №284, г. Томск, 2004. – 251 c. 2. Методы построения алгоритмов генерации и нумерации комбинаторных объектов на основе деревьев И/ИЛИ: монография. Кручинин В.В. / Издательство «В-Спектр», г. Томск, 2007. – 200 с. 3. Развитие языка GIL//Зорин Ю.А., А.В. Титков. – Сборник трудов XVII Международной научнопрактической конференции студентов и молодых ученых "Современные техника и технологии". – г. Томск, 2011, 186 c. 4. Система построения генераторов комбинаторных множеств на основе деревьев И/ИЛИ//Титков А.В. Диссертация на соискание степени кандидата технических наук, г. Томск, 2010. – 111 c. 5. 1. – С. 100–102. Сведения об авторе: ФИО: Зорин Юрий Алексеевич Должность: Аспирант каф. Промышленная электроника, программист Место работы: г. Томск, Томский государственный университет систем управления и радиоэлектроники (ТУСУР) Область научных интересов: Информационные и вычислительные системы и сети, компьютерные алгоритмы, алгоритмы генерации комбинаторных множеств, информатика. Телефон: +7-962-778-4617 Адрес: 634045, г. Томск, ул. Мокрушина, 13 – 197. E-mail: [email protected]