Классификация генераторов
Прежде чем предлагать свою классификацию генераторов, приведем в качестве примеров две классификации подходов к генерации, имеющие общетеоретический характер. В статье Ильи Александровича Посова [3] предлагается следующая классификация технологий создания генераторов задач:
1. программируемые генераторы, основа которых - программирование алгоритма решения математической задачи;
2. параметрические генераторы, представляющие собой текст со вставками, в которые следует поместить случайные числа;
3. предметно-ориентированные генераторы, построенные на основе готовой универсальной процедуры, основанной на базе знаний и редакторе генераторов; 4. выбирающие генераторы, которые производят выбор фрагментов задач из подготовленных заранее баз фрагментов и их «склеивание» в формулировку очередной задачи.
При этом наиболее мощной считается первая технология, и для облегчения работы по созданию программируемых генераторов предлагается разработка специального языка создания генераторов. Автор в целом солидарен с этой позицией.
В работе [21] предложена классификация методов генерации тестовых заданий, имеющая «глобальный» характер. Эта классификация используется для сравнения методов генерации. Различаются следующие подходы:
1. методы хранимых и параметризированных шаблонов;
2. метод множественных генераторов (библиотека программируемых генераторов);
3. метод графа знаний и обучающего кластера;
4. метод генераций на основе онтологий (анализ динамики работы студента с ПО);
5. метод нейронных сетей (обучаемый искусственный интеллект генератора);
6. метод на основе формальных исчислений (например, исчислений Э. Поста).
Автор статьи предлагает классификацию генераторов задач по особенностям устройства самого алгоритма, реализующего такую генерацию. При этом можно выделить следующие типы алгоритмов генерации:
1. генерация условия задачи, а затем решение ее некоторым алгоритмом;
2. одновременная генерация условия задачи и ее ответа;
3. генерация ответа задачи, а затем генерация задач с данным ответом;
4. генерация «ядра» задачи с получением из него условий и ответа как следствий;
5. итерационное построение задачи в виде усложняющейся структуры с пересчетом текущего ответа;
6. построение задачи путем отбрасывания части условий из избыточной системы условий, а затем решение полученной задачи;
7. комбинирование задачи из нескольких частей, получаемых из наборов-банков этих частей, с последующим решением;
8. построение системы заданий с ветвящейся логической структурой (гиперзадача);
9. системы задач, реализуемые в виде процесса с переходами в разные состояния. Первый тип генерации является классическим. К примеру, традиционная программарешатель реализует ввод условия задачи вместо его генерации, а затем работает некоторый (численный или аналитический) метод решения задачи. В дисциплине «Алгебра» по первому типу может быть устроен генератор задач на вычисление определителей. Сначала происходит генерация определителя заданного порядка. Затем происходит вычисление определителя, скажем, методом Гаусса и устранение возможных погрешностей, так как учебные задачи на определители традиционно целочисленные.
Второй тип генерации соответствует применению шаблонов. При этом вместо параметров подставляются в формулы конкретные числа и составляются требуемые коэффициенты. Конечно, требуется предусмотреть сокращение дробей и прочие «мелочи», но сам подход выглядит очевидным. Таким способом удобно генерировать задачи на неопределенные интегралы из «Математического анализа».
Третий тип генерации «раскручивает» задачу от получаемого в начале ответа. При этом возможно получить несколько различных задач с одним и тем же ответом. Ясно, что таких «родственных» задач должно быть в общем наборе немного. Решатель при указанном способе генерации отсутствует. Пример алгоритма данного типа, порождающего задачи на решение СЛАУ, был разобран в начале статьи.
Четвертый тип генерации характерен для задач с четко выраженным математическим «ядром». Например, для многочлена характерным является набор его корней, являющийся «ядром» проблемы. Но в задаче может потребоваться не сам многочлен. Например, это может быть характеристический многочлен матрицы, а в итоге должны быть получены семейства собственных векторов. При этом должна быть сгенерирована исходная матрица (условие задачи) и найдены некоторым алгоритмом ее собственные векторы (ответ). То же самое «ядро» порождает другие условия и ответ, если речь идет о генерации задач на однородные линейные дифференциальные уравнения высокого порядка с постоянными коэффициентами. Здесь условием задачи является уравнение (по сути, видоизмененная запись многочлена), а ответом служит параметрическая формула, получаемая по «ядру».
Пятый тип генерации предложен в работах В.А. Болотюка и Л.А. Болотюк. Например, в статье [24] приводятся изображения сгенерированных карточек контрольных работ по дискретной математике, где с помощью рекурсивного алгоритма рассматриваемого типа построены комбинаторная схема на расчет числа вариантов и задача на составление матрицы смежности графа. Специальная библиотека подпрограмм, разработанная авторами, позволяет строить сложные графические изображения к задачам. Аналогично можно генерировать, постепенно надстраивая графическую структуру и пересчитывая ответ, задачи на кратчайшие пути, задачи на критические сроки выполнения проектов и транспортные задачи оптимизации стоимости перевозок.
Шестой тип генерации рассмотрим на характерном примере. Во многих задачах на вычисление определенных и двойных интегралов, на классическую и графическую оптимизацию функций двух переменных требуется генерировать замкнутую область на плоскости, задаваемую системой ограничений. Задание заведомо избыточной системы ограничений, а затем случайное или упорядоченное удаление части из них позволяет получать на одном и том же исходном наборе ограничений различные плоские области. Сгенерированная область является «ядром» нескольких математических задач, к которому могут быть добавлены дополнительные записи, порождающие условие задачи конкретного вида. Решение задачи (получение ответа) происходит алгоритмически.
Седьмой тип генерации, или генератор-компилятор, работает с базой фрагментов задач и «собирает» из случайно выбранных фрагментов итоговую задачу, которая затем решается некоторым алгоритмом. Сама база фрагментов задач предварительно заполняется вспомогательными генераторами фрагментов. Предположим, что преподаватель желает составить самостоятельную работу на решение СЛАУ с помощью обратной матрицы. При этом он не хочет «мучить» студентов сложностями в алгоритме обращения и собирается использовать только матрицы с определителями ±1, ±2 и ±3. Преподаватель запускает вспомогательный генератор квадратных матриц с установкой заданного условия на ее определитель. При этом большинство сгенерированных матриц отбрасывается, а «годные» сохраняются в базе фрагментов. Затем произвольным образом заполняется база правых частей СЛАУ. Теперь можно запускать основной генератор-решатель матричного способа и готовить наборы карточек для самостоятельной работы.
Восьмой и девятый типы генерации относятся скорее к методам генерации взаимосвязанных систем задач и подсказаны автору статьями Л.А. Ашкинази. Например, в статье [25] предложен способ организации контрольной работы в виде единой «гиперзадачи» с условными переходами к следующим этапам контрольной, зависящими от результатов предыдущих этапов. Правда, и сам автор описываемой статьи называет такое построение «искусственным» и предлагает его лишь как еще одну версию генерации. Второй подход из работы [25] вообще относится к физическим задачам и использует изменяющееся состояние физического процесса для организации логических переходов между заданиями создаваемой контрольной работы.
Предложенный список типов алгоритмов генерации можно расширять и далее, по мере накопления новых идей и методов.
Генератор как рабочий инструмент преподавателя
Изложенная позиция автора по вопросам генерации задач ясна. Задачи он собирается применять на традиционных учебных занятиях, не нуждаясь ни в огромных наборах вариантов, ни в их постоянном обновлении. Генератор должен помочь ему при необходимости быстро и качественно создать небольшие наборы задач (не более 50-100 единиц) по конкретной теме математической дисциплины. Поэтому и требования к генератору становятся иными. Скорее всего, это будет программа авторской разработки, без дополнительной покупки нестандартного лицензионного ПО. Программа эта должна генерировать задачи в режиме КУП под постоянным контролем со стороны преподавателя. Хотя некоторые процедуры отбрасывания негодных задач могут быть реализованы как автоматические, гораздо важнее оценка качества задачи самим преподавателем, для чего необходима графическая визуализация задачи и ее решения на экране и выдача вспомогательных числовых параметров, характеризующих «качество» построенного варианта. Кроме того, сами процессы генерации (например, множество используемых чисел и вероятности их появления) следует организовать так, чтобы частота появления «неудачных» задач была невелика: ведь каждую допустимую задачу преподаватель будет просматривать вручную! Первым проблемным моментом предлагаемого генератора является необходимость построения на экране весьма сложных графических изображений и рисования специальных символов. Здесь будет необходимо создавать целую систему или библиотеку подпрограмм экранной графики. Вторым проблемным моментом такого генератора является построение и распечатка карточек заданий. Возможно, что автору генератора придется повозиться с ручной обрезкой кадров-изображений и вставкой их в единый красочный шаблон варианта в виде рисунков. Это потребует значительных затрат времени, зато и карточки вариантов можно будет получить более качественные. Собственно, деятельность преподавателя состоит не в экономии времени, а в повышении качества выполняемой им работы и ее отдельных фрагментов.
Примером-иллюстрацией данного подхода к генерации задач может служить генератор задач на кривые второго порядка для дисциплины «Геометрия». Типовая задача на исследование и построение кривой имеет следующую формулировку: «По данному общему уравнению кривой второго порядка определить тип кривой, получить ее каноническое уравнение и построить кривую на плоскости». Генератор таких задач очень прост по устройству и именно поэтому приводится в статье в качестве примера. Во-первых, простота генератора заключается в отсутствии какого-либо решателя и использовании «пересчитываемых друг в друга» шаблонов канонического и общего уравнений кривой. Вовторых, графическое изображение кривой второго порядка любого типа легко реализуется с помощью ее параметрических уравнений (кривая, как траектория движения точки).
Рисунок. Окно основного режима генерации (разработано автором)
Устройство предлагаемого генератора как КУП предполагает наличие предварительных графических меню выбора режима работы, основного окна-кадра, где происходит генерация и анализ полученной задачи, и графических окон для формулировки условия задачи и прорисовки ее ответа. Предположим, что в первом меню выбран гиперболический тип кривой, а во втором - гипербола с фокусами, расположенными на оси ординат. Тогда окно основного режима генерации соответствующих гипербол примет вид, схематически изображенный на рисунке. Для понимания общего смысла задачи у всех параметров и коэффициентов сохранены буквенные обозначения.
Автор считает, что не следует генерировать параметры кривой x0, y0, a, b случайным образом. Координаты центра кривой и размеры ее полуосей должен вводить сам преподаватель. При этом автоматически заполняется шаблон канонического уравнения (справа), прорисовывается сама кривая, и находятся коэффициенты общего уравнения (внизу). В специальных массивах генератор должен сохранять информацию о предыдущих сгенерированных за время сеанса гиперболах и при совпадении данных выдавать сообщение о повторной генерации задачи. Отбраковка задач будет происходить человеком по следующим не вполне строгим критериям (на основе предоставленной генератором графической и числовой информации):
1. большое удаление кривой от начала координат;
2. неудачная форма кривой (например, ее излишняя «вытянутость»);
3. неудачные коэффициенты общего уравнения (большие, нулевые, одинаковые);
4. задача уже есть в создаваемом наборе (подсказка-дополнение).
Сгенерировав достаточное количество гипербол указанного типа (не более 15-20 задач), пользователь вернется в меню гиперболического типа и выберет режим «гипербола с фокусами на оси абсцисс» или «пара пересекающихся прямых» и продолжит свою работу. Более сложные генераторы математических задач будут иметь свои особенности, но в целом схема работы с ними будет аналогичной.
В статье проблема создания и использования генераторов математических задач рассмотрена во взаимодействии с сопутствующими технологическими, социальными и воспитательными проблемами. По мнению автора, лишь анализируя это взаимодействие, можно выбрать правильные пути создания и использования генераторов в каждом конкретном случае. Предложена классификация генераторов алгоритмического типа и авторское виденье генератора как инструмента автоматизированной творческой деятельности преподавателя по созданию методического обеспечения традиционных математических дисциплин.