Использование деревьев и/или для генерации вопросов и задач

В. В. Кручинин

ИСПОЛЬЗОВАНИЕ ДЕРЕВЬЕВ И/ИЛИ ДЛЯ ГЕНЕРАЦИИ ВОПРОСОВ И ЗАДАЧ

Рассматриваются вопросы применения деревьев И/ИЛИ для построения генераторов тестовых заданий и вопросов. Предложены оригинальные алгоритмы для генерации текстов заданий при изучении языков программирования. Показано использование деревьев И/ИЛИ для проверки семантики сгенерированной задачи. Описан алгоритм генерации вопросов для классификации, приведен конкретный пример реализации. Для студентов, аспирантов, преподавателей и инженеров, занимающихся тестовым контролем знаний.

Генераторы вопросов и тестовых заданий становятся важным элементом системы контроля знаний в вузе. Они используются при выдаче индивидуальных заданий студентам, проведении тестовых экзаменов и контрольных работ, создании различных тренажеров, компьютерных учебных программ и мультимедийных учебников [1-3].

Центральным узлом генератора является база знаний, которая обеспечивает формализованное представление знаний некоторой предметной области. Структура этой базы определяет основные характеристики генератора: вариантность, сложность, надежность, перечисляемость. Вариантность определяет общее число вопросов и тестовых заданий, которое может быть получено данным генератором. Надежность определяет корректность генерируемых заданий, поэтому необходимо иметь генератор, который генерирует только корректные задания. Перечисляе-мость определяет возможность однозначного соответствия между некоторым номером и конкретным вопросом, полученным генератором.

При создании генераторов могут использоваться различные модели представления знаний [4]. Одной из возможных моделей является дерево И/ИЛИ, основные понятия и перечислительные свойства которых даны в [5].

Ниже предлагаются оригинальные модели и алгоритмы генераторов вопросов и тестовых заданий, основанные на использовании деревьев И/ИЛИ.

ГЕНЕРАЦИЯ ТЕКСТА ТЕСТОВОГО ЗАДАНИЯ

Дерево И-ИЛИ можно использовать для многовариантного представления тестового задания. Для этого текст задания разбивается на фрагменты. Обычно фрагменты разбиваются на классы: постоянные {Т} и переменные {V}. Для переменных фрагментов записываются множества реализаций, каждый из которых представляет собой конкретный текст. Затем каждый

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

Рассмотрим использование данного метода на конкретном примере. Пусть дано конкретное тестовое задание: «Дана следующая функция, написанная на языке программирования Си: int Sum(int v[], int n){ int sum=0;

for(int i=0; i<n; i++){ sum+ = *v++; } return sum;} и следующий фрагмент программы int vec[5]={1, 7, 12, 5, 7}; prinf(“%s”,sum(vec,5));

Какое число будет напечатано?»

В этом задании необходимо понять, что функция Sum определяет сумму элементов одномерного массива v, и в ответ ввести конкретный результат.

Используя выразительные возможности языка программирования Си, можно различными способами написать функцию нахождения суммы. Например: название функции может быть различным (Sum, Total, CountSum, countsum и т.д.); описание параметров также может иметь различные вариации (int*v, int v[]): цикл также можно записать с помощью операторов while и for; тело цикла также может быть записано различными способами. Таким образом, задачу нахождения суммы целочисленного вектора можно записать некоторым множеством функций. Все это множество можно представить деревом И/ИЛИ (рис 1).

Рис. 1. Дерево И-ИЛИ для представления множества подпрограмм

Весь текст функции можно разделить на три фрагмента { , , _Р3}, тогда узел Т будет И-узлом, содержащий сыновей ^2, ^3. Каждый из фрагментов

разделяется на фиксированные и переменные части. Например, узел ^ разбивается на три фиксированных

фрагмента {Т1 , Г4, Т6 } и один переменный VI, который имеет два варианта реализации {Г2 , Г3 }. Ниже в табл. 1 перечислены значения узлов {Г }221 .

_____________________________ Т а б л и ц а 1

<T1> := int Sum(int <T12> = sum+=v[i]; i++;

<T2>:= *v <T13> = sum+=*v++; i++;

<T3>:= уЦ <T14> = sum=sum+*(v+i); i++;

<T4>:= ,int n){ <T15> = sum=sum+v[i];

<T5>:= int sum=0; <T16> = sum=sum+v[i];

<T6>:= int i=0; <T17> = sum=sum+*v++;

<T7>:= while(i<n) { <T18> = sum+=v[i];

<T8>:= for(int i=0; i<n; i++){ <T19> = sum+=*v++;

<T9>:= sum=sum+v[i++]; <T20> = sum=sum+*(v+i);

<T10>:= sum=sum+v[i]; i++; < H 1 > =1

<T11>:= sum=sum+*v++; i++; <T22> = return sum; }

Используя алгоритм подсчета вариантов в дереве И/ИЛИ [3], подсчитываем общее количество вариантов, которое будет равно 24. Для генерации конкретной функции необходимо получить номер варианта и, используя алгоритм построения варианта [3], - соответствующий вариант. Производя левосторонний обход варианта и записывая листья, получим конкретное описание функции. Приведем примеры двух вариантов.

1. Вариант {Т1, Т2, Т4, Т5, Т6, Т7,Т9,Т21,Т22}.

М £ит(Ш п){

Ш 5ида=0;

Ш 1=0; ч>Ы1е(1<п) {

sum=sum+v[i++];

}

return sum;

}

2. Вариант {Т1, Т3, T4, T5, T8,T19,T21,T22} int Sum(int v[], int n){ int sum=0;

for(int i=0; i<n; i++){ sum + = *v++;

}

return sum;

}

ОПРЕДЕЛЕНИЕ НАЛИЧИЯ РЕШЕНИЯ ЗАДАЧИ ПРИ ГЕНЕРАЦИИ

Проблема генерации задач уже обсуждалась в литературе [6, 7]. Ниже предлагается способ проверки наличия решения, который основан на построении и ана-

лизе дерева И/ИЛИ. Рассмотрим данный метод на примере генерации задачи на встречу. Общая схема задачи показана на рис. 2.

V, Т

A

SVT

V2T2

(I

Б

• • • • •

Рис. 2. Схема задачи на встречу

Для решения указанной задачи необходимо записать следующие формулы:

£ = 51 + £2,

где £ - путь между пунктами; £1 - путь первого и £2 -путь второго «путников»;

£ = / х V; £ = х V1; £ = /2 х ^;

/ - общее время движения; ^ - время движения первого и /2 - время движения второго «путников»; V - средняя скорость движения; V1 - скорость первого и V2 - скорость второго «путников»;

V = £ / /; V1 = £ / /ь V = £ / /2;

/ = £ / V; /1 = £ / V1; /2 = £ / V2;

/ = /1 + /2; /1 = /2;

К и К2 - некоторые константы, причем V1 = V2 + К1; £ = £ + К2.

Тогда задача может быть формально сгенерирована следующим образом: известны некоторые переменные (например, £, /, К2); необходимо найти другие переменные (У1, У2). Если генерировать множество известных параметров и искомых переменных, то можно получить конкретную задачу, которая не будет иметь решения. Поэтому после генерации задачи необходимо осуществить семантическую проверку задачи на предмет наличия решения. Для этого используем метод, основанный на построении и использования дерева И-ИЛИ. Первоначально на основе множества приведенных формул строится дерево И/ИЛИ, далее производится его анализ, определяются варианты, дающие возможность построения уравнения. Рассмотрим кратко основные моменты построения дерева И/ИЛИ. Корнем этого дерева становится искомая переменная. Далее в

базе знаний ищутся все формулы, в которых левая часть содержит данную переменную. Эти формулы записываются как сыновья рассматриваемого узла. А сам узел становится узлом ИЛИ (т.е. для определения переменной, записанной в рассматриваемом узле, необходимо использовать одну из формул). Затем происходит переход на рассмотрение узла, в котором записана одна из формул. Все переменные, которые имеются в формуле, записываются в узлы, которые являются сыновьями рассматриваемого узла (где записана формула). А сам рассматриваемый узел становится узлом И, т.к. для вычисления формулы необходимо знать значения всех переменных. Листом дерева становится узел, в котором записана переменная в следующих случаях:

1) значение переменной известно;

2) переменная является искомой переменной;

3) в процессе построения дерева рассматриваемая переменная использовалась ранее (вариант рекурсии).

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

Рассмотрим работу данного метода на конкретном примере. Пусть дана следующая задача:

Из пунктов А и Б навстречу друг другу вышли два пешехода. Известно расстояние 10 км, время в пути 2 часа. Известно также, что скорость второго пешехода на 1 км/ч больше, чем скорость первого. Необходимо найти скорость первого пешехода.

