|
|
% ===============================================
|
|
|
% Демонстрационные запросы для lab8 task6
|
|
|
% Полный акинатор
|
|
|
% ===============================================
|
|
|
|
|
|
% Запуск демонстрации
|
|
|
demo :-
|
|
|
write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 6: ПОЛНЫЙ АКИНАТОР ==='), nl, nl,
|
|
|
|
|
|
% 1. Информация о системе
|
|
|
write('1. ИНФОРМАЦИЯ О СИСТЕМЕ АКИНАТОРА'), nl,
|
|
|
write('=================================='), nl,
|
|
|
demo_system_info,
|
|
|
nl,
|
|
|
|
|
|
% 2. Демонстрация базы знаний
|
|
|
write('2. ДЕМОНСТРАЦИЯ БАЗЫ ЗНАНИЙ'), nl,
|
|
|
write('============================'), nl,
|
|
|
demo_knowledge_base,
|
|
|
nl,
|
|
|
|
|
|
% 3. Тестирование логики определения
|
|
|
write('3. ТЕСТИРОВАНИЕ ЛОГИКИ ОПРЕДЕЛЕНИЯ'), nl,
|
|
|
write('=================================='), nl,
|
|
|
demo_detection_logic,
|
|
|
nl,
|
|
|
|
|
|
% 4. Анализ эффективности
|
|
|
write('4. АНАЛИЗ ЭФФЕКТИВНОСТИ'), nl,
|
|
|
write('======================='), nl,
|
|
|
demo_efficiency_analysis,
|
|
|
nl,
|
|
|
|
|
|
% 5. Симуляция игровых сценариев
|
|
|
write('5. СИМУЛЯЦИЯ ИГРОВЫХ СЦЕНАРИЕВ'), nl,
|
|
|
write('=============================='), nl,
|
|
|
demo_game_scenarios,
|
|
|
nl,
|
|
|
|
|
|
% 6. Демонстрация обучения
|
|
|
write('6. ДЕМОНСТРАЦИЯ СИСТЕМЫ ОБУЧЕНИЯ'), nl,
|
|
|
write('================================='), nl,
|
|
|
demo_learning_system,
|
|
|
nl,
|
|
|
|
|
|
% 7. Инструкции по использованию
|
|
|
write('7. ИНСТРУКЦИИ ПО ИСПОЛЬЗОВАНИЮ'), nl,
|
|
|
write('==============================='), nl,
|
|
|
demo_usage_guide,
|
|
|
nl,
|
|
|
|
|
|
write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 6 ЗАВЕРШЕНА ==='), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Информация о системе
|
|
|
% -----------------------------------------------
|
|
|
demo_system_info :-
|
|
|
akinator_info,
|
|
|
nl,
|
|
|
write('РАСШИРЕННЫЕ ВОЗМОЖНОСТИ:'), nl,
|
|
|
write('- Интеллектуальный алгоритм задавания вопросов'), nl,
|
|
|
write('- Система обучения на ошибках'), nl,
|
|
|
write('- Статистика игровых сессий'), nl,
|
|
|
write('- Анализ эффективности различения'), nl,
|
|
|
write('- Адаптивная стратегия угадывания'), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Демонстрация базы знаний
|
|
|
% -----------------------------------------------
|
|
|
demo_knowledge_base :-
|
|
|
write('СТРУКТУРА БАЗЫ ЗНАНИЙ:'), nl,
|
|
|
|
|
|
% Показать количество объектов по категориям
|
|
|
demo_category_breakdown,
|
|
|
nl,
|
|
|
|
|
|
% Показать примеры характеристик
|
|
|
write('ПРИМЕРЫ ХАРАКТЕРИСТИК:'), nl,
|
|
|
demo_sample_characteristics,
|
|
|
nl,
|
|
|
|
|
|
% Анализ покрытия
|
|
|
write('АНАЛИЗ ПОКРЫТИЯ ВОПРОСОВ:'), nl,
|
|
|
demo_coverage_analysis.
|
|
|
|
|
|
demo_category_breakdown :-
|
|
|
Categories = [
|
|
|
(is_domestic, 'Домашние животные'),
|
|
|
(is_mammal, 'Млекопитающие'),
|
|
|
(can_fly, 'Летающие'),
|
|
|
(is_predator, 'Хищники'),
|
|
|
(is_large, 'Крупные животные'),
|
|
|
(has_stripes, 'Полосатые'),
|
|
|
(is_nocturnal, 'Ночные'),
|
|
|
(lives_in_water, 'Водные'),
|
|
|
(can_swim, 'Умеющие плавать')
|
|
|
],
|
|
|
forall(member((Category, Description), Categories),
|
|
|
demo_single_category(Category, Description)).
|
|
|
|
|
|
demo_single_category(Category, Description) :-
|
|
|
findall(Obj, characteristic(Obj, Category, yes), Objects),
|
|
|
length(Objects, Count),
|
|
|
write(' '), write(Description), write(': '), write(Count), write(' ('),
|
|
|
( Count =< 5 -> write_list(Objects); write('много объектов') ),
|
|
|
write(')'), nl.
|
|
|
|
|
|
demo_sample_characteristics :-
|
|
|
SampleAnimals = [собака, тигр, орел, лягушка, пчела],
|
|
|
forall(member(Animal, SampleAnimals), demo_animal_characteristics(Animal)).
|
|
|
|
|
|
demo_animal_characteristics(Animal) :-
|
|
|
write(' '), write(Animal), write(': '),
|
|
|
findall(Char-Value, characteristic(Animal, Char, Value), Characteristics),
|
|
|
demo_compact_characteristics(Characteristics),
|
|
|
nl.
|
|
|
|
|
|
demo_compact_characteristics([]).
|
|
|
demo_compact_characteristics([Char-yes|Rest]) :-
|
|
|
write(Char), write('+'),
|
|
|
( Rest \= [] -> write(', '); true ),
|
|
|
demo_compact_characteristics(Rest).
|
|
|
demo_compact_characteristics([_-no|Rest]) :-
|
|
|
demo_compact_characteristics(Rest).
|
|
|
|
|
|
demo_coverage_analysis :-
|
|
|
findall(Q, question(Q, _), Questions),
|
|
|
findall(Obj, object(Obj), Objects),
|
|
|
length(Questions, QCount),
|
|
|
length(Objects, OCount),
|
|
|
MaxCombinations is 2^QCount,
|
|
|
|
|
|
write(' Вопросов: '), write(QCount), nl,
|
|
|
write(' Объектов: '), write(OCount), nl,
|
|
|
write(' Максимум различимых: '), write(MaxCombinations), nl,
|
|
|
Coverage is (OCount * 100) // MaxCombinations,
|
|
|
write(' Использование пространства: '), write(Coverage), write('%'), nl,
|
|
|
|
|
|
( OCount =< MaxCombinations ->
|
|
|
write(' ✓ Покрытие достаточное'), nl
|
|
|
; write(' ⚠ Требуется больше вопросов'), nl
|
|
|
).
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тестирование логики определения
|
|
|
% -----------------------------------------------
|
|
|
demo_detection_logic :-
|
|
|
write('ТЕСТИРОВАНИЕ АЛГОРИТМА ОПРЕДЕЛЕНИЯ:'), nl,
|
|
|
|
|
|
% Тест поиска кандидатов
|
|
|
write('Тест 1: Поиск по одному критерию'), nl,
|
|
|
test_single_criterion_search,
|
|
|
nl,
|
|
|
|
|
|
% Тест поиска по нескольким критериям
|
|
|
write('Тест 2: Поиск по нескольким критериям'), nl,
|
|
|
test_multiple_criteria_search,
|
|
|
nl,
|
|
|
|
|
|
% Тест выбора лучшего вопроса
|
|
|
write('Тест 3: Выбор оптимального вопроса'), nl,
|
|
|
test_best_question_selection,
|
|
|
nl.
|
|
|
|
|
|
test_single_criterion_search :-
|
|
|
TestCriteria = [
|
|
|
(is_domestic-yes, 'домашние'),
|
|
|
(can_fly-yes, 'летающие'),
|
|
|
(is_predator-yes, 'хищники'),
|
|
|
(has_stripes-yes, 'полосатые')
|
|
|
],
|
|
|
forall(member((Criterion-Value, Description), TestCriteria),
|
|
|
test_single_search(Criterion, Value, Description)).
|
|
|
|
|
|
test_single_search(Criterion, Value, Description) :-
|
|
|
retractall(answer(_, _)),
|
|
|
assert(answer(Criterion, Value)),
|
|
|
get_current_candidates(Candidates),
|
|
|
length(Candidates, Count),
|
|
|
write(' '), write(Description), write(': '), write(Count), write(' кандидатов'),
|
|
|
( Count =< 5 -> (write(' ('), write_list(Candidates), write(')'))
|
|
|
; true
|
|
|
), nl.
|
|
|
|
|
|
test_multiple_criteria_search :-
|
|
|
TestCombinations = [
|
|
|
([is_domestic-yes, is_predator-yes], 'домашние хищники'),
|
|
|
([can_fly-yes, is_large-yes], 'крупные летающие'),
|
|
|
([is_mammal-yes, lives_in_water-yes], 'водные млекопитающие'),
|
|
|
([has_stripes-yes, is_large-yes], 'крупные полосатые')
|
|
|
],
|
|
|
forall(member((Criteria, Description), TestCombinations),
|
|
|
test_multiple_search(Criteria, Description)).
|
|
|
|
|
|
test_multiple_search(Criteria, Description) :-
|
|
|
retractall(answer(_, _)),
|
|
|
forall(member(Criterion-Value, Criteria), assert(answer(Criterion, Value))),
|
|
|
get_current_candidates(Candidates),
|
|
|
length(Candidates, Count),
|
|
|
write(' '), write(Description), write(': '), write(Count), write(' кандидатов'),
|
|
|
( Count =< 3 -> (write(' ('), write_list(Candidates), write(')'))
|
|
|
; true
|
|
|
), nl.
|
|
|
|
|
|
test_best_question_selection :-
|
|
|
% Тест на разных наборах кандидатов
|
|
|
TestScenarios = [
|
|
|
([собака, кошка, кролик, хомяк], 'домашние животные'),
|
|
|
([лев, тигр, волк, медведь], 'крупные хищники'),
|
|
|
([попугай, канарейка, орел, сова], 'птицы')
|
|
|
],
|
|
|
forall(member((Candidates, Description), TestScenarios),
|
|
|
test_question_selection(Candidates, Description)).
|
|
|
|
|
|
test_question_selection(Candidates, Description) :-
|
|
|
write(' '), write(Description), write(': '),
|
|
|
find_best_question(Candidates, BestQuestion),
|
|
|
question(BestQuestion, Text),
|
|
|
write('лучший вопрос - '), write(BestQuestion), write(' ('), write(Text), write(')'), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Анализ эффективности
|
|
|
% -----------------------------------------------
|
|
|
demo_efficiency_analysis :-
|
|
|
write('АНАЛИЗ ЭФФЕКТИВНОСТИ СИСТЕМЫ:'), nl,
|
|
|
|
|
|
% Анализ уникальности
|
|
|
demo_uniqueness_analysis,
|
|
|
nl,
|
|
|
|
|
|
% Анализ сложности различения
|
|
|
demo_discrimination_complexity,
|
|
|
nl,
|
|
|
|
|
|
% Прогноз производительности
|
|
|
demo_performance_prediction.
|
|
|
|
|
|
demo_uniqueness_analysis :-
|
|
|
write('АНАЛИЗ УНИКАЛЬНОСТИ ОБЪЕКТОВ:'), nl,
|
|
|
findall(Obj, object(Obj), AllObjects),
|
|
|
findall(Obj, is_unique_object(Obj), UniqueObjects),
|
|
|
length(AllObjects, Total),
|
|
|
length(UniqueObjects, Unique),
|
|
|
Duplicates is Total - Unique,
|
|
|
|
|
|
write(' Всего объектов: '), write(Total), nl,
|
|
|
write(' Уникальных: '), write(Unique), nl,
|
|
|
write(' Дубликатов: '), write(Duplicates), nl,
|
|
|
|
|
|
( Duplicates > 0 ->
|
|
|
write(' Примеры дубликатов:'), nl,
|
|
|
demo_duplicate_examples
|
|
|
; write(' ✓ Все объекты уникальны'), nl
|
|
|
).
|
|
|
|
|
|
demo_duplicate_examples :-
|
|
|
findall(Obj, \+ is_unique_object(Obj), NonUniqueObjects),
|
|
|
FirstFew = [Obj1, Obj2, Obj3, Obj4, Obj5],
|
|
|
( append(FirstFew, _, NonUniqueObjects) -> Examples = FirstFew
|
|
|
; Examples = NonUniqueObjects
|
|
|
),
|
|
|
forall(member(Example, Examples), demo_single_duplicate(Example)).
|
|
|
|
|
|
demo_single_duplicate(Object) :-
|
|
|
findall(Other,
|
|
|
(object(Other), Other \= Object, same_characteristics(Object, Other)),
|
|
|
Duplicates),
|
|
|
( Duplicates \= [] ->
|
|
|
write(' '), write(Object), write(' = '), write_list(Duplicates), nl
|
|
|
; true
|
|
|
).
|
|
|
|
|
|
demo_discrimination_complexity :-
|
|
|
write('СЛОЖНОСТЬ РАЗЛИЧЕНИЯ:'), nl,
|
|
|
|
|
|
% Анализ минимального количества вопросов для различения пар
|
|
|
SamplePairs = [
|
|
|
(собака, кошка),
|
|
|
(лев, тигр),
|
|
|
(попугай, канарейка),
|
|
|
(слон, жираф)
|
|
|
],
|
|
|
|
|
|
forall(member((Obj1, Obj2), SamplePairs),
|
|
|
demo_pair_discrimination(Obj1, Obj2)).
|
|
|
|
|
|
demo_pair_discrimination(Obj1, Obj2) :-
|
|
|
findall(Question,
|
|
|
(characteristic(Obj1, Question, Val1),
|
|
|
characteristic(Obj2, Question, Val2),
|
|
|
Val1 \= Val2),
|
|
|
DiffQuestions),
|
|
|
length(DiffQuestions, DiffCount),
|
|
|
write(' '), write(Obj1), write(' vs '), write(Obj2), write(': '),
|
|
|
( DiffCount = 0 ->
|
|
|
write('неразличимы')
|
|
|
; DiffCount = 1 ->
|
|
|
write('1 вопрос ('), write_list(DiffQuestions), write(')')
|
|
|
; write(DiffCount), write(' вопросов')
|
|
|
), nl.
|
|
|
|
|
|
demo_performance_prediction :-
|
|
|
write('ПРОГНОЗ ПРОИЗВОДИТЕЛЬНОСТИ:'), nl,
|
|
|
|
|
|
% Оценка среднего количества вопросов
|
|
|
findall(Obj, object(Obj), Objects),
|
|
|
length(Objects, Total),
|
|
|
AverageQuestions is ceiling(log(Total)/log(2)),
|
|
|
|
|
|
write(' Теоретический минимум вопросов: '), write(AverageQuestions), nl,
|
|
|
|
|
|
% Анализ реального количества вопросов для различных животных
|
|
|
SampleAnimals = [собака, лев, попугай, рыбка, бабочка],
|
|
|
write(' Практические тесты:'), nl,
|
|
|
forall(member(Animal, SampleAnimals), demo_animal_questions(Animal)).
|
|
|
|
|
|
demo_animal_questions(Animal) :-
|
|
|
% Симуляция: сколько вопросов нужно для определения животного
|
|
|
retractall(answer(_, _)),
|
|
|
simulate_questions_for_animal(Animal, 0, QuestionCount),
|
|
|
write(' '), write(Animal), write(': ~'), write(QuestionCount), write(' вопросов'), nl.
|
|
|
|
|
|
simulate_questions_for_animal(Animal, Count, FinalCount) :-
|
|
|
get_current_candidates(Candidates),
|
|
|
length(Candidates, CandidateCount),
|
|
|
|
|
|
( CandidateCount =< 1 ->
|
|
|
FinalCount = Count
|
|
|
; % Найти лучший вопрос и ответить на него согласно характеристикам животного
|
|
|
find_best_question(Candidates, BestQuestion),
|
|
|
characteristic(Animal, BestQuestion, Answer),
|
|
|
assert(answer(BestQuestion, Answer)),
|
|
|
NewCount is Count + 1,
|
|
|
simulate_questions_for_animal(Animal, NewCount, FinalCount)
|
|
|
).
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Симуляция игровых сценариев
|
|
|
% -----------------------------------------------
|
|
|
demo_game_scenarios :-
|
|
|
write('СИМУЛЯЦИЯ РАЗЛИЧНЫХ ИГРОВЫХ СЦЕНАРИЕВ:'), nl,
|
|
|
|
|
|
% Сценарий 1: Быстрое угадывание
|
|
|
write('Сценарий 1: Легкое животное (собака)'), nl,
|
|
|
demo_easy_scenario,
|
|
|
nl,
|
|
|
|
|
|
% Сценарий 2: Сложное угадывание
|
|
|
write('Сценарий 2: Сложное животное (тигр vs лев)'), nl,
|
|
|
demo_difficult_scenario,
|
|
|
nl,
|
|
|
|
|
|
% Сценарий 3: Редкое животное
|
|
|
write('Сценарий 3: Редкое животное (игуана)'), nl,
|
|
|
demo_rare_scenario,
|
|
|
nl.
|
|
|
|
|
|
demo_easy_scenario :-
|
|
|
Animal = собака,
|
|
|
write(' Загаданное животное: '), write(Animal), nl,
|
|
|
retractall(answer(_, _)),
|
|
|
|
|
|
% Симуляция последовательности вопросов
|
|
|
Questions = [is_domestic, is_large, has_fur, is_predator],
|
|
|
demo_question_sequence(Animal, Questions, 1).
|
|
|
|
|
|
demo_difficult_scenario :-
|
|
|
Animal = тигр,
|
|
|
write(' Загаданное животное: '), write(Animal), nl,
|
|
|
write(' Конкурент: лев (очень похожие характеристики)'), nl,
|
|
|
retractall(answer(_, _)),
|
|
|
|
|
|
% Найти различающий вопрос
|
|
|
findall(Q,
|
|
|
(characteristic(тигр, Q, V1),
|
|
|
characteristic(лев, Q, V2),
|
|
|
V1 \= V2),
|
|
|
DiffQuestions),
|
|
|
write(' Ключевые различающие вопросы: '), write_list(DiffQuestions), nl,
|
|
|
|
|
|
% Симуляция до точки различения
|
|
|
Questions = [is_domestic, is_mammal, is_large, is_predator, has_stripes],
|
|
|
demo_question_sequence(Animal, Questions, 1).
|
|
|
|
|
|
demo_rare_scenario :-
|
|
|
Animal = игуана,
|
|
|
write(' Загаданное животное: '), write(Animal), nl,
|
|
|
retractall(answer(_, _)),
|
|
|
|
|
|
% Показать, что делает это животное уникальным
|
|
|
write(' Уникальные характеристики: рептилия, не хищник, не живет в воде'), nl,
|
|
|
Questions = [is_mammal, is_predator, lives_in_water, can_fly],
|
|
|
demo_question_sequence(Animal, Questions, 1).
|
|
|
|
|
|
demo_question_sequence(_, [], _).
|
|
|
demo_question_sequence(Animal, [Question|RestQuestions], Num) :-
|
|
|
characteristic(Animal, Question, Answer),
|
|
|
assert(answer(Question, Answer)),
|
|
|
question(Question, Text),
|
|
|
write(' Вопрос '), write(Num), write(': '), write(Text), write(' -> '), write(Answer), nl,
|
|
|
|
|
|
get_current_candidates(Candidates),
|
|
|
length(Candidates, Count),
|
|
|
write(' Остается кандидатов: '), write(Count),
|
|
|
( Count =< 5 -> (write(' ('), write_list(Candidates), write(')'))
|
|
|
; true
|
|
|
), nl,
|
|
|
|
|
|
NextNum is Num + 1,
|
|
|
demo_question_sequence(Animal, RestQuestions, NextNum).
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Демонстрация системы обучения
|
|
|
% -----------------------------------------------
|
|
|
demo_learning_system :-
|
|
|
write('ВОЗМОЖНОСТИ СИСТЕМЫ ОБУЧЕНИЯ:'), nl,
|
|
|
|
|
|
write('1. Анализ ошибок:'), nl,
|
|
|
write(' - Система запоминает неправильные догадки'), nl,
|
|
|
write(' - Анализирует различия между объектами'), nl,
|
|
|
write(' - Предлагает улучшения базы знаний'), nl, nl,
|
|
|
|
|
|
write('2. Адаптация стратегии:'), nl,
|
|
|
write(' - Выбор оптимальных вопросов'), nl,
|
|
|
write(' - Балансировка между скоростью и точностью'), nl,
|
|
|
write(' - Учет частоты загадывания объектов'), nl, nl,
|
|
|
|
|
|
write('3. Пример анализа ошибки:'), nl,
|
|
|
demo_error_analysis_example,
|
|
|
nl,
|
|
|
|
|
|
write('4. Статистика обучения:'), nl,
|
|
|
demo_learning_statistics.
|
|
|
|
|
|
demo_error_analysis_example :-
|
|
|
write(' Сценарий: Акинатор угадал "лев", а было "тигр"'), nl,
|
|
|
write(' Анализ различий:'), nl,
|
|
|
findall(Q-V1-V2,
|
|
|
(characteristic(лев, Q, V1),
|
|
|
characteristic(тигр, Q, V2),
|
|
|
V1 \= V2),
|
|
|
Differences),
|
|
|
forall(member(Question-LionVal-TigerVal, Differences),
|
|
|
(question(Question, Text),
|
|
|
write(' '), write(Text), write(': лев='), write(LionVal),
|
|
|
write(', тигр='), write(TigerVal), nl)).
|
|
|
|
|
|
demo_learning_statistics :-
|
|
|
write(' Метрики для отслеживания:'), nl,
|
|
|
write(' - Процент успешных угадываний'), nl,
|
|
|
write(' - Среднее количество вопросов'), nl,
|
|
|
write(' - Частота ошибок по категориям'), nl,
|
|
|
write(' - Эффективность различных стратегий'), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Инструкции по использованию
|
|
|
% -----------------------------------------------
|
|
|
demo_usage_guide :-
|
|
|
write('ПОЛНОЕ РУКОВОДСТВО ПО ИСПОЛЬЗОВАНИЮ:'), nl, nl,
|
|
|
|
|
|
write('1. ЗАПУСК ИГРЫ:'), nl,
|
|
|
write(' ?- start_akinator.'), nl,
|
|
|
write(' Система проведет вас через весь процесс игры'), nl, nl,
|
|
|
|
|
|
write('2. ДЕМОНСТРАЦИОННЫЕ КОМАНДЫ:'), nl,
|
|
|
write(' ?- demo. % Полная демонстрация'), nl,
|
|
|
write(' ?- demo_akinator. % Демо акинатора'), nl,
|
|
|
write(' ?- akinator_info. % Информация о системе'), nl,
|
|
|
write(' ?- akinator_statistics. % Статистика эффективности'), nl, nl,
|
|
|
|
|
|
write('3. ТЕСТИРОВАНИЕ:'), nl,
|
|
|
write(' ?- test_akinator_logic. % Тест логики'), nl,
|
|
|
write(' ?- simulate_game(собака). % Симуляция для животного'), nl,
|
|
|
write(' ?- random_animal(X). % Случайное животное'), nl, nl,
|
|
|
|
|
|
write('4. АНАЛИЗ ДАННЫХ:'), nl,
|
|
|
write(' ?- get_current_candidates(X). % Текущие кандидаты'), nl,
|
|
|
write(' ?- find_best_question([собака,кошка], Q). % Лучший вопрос'), nl,
|
|
|
write(' ?- is_unique_object(тигр). % Проверка уникальности'), nl, nl,
|
|
|
|
|
|
write('5. УТИЛИТЫ:'), nl,
|
|
|
write(' ?- reset_akinator. % Сброс состояния'), nl,
|
|
|
write(' ?- show_session_stats. % Статистика сессии'), nl,
|
|
|
write(' ?- export_session_stats(''stats.pl''). % Экспорт статистики'), nl, nl,
|
|
|
|
|
|
write('6. MAKEFILE КОМАНДЫ:'), nl,
|
|
|
write(' make run % Информация об акинаторе'), nl,
|
|
|
write(' make interactive % Интерактивная игра'), nl,
|
|
|
write(' make demo % Демонстрация возможностей'), nl,
|
|
|
write(' make test % Запуск тестов'), nl,
|
|
|
write(' make trace % Трассировка выполнения'), nl, nl,
|
|
|
|
|
|
write('7. СОВЕТЫ ПО ИГРЕ:'), nl,
|
|
|
write(' - Отвечайте честно на все вопросы'), nl,
|
|
|
write(' - Если акинатор ошибся, сообщите правильный ответ'), nl,
|
|
|
write(' - Система учится на ваших ответах'), nl,
|
|
|
write(' - Попробуйте загадать разных животных'), nl, nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Интерактивные примеры
|
|
|
% -----------------------------------------------
|
|
|
example_queries_task6 :-
|
|
|
write('=== ПРИМЕРЫ ИНТЕРАКТИВНЫХ ЗАПРОСОВ ЗАДАНИЯ 6 ==='), nl,
|
|
|
write('Вы можете выполнить следующие запросы в интерактивной сессии:'), nl, nl,
|
|
|
|
|
|
write('1. Запуск акинатора:'), nl,
|
|
|
write(' ?- start_akinator. % Полная игра'), nl,
|
|
|
write(' ?- demo_akinator. % Демонстрация'), nl, nl,
|
|
|
|
|
|
write('2. Анализ и статистика:'), nl,
|
|
|
write(' ?- akinator_info. % Информация о системе'), nl,
|
|
|
write(' ?- akinator_statistics. % Подробная статистика'), nl,
|
|
|
write(' ?- show_session_stats. % Статистика сессии'), nl, nl,
|
|
|
|
|
|
write('3. Тестирование логики:'), nl,
|
|
|
write(' ?- test_akinator_logic. % Тест алгоритмов'), nl,
|
|
|
write(' ?- simulate_game(собака). % Симуляция игры'), nl,
|
|
|
write(' ?- get_current_candidates(Candidates). % Поиск кандидатов'), nl, nl,
|
|
|
|
|
|
write('4. Работа с вопросами:'), nl,
|
|
|
write(' ?- find_best_question([лев,тигр], Question). % Лучший вопрос'), nl,
|
|
|
write(' ?- question(X, Text). % Все вопросы'), nl,
|
|
|
write(' ?- characteristic(собака, X, Y). % Характеристики'), nl, nl,
|
|
|
|
|
|
write('5. Анализ уникальности:'), nl,
|
|
|
write(' ?- is_unique_object(тигр). % Проверка уникальности'), nl,
|
|
|
write(' ?- same_characteristics(лев, тигр). % Сравнение объектов'), nl,
|
|
|
write(' ?- find_distinguishing_characteristics(лев, тигр). % Различия'), nl, nl,
|
|
|
|
|
|
write('6. Утилиты:'), nl,
|
|
|
write(' ?- reset_akinator. % Сброс состояния'), nl,
|
|
|
write(' ?- random_animal(Animal). % Случайное животное'), nl,
|
|
|
write(' ?- export_session_stats(''file.pl''). % Экспорт данных'), nl, nl. |