как реализовать алгоритм адаптивного тестирования?

Тема в разделе "Delphi - Базы данных", создана пользователем Guest_new_visitor_*, 20 апр 2006.

Статус темы:
Закрыта.
  1. Guest_new_visitor_*

    Guest_new_visitor_* Гость

    Как реализовать алгоритм адаптивного тестирования? Есть БД в Interbase, клиент должен быть в Delphi. Адаптивное тестирование - это когда от того, как хорошо ты ответишь на первые нескольно вопросов зависит то, какой сложности вопрос тебе предложат следующим. Если правильно - то вопрос с большим весом (всего 3 - слабо, средне, сильно), а если неправильно - то легкий. Хранимая процедура или UDF? Если честно, уже голова кругом идет, а времени мало остается.
    Пожалуйста, помогите кто чем может - буду рада любому совету! :)
     
  2. Barmutik

    Barmutik Гость

    Просто вариант .. есть множество вопросов и есть множество переходов из одного вопроса в другие с разными весами (в нашем случае правильно и не правильно ответили).

    Начинаем в какой-либо точкемножества и дальше двигаясь по определнным переходам имеем путь из множества переходов..
     
  3. Shurup

    Shurup Гость

    В БД все вопросы должны содержать дополнительный аттрибут: сложность.

    Пусть сложность = Sloz: int и изменяется от Sloz_0 до Sloz_1.

    Для отвечающего (пользователя) можно тоже создавать профили в базе данных (если хочешь покруче). Можно сделать категории вопросов и т.о. дифференцировать опыт пользователя по категориям (математика, физика, информатика и т.д.).

    Рассматриваем случай, когда без категорий.
    Значит для тестируемого в профиле должен быть один аттрибут: "умность" :p.
    Пусть умность = Um: double и изменяется от Um_0 до Um_1.
    Если без профилей (аноним), то Um := (Um_0 + Um_1) / 2;

    Итерация ответа: {
    Находишь вопрос который подходит для текужего значения Um.
    (Это можно делать разными способами) [1]
    В зависимости от правильности ответа изменяешь значение Um
    (Это можно делать разными способами) [2]
    }

    [1]
    тут если размеры Sloz и Um разные, то надо нормировать:

    Otv_Pow = (Sloz - Sloz_0) / (Sloz_1 - Sloz_0);
    Usr_Pow = (Um - Um_0) / (Um_1 - Um_0);

    Как видишь все эти нормированные переменные изменябются от 0.0 до 1.0 и типа double.

    Находим рандомный вопрос с таким вычисленным (т.е. вычисляется для каждого вопроса) Otw_Pow наиболее близким к вычисленным для пользователя Usr_Pow. Сам придумывай как. Зависит от твоей бд, и способов, собственно тоже много. Лучше вынести такие вещи в отдельные методы (процедуры), и менять их подгоняя алгоритм под себя. Так например, следующий вопрос должен быть желательно чуть выше, чем уровень пользователя, иначе он никогда не научится ))

    [2]
    А.
    Если ответил правильно то вычисляем для отвеченного вопроса:

    Otv_Pow = (Sloz - Sloz_0) / (Sloz_1 - Sloz_0);

    Вычисляем для пользователя:
    Usr_Pow = (Um - Um_0) / (Um_1 - Um_0);

    IF (Usr_Pow > Otv_Pow) {
    Usr_Pow увеличивается, но не сильно
    } ELSE IF (Usr_Pow == Otv_Pow) {
    Usr_Pow увеличивается нормально
    } ELSE {
    Usr_Pow увеличивается до Otv_Pow или даже больше
    }

    Б.

    Если ответил неправильно то вычисляем для неотвеченного вопроса:

    Otv_Pow = (Sloz - Sloz_0) / (Sloz_1 - Sloz_0);

    Вычисляем для пользователя:
    Usr_Pow = (Um - Um_0) / (Um_1 - Um_0);

    IF (Usr_Pow < Otv_Pow) {
    Usr_Pow уменьшаем совсем чуть-чуть
    } ELSE IF (Usr_Pow == Otv_Pov) {
    Usr_Pow уменьшаем нормально
    } ELSE {
    Usr_Pow уменьшаем до Otv_Pow или даже меньше
    }

    Конечно, лучше все уменьшения-увеличения делать пропорционально: Abs(Usr_Pow - Otv_Pow); где Abs - модуль
     
  4. Nastya

    Nastya Гость

    Спасибо большое за помощь, попробую что-нибудь из этого сделать :) Выбор вопросов будет происходить непосредственно в процессе тестирования из БД вопросов. Этот контроль знаний будет встроен в электронное методическое пособие (по одной дисциплине). Это ЭМУ будет устанавливаться на каждый компьютер. А как свести всю статистику в одно место? Чтобы результаты каждого студента были у преподавателя? Целесообразно ли делать 2-х звенную или это совсем неэффективно?
    И еще :) Я предполагала сделать три типа вопросов или два (выбор одного, выбор нескольких, ввод одного рпавильного слова), возможно ли разместить их в одной таблице?
     
  5. Shurup

    Shurup Гость

    <!--QuoteBegin-Nastya+23:04:2006, 00:51 -->
    <span class="vbquote">(Nastya @ 23:04:2006, 00:51 )</span><!--QuoteEBegin-->Спасибо большое за помощь, попробую что-нибудь из этого сделать :( Выбор вопросов будет происходить непосредственно в процессе тестирования из БД вопросов. Этот контроль знаний будет встроен в электронное методическое пособие (по одной дисциплине). Это ЭМУ будет устанавливаться на каждый компьютер. А как свести всю статистику в одно место? Чтобы результаты каждого студента были у преподавателя?[/quote]
    Если ты используешь клиентсерверную БД, то все данные по-любому будут храниться централизованно и будут доступы всем одинаково.
    А на каждый комп будет ставиться клиент, работающий с этой одной БД.
    <!--QuoteBegin-Nastya+23:04:2006, 00:51 -->
    <span class="vbquote">(Nastya @ 23:04:2006, 00:51 )</span><!--QuoteEBegin-->Целесообразно ли делать 2-х звенную или это совсем неэффективно?
    И еще :) Я предполагала сделать три типа вопросов или два (выбор одного, выбор нескольких, ввод одного рпавильного слова), возможно ли разместить их в одной таблице?[/quote]
    Вот например можно сделать так (грубо) с одной таблицей:

    Код (Text):
    TABLE QUESTION {
    ID: INTEGER;
    CATEGORY_ID: INTEGER;
    QUESTION_TYPE: INTEGER;
    QUESTION_POWER: INTEGER;
    QUESTION_STRING: VARCHAR;
    }

    TABLE QUESTION_STRING { // содержит просто строки, на кот. будем ссылаться
    ID: INTEGER;
    STRING: VARCHAR;
    WEIGHT: INTEGER; // говорит о том правилен ли вариант либо любая другая инфа
    }

    TABLE QUESTION2STRING {
    QUESTION_ID: INTEGER;
    STRING_ID: INTEGER;
    }
    ..keep it simple..
     
  6. new_visitor

    new_visitor Гость

    Я хотела делать как положено клиент-серверную, ну а как иначе проводить тестирование и вести статистику успеваемости и т.д. и т.п. Но у моего руководителя на этот счет другие соображения. Придумал, чтобы на каждом компе была установлена своя локальная версия, и БД соотв. тоже на каждом (как я поняла :) ) А результаты должны записываться в какую-то системную таблицу, которая будет создаваться на этом же компьютере. Не совсем понятно. Просто тесты в сосставе методич. пособия. И в этой же сист. таблице д/б что-то вроде статистики посещения разделов ЭМП,... Про сист. таблицы вообще раньше не слышала. Причем вроде бы должны они создаваться не в той БД, где тесты, а втой, которую студент создаст для лабораторных работ. А как? Имена-то все разные дают, да и мето расположения на диске тоже... ИЛи просто у руководителя фантазия больная ? :)
    Понимаю, что все вопросы звучат слишком глупо... Я попробовала доступ через БДЕ, раз уж не надо на сервере БД размещать. Для простого вывода данных из БД в Интербейс подходит. А посложнее... Вот такой вопрос: в БД в одной из таблиц есть поле, значение которого принимает значение 1 или 2 (это у меня обозначение типа вопроса). И я хотела, чтобы в клиенте, в зависимости от того, какой типа вопроса будет выбран (со значением поля 1 или 2) отображался либо компонент OptionGroup либо Edit. И заступорилось. Ничего в голову не лезет. Кое-какие свойства посмотрела - не получается. А кокой вопрос какого типа будет заранее неизвестно.

    И еще (извините за СТОЛЬКО вопросов): Вы очень доступно объяснили механизм адаптивного тестирования, только вот теперь не знаю: это непосредственно в Делфи надо писать или все-таки в Интербейс хранимай процедурой? (глупый вопрос, но важный :angry: ). А еще проблема с тем, как идентифицировать/сравнить тот ответ, который введет или отметит студент с тем, который в БД в поле "правильный ответ" значится?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей