Идеята ми е да направя леко опростен вариант на Акинатор, който by default да работи за животни: https://en.akinator.com/.
Играта протича по следния начин: всеки път, когато потребителят си намисли животно, програмата започва да задава въпроси за него. На всеки въпрос потребителят може да отговаря само с “да” или “не”. След всеки един отговор от потребителя програмата може да зададе нов въпрос или да направи директно предположение от типа “Куче ли е?”. В случай, че програмата е отгатнала правилно намисленото животно (т.е. отговорът на предположението е бил положителен), играта приключва и може да бъде започната нова. Ако отговорът е бил отрицателен , то тя е задължена да попита какво е било то, а потребителят е задължен да отговори коректно. След това програмата трябва да зададе няколко допълнителни въпроса, за да „научи“ как може да различава новото животно от това, което е предположила (вж. примера накрая). Тогава програмата трябва да добави новото животно и характеристиките, които е научила за него, в базата със знания. При следващата игра програмата вече ще разполага с по-широк набор от знания – и за различни животни, и за техните характеристики. Допуска се възможността ако програмата не знае какво да попита или отгатне, да се предаде и да помоли потребителя да въведе намисленото животно.
Ще приемаме, че в началото базата от данни се състои от няколко животни, като например куче, котка, папагал и златна рибка. Тази база, естествено, ще се разширява с течение на времето. Програмата също ще разполага поначало с множество въпроси, отнасящи се до животните. Примерни такива въпроси са “Два крака ли има?”, “Птица ли е?”, “Лети ли?”, “Топлокръвно ли е?” и други, следователно отговорите им могат да бъдат само булеви стойности – конкретно, низовете “да” и “не”. Колкото повече въпроси са имплементирани в началното състояние на програмата, толкова по-умело ще може тя да ги задава и да достига до верен отговор. Базата на знанията ще се съхранява във файл.
Примерна игра, в която програмата не познава намисленото животно и задава допълнителни въпроси, за да го различи с другите животни. На въпроса “Как мога да различа X и Y?” потребителят е задължен да отговори с въпрос - той може да присъства вече в базата с въпроси, а може и да е чисто нов.
“Топлокръвно ли е?”
“да”
“Птица ли е?”
“да”
“Гълъб ли е?”
“не”
“Предавам се, какъв е отговорът?”
“Щраус”
“Как мога да различа Гълъб и Щраус?”
“Голямо ли е?”
“Кое от двете отговаря с “да” на този въпрос?”
“Щраус”
“Благодаря, записвам.”
П.С: Честно казано би работел за всякакъв тип обекти, защото потребителите могат да го обучават както си искат, но все пак.