1 Востаннє редагувалося exmate (16.04.2023 02:14:01)

Тема: Формула вирогідності в залежності від минулих відповідей

Доброго дня.

Може хтось вже робив щось подiбне:

є список неправильних глаголів в структурі у кожного є кількісь заданних TTLASK і кількість корректних TTLCRR відповідей.
В залежності від цих значень треба задавати питання.

зараз у мене так (GPT3 підказав :) ):

if (first time) then ask

if (rand((1-ttcrr/ttask)^2*100) > 10) then ask

Вже все працює, але відчуття що воно дуже затикається на питаннях з неправильно данними відповіддями.
Так і треба, але щось не так. Я не професійний прогер - так балуюся.

Moже є вже опробуванні десятеліттями формули для такого?

Ну і вирізка з коду :

bool Question::poll()             // if possibility polls
{
    float tmp;
    int seed;
    if (_ttlask==0)   return true; //if  first time than ok
    tmp=((1-(_ttlcrr)/(_ttlask))*(1-(_ttlcrr)/(_ttlask)))*100;
    seed = random(int(tmp));
    return (seed >10) ? true : false;
}

Дякую.
Слава ЗСУ!!!

Сама програмка:
https://drive.google.com/open?id=11HLBw … p=drive_fs

2

Re: Формула вирогідності в залежності від минулих відповідей

Якого типу _ttlcrr та _ttlask?

p.s. Беріть код в теги code, виділіть і натисніть відпвідну кнопочку у форумному редакторі.

Подякували: leofun011

3 Востаннє редагувалося exmate (16.04.2023 02:30:46)

Re: Формула вирогідності в залежності від минулих відповідей

ReAl написав:

Якого типу _ttlcrr та _ttlask?

int _ttlcrr, _ttlask

я в принципі знайшов помилку, - при однакових _ttlcrr, _ttlask ніколи true процедура не верне
І блін була в мене подібна перевірка, але видалив з формулою яка була до GPT .
так що змінив формулу зверху:

if (_ttlcrr==_ttlask) tmp=12;  //   possibility 1/6 to ask question with corr answers
    else
    tmp=((1-(_ttlcrr)/(_ttlask))*(1-(_ttlcrr)/(_ttlask)))*100;//*(_ttl_correct/_ttl_ask)*15;

Подивлюсь як воно.

Христос Воскрес!

4

Re: Формула вирогідності в залежності від минулих відповідей

exmate написав:
ReAl написав:

Якого типу _ttlcrr та _ttlask?

int _ttlcrr, _ttlask

А при неоднакових, якщо вони int та _ttlcrr < _ttlask, то (_ttlcrr)/(_ttlask) завжди дорівнюватиме 0, а tmp відповідно 100.

Подякували: Chemist-i, koala, exmate3

5

Re: Формула вирогідності в залежності від минулих відповідей

Формула вірогідності дуже проста: 1 (або 100%). Ви, мабуть, про формулу імовірності питаєте.
Ви не описали, як ви надалі цю формулу використовуєте. Ви ж, я так розумію, хочете вибрати певну кількість питань, так щоб ті, де були помилки, траплялися частіше, ніж ті, де помилок не було? Тут у вас описана формула, яка обирає питання з імовірністю 100%, якщо питають уперше, і від 0 до 90% у квадратичній залежності від кількості помилок, якщо не вперше. Загалом, формула залежить від підходу, але якщо ви заміните квадрат на вищий ступінь (наприклад, куб), то помилки будуть рідше давати повторні питання. Скажімо, якщо ttcrr/ttask = 1/2, то за вашою формулою буде 60%, що питання знову поставлять, а з кубом лише 20%.
Єдиного підходу тут немає і не може бути, усе залежить від методики навчання/тестування. Може, іноді варто і питання, на які всі відповіді правильні, знову ставити.

Подякували: exmate1

6

Re: Формула вирогідності в залежності від минулих відповідей

ReAl написав:
exmate написав:
ReAl написав:

Якого типу _ttlcrr та _ttlask?

int _ttlcrr, _ttlask

А при неоднакових, якщо вони int та _ttlcrr < _ttlask, то (_ttlcrr)/(_ttlask) завжди дорівнюватиме 0, а tmp відповідно 100.

точно блін, не привів до float. І компілер промовчав блі???? Дякую!

7

Re: Формула вирогідності в залежності від минулих відповідей

koala написав:

Єдиного підходу тут немає і не може бути, усе залежить від методики навчання/тестування. Може, іноді варто і питання, на які всі відповіді правильні, знову ставити.

Алгоритм такий - рандомно вибираеться об'єкт питання . Обєкт перевіряє скільки раз на нього відповіли і скільки раз правильно і рандомно говорить що його треба вивести на екран. Більше помилок при відповіді - більша вирогідність задання питання.

Просто думав що є вже опробуванні коефіцієнти і формули (цю доречі мені gpt3 підказав, узагальнено)- але помилок вже понаходили. Причому на ровному місці :)

8

Re: Формула вирогідності в залежності від минулих відповідей

exmate написав:

точно блін, не привів до float. І компілер промовчав блі???? Дякую!

А чого він має попереджати?
Синтаксично все добре, а семантика на вашій совісті. Може так і треба було.

9 Востаннє редагувалося exmate (18.04.2023 19:01:44)

Re: Формула вирогідності в залежності від минулих відповідей

ReAl написав:
exmate написав:

точно блін, не привів до float. І компілер промовчав блі???? Дякую!

А чого він має попереджати?
Синтаксично все добре, а семантика на вашій совісті. Може так і треба було.

Синтаксично вірно якщо вже не раз на такому обпікся :) афаір Паскаль в цьому випадку інтеґер до флоат ще до ділення привив би.

Можнож булоб сказати що там cast потребує уваги. 

про знаковий та позитивне інт попередило наприклад:

if (_currid ==(_qarray.size()-1))

[bcc32 Warning] quiz.cpp(142): W8012 Comparing signed and unsigned values

10 Востаннє редагувалося exmate (18.04.2023 19:15:59)

Re: Формула вирогідності в залежності від минулих відповідей

Наразі зараз такий код і працює норм .  Глаголи (питання) розбиті на 7 групп (біти у int gr) .
У головноми потоці рандомно визивається екземпляр вектора і цей екземпляр вже вирішує чи його треба задавати


bool Question::poll( int gr )             // if question to be asked according to groupg chosen (gr)

{

int gr_c = get_gr(); // current chosen group of verbs to be asked

float tmp;
int seed;


    if ((gr & gr_c)>1) {      //if groups bits comply
    if (_ttlask==0)   return true; //if  first time then ok

    if (_ttlcrr==_ttlask) tmp=12;  //   possibility 1/6 to ask question with corr answers
    else
    tmp=((1-((float)_ttlcrr)/(_ttlask))*(1-((float)_ttlcrr)/(_ttlask)))*100;//*(_ttl_correct/_ttl_ask)*15;

    if (tmp<10) tmp=11; // if no chanse for ask then make 1/10

    #ifdef __WIN32__
        seed = random(int(tmp));
    #endif

    return (seed >10) ? true : false;

    }    //if group comply
     else
 return false;      // if out of group

}

11

Re: Формула вирогідності в залежності від минулих відповідей

Вирівняйте код. Ви ж самі собі в першу чергу життя псуєте.