Для решения этой задачи база знаний должна содержать следующие формулы:

(1) 5 => = > 51+52;

(2) V => 5//;

(3) t => 5^;

(4) 51 => V1 1 => 5-52;

(5) 52 => v2*t2 => 5-51;

(6) V! => 51//1 => v2-k;

(7) v2 => 52/2 => у1+к;

(8) И => 81/у1;

(9) /2 => 52^2.

Дано 5=10, /1=/2=/=2, к=1.

Найти v1.

Первым шагом поиска решения является построение дерева решений. Дерево решений для нашего примера показано на рис. 3. Построение начинается с записи искомой переменной VI (см. описание алгоритма построения дерева И-ИЛИ). Далее записываются формулы, с помощью которых определяется искомая переменная (это формулы 51//1 и v2-k). Использование второй формулы приводит к решению через нахождение переменной v2. Для краткости этот вариант рассматриваться не будет. Рассмотрим ветвь для формулы 51/1. Для данного узла будут записаны два сына - переменная 51 и переменная /1. Переменная /1 известна по условию задачи. Она становится листом. Далее рассматривается переменная 51. Для нее в базе знаний имеется две формулы 5-52 и v1*t1. Использование второй формулы не приведет к решению, т.к. происходит сокращение переменных. Для формулы 5-52 необходимо найти 52, т.к. переменная 5 известна. Для переменной 52 в базе знаний имеется две формулы: v2*t2 и 5-51. Использование второй формулы приводит к рекурсии, т. к. ранее подстановка для переменной 51 уже использовалась. Рассмотрим формулу v2*t2. Здесь неизвестная переменная v2. Для нее производим подстановки. Это формулы 52/й. и v1+k. Первая и вторая формула приводит к рекурсии. Таким образом, процесс построения дерева заканчивается.

решение для V2

- или-узел

Рис. 3. Дерево решений

После построения дерева решений производится его анализ. Анализ включает: подсчет количества вариантов, анализ каждого варианта с использованием алгоритмов эквивалентных преобразований. Всего вариантов решений, без учета ветви у2+к, будет 4 (см. рис. 2). Решение будет получено при использовании варианта с номером 1 (см. алгоритм нумерации И/ИЛИ дерева). Этот вариант показан на рис. 4. В этом дереве записаны подстановки формул, приводящие к построению уравнения.

Рис. 4. Вариант решения

Рассмотрим эти подстановки:

(1) v1; V1 => 5Ш;

(2) 51/Л; 51 => 5-52;

(3) (5-б2)//1; 52 => v2*t2;

(4) (5-^2 т))Л1; v2 => v1+k;

(5) (5-(^1+к)Ч2))/1

ГЕНЕРАЦИЯ МЕНЮ ВОПРОСОВ

Как известно, используя ограничения рекурсии, контекстно-свободные грамматики можно представить деревьями И/ИЛИ [3].

1. Записывается два дерева И/ИЛИ: первое описывает грамматику правильных, второе - грамматику неправильных выражений.

2. Вычисляем количество правильных и неправильных выражений, получаемых из соответствующих деревьев т и п.

3. Вопрос формулируется следующим образом: «Среди перечисленных выражений укажите верные (или неверные).

4. Используя метод нумерации вариантов в дереве И/ИЛИ и алгоритм генерации меню-вопросов, генерируем меню вопрос[3].

4. Общее число вопросов будет вычисляться по формуле

v=Ck С1 ,

т п 5

где к - количество правильных вариантов ответа в вопросе; I - количество неправильных вариантов ответа.

ПОСТРОЕНИЕ МЕНЮ-ВОПРОСОВ НА ОСНОВЕ КЛАССИФИКАЦИЙ

Классификации являются одним из важных элементов знаний преподаваемого курса или дисциплины. Обычно классификации представляются в виде некоторой таблицы или иерархии. Ниже предлагается метод генерации меню вопросов на основе классификации, представленной в виде И/ИЛИ дерева (рис. 5).

Этот метод заключается в следующем:

1. По данной классификации признаков строится И/ИЛИ дерево.

2. Определяется количество вариантов в И/ИЛИ дереве.

3. Строится таблица соответствий между вариантом И/ИЛИ дерева и конкретным классифицируемым объектом или явлением. Эта таблица содержит название понятия, объекта или явления и соответствующие номера вариантов.

4. Выбирается одна строчка таблицы и строится вариант, соответствующий номеру данного названия (понятия, объекта или явления).

5. Случайно выбираются еще несколько строк таблицы.

6. Вопрос формулируется так: «Даны следующие признаки: <вариант, полученный на шаге 4>. Укажите правильное название (понятия, объекта или явления)». Перечисляются случайно перемешанные названия, полученные на шаге 4 и 5. Правильным ответом будет название, полученное на шаге 4.

Рассмотрим данный метод на конкретном примере. Пусть дано дерево И-ИЛИ, классифицирующее легковые автомобили (это дерево является условным, поскольку реальное дерево содержит тысячи узлов, а таблица содержит десятки тысяч строк).

Используя алгоритм подсчета вариантов, получим:

V = (9) X (3) X (1 + (1 + 1) +1) X 3 X 2 = 648.

Вариант дерева с номером 0 будет:

Автомобиль: кузов: хэтчбек, колеса: 19 дюймов, двигатель: электрический, привод: задний, коробка: механика.

Предположим, что этот вариант соответствует автомобилю марки «Мерседес» модели 123. Аналогично ставим соответствие с другим вариантом классификационного дерева. Затем строим табл. 2 соответствий:

Т а б л и ц а 2

Название модели автомобиля Номера вариантов

«Мерседес-123» 0

«Ауди-530» 1

«Тойота-127» 2

«Запорожец» 3

«Москвич-413» 4

Автомобиль

Кл/зов

Колеса Двигатель Привод

в я „ 03

Ої Л)

а> -о

'Т. о

ГР Р £э й оэ о

я й

сь

я я

« 2 рз «а 3

ІЗ ^ р ^ » э сп

П> "О

в

§

и спь

І ? 5

<Т> * и>

м п>

Коробка

х

к

5 В

» §

§е

Рис. 4. Дерево И-ИЛИ для представления классификации

Используя описанный метод, можно получить следующий вопрос: «Даны следующие узлы (характеристики) автомобиля: кузов: хэтчбек; колеса: 19 дюймов; двигатель: электрический; привод: задний; коробка: механика.

Укажите марку: 1) «Ауди-530»; 2) «Тойота-127»; 3) «Мерседес-123»; 4) «Москвич-413».

Правильный ответ здесь третий: !Мерседес-123».

Подсчет числа вопросов можно произвести следующим образом:

N =пС\ ,

где N - общее число вопросов; п - число строк таблицы; СП_[ - число сочетание из (п - 1) марок автомобилей по 3 для формирования списка неверных ответов.

ЗАКЛЮЧЕНИЕ

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

Применение деревьев И/ИЛИ для представления модели знаний предметной области позволяет строить разнообразные алгоритмы генерации вопросов и тестовых

заданий. Кроме этого, они дают возможность строить алгоритмы семантической проверки на наличие решений при генерации тестовых заданий.

Предложенные модели и алгоритмы использовались при разработке генераторов контрольных работ и экзаменов, которые успешно эксплуатируются в Томском межвузовском центре дистанционного образования.

ЛИТЕРАТУРА

1. Кручинин В.В. Разработка компьютерных учебных программ. Томск: Изд-во Том. ун-та, 1998. 211 с.

2. Башмаков А.И., Башмаков И А. Разработка компьютерных и обучающих систем. М.: Информационно-издательский дом «Филинъ», 2003. 616 с.

3. Кручинин В.В. Генераторы в компьютерных учебных программах. Томск: Изд-во Том. ун-та, 2003. 200 с.

4. Представление и использование знаний / Под ред. Х. Уэно, М. Исидзука. М.: Мир, 1989. 220 с.

5. Кручинин В.В. Алгоритмы и перечислительные свойства деревьев И/ИЛИ // Вестник Томского гос. ун-та. 2004. № 284. С. 178-181.

6. Кручинин В.В., Морозова Ю. В. Модели и алгоритмы генерации задач в компьютерном тестировании // Изв. ТПУ. 2004. № 5. С. 127-131.

7. Кручинин В.В, Морозова Ю.В. Модели генераторов вопросов для компьютерного контроля знаний // Открытое и дистанционное образова-

ние. Вып. 2(14), 2004. С. 36-42.

Статья представлена кафедрой промышленной электроники факультета электронной техники Томского государственного университета систем управления и радиоэлектроники, поступила в научную редакцию «Кибернетика» 15 мая 2004 г.