Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/43: Рейтинг темы: голосов - 43, средняя оценка - 4.93
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209

Экспертная система "продукционная модель знаний"

04.01.2014, 17:10. Показов 8594. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу прогу на C# по теме Экспертная система продукционная модель знаний
Материал взял из http://itteach.ru/predstavleni... iya-znaniy
Но не могу понять
Пример. Имеется фрагмент базы знаний из двух правил:
П1: Если (отдых – летом) и (человек – активный) то (ехать в горы) // if { "отдых – летом", "человек – активный" } to "ехать в горы"
П2: Если (любит – солнце) то (отдых – летом) //if {"любит – солнце"} to "отдых – летом"
Предположим, в систему поступили данные — (человек* – активный) и (любит – солнце).//{"человек – активный", "любит – солнце" }
Прямой вывод — исходя из данных, получить ответ.
1-й проход.
Шаг 1. Пробуем П1, не работает (не хватает данных (отдых–летом)).
Шаг 2. Пробуем П2, работает, в базу поступает факт (отдых–летом).
2-й проход.
Шаг 3. Пробуем П1, работает, активируется цель (ехать в горы), которая и выступает как вывод.
Ок есть 2 правила тут всё ясно. И есть 2 ответа юзера {'человек* – активный", "любит – солнце"}
Но как мы определили что на 1 шаге не хватает данных?
Сделали пересечение множества {'человек* – активный", "любит – солнце"} с { "отдых – летом", "человек – активный"} или как?
шаг 2.
Почему у нас сработало правило? И да в какую базу поступило "отдых–летом" в базу ответов?
То есть у нас теперь стало {"человек – активный", "любит – солнце", "отдых–летом" }? или как
Шаг 3
Ок если у нас стало {"человек – активный", "любит – солнце", "отдых–летом" } то почему П1 сработало ведь нам не хватает тогда "любит – солнце"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2014, 17:10
Ответы с готовыми решениями:

Проектирование и разработка фрагмента экспертной системы (Продукционная модель)
Здравствуйте, я пишу программу по экспертным системам, программа собственно уже готова, только нужно в дополнение к ней добавить класс с...

Экспертная система G2 Gensym
Вообщем может не в тему конечно.... звиняйте... Нужна любая инфа по этой системе. Еще лучше, если кто работал с ней.

Продукционная экспертная система
Подскажите заочнику, что такое продукционная экспертная система. Если можно, своими словами. Как в общих чертах должна работать готовая...

19
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
04.01.2014, 18:17
Никаких пересечений не делается, тупо проход за проходом. Сначала только 2 единицы данных: (человек – активный) и (любит – солнце), а на 2-м проходе уже 3. "Выводу"(П) все равно когда данные поступили, они должны просто иметься на текущий момент. Также все равно какие еще данные есть, одна база на всех
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.01.2014, 18:21  [ТС]
ага кажется разобрался это не пересечение а разность.
А проходов всегда фиксировано будет 2? Или как?
В итоге накидал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        /// <summary>
        /// Ищет решение прямым ходом
        /// </summary>
        /// <param name="answerList">Список ответов пользователя</param>
        /// <returns></returns>
        public String ForwardSolve(IList<String> answerList)
        {
            var action = "Incorrect model.\r\n Solve not found.";
            for (var i = 0; i < 2; i++)//2 прохода
                foreach (var item in _dataPrivider.GetRulesList)//пробегаемся по списку правил в бд
                {
                    if (i == 0)//если это 1 проход
                    {
                        if (!item.RulesList.Except(answerList).Any())//и разница множеств пустая
                        {
                            answerList.Add(item.Action); //добавляем в базу правило
                        }
                    }
                    else//если второй проход
                    {
                        if (!item.RulesList.Except(answerList).Any())//и разница пустая то мы нашли правило
                        {
                            return item.Action;//ответ
                        }
                    }
                }
            return action;
        }
Добавлено через 2 минуты
Igor3D,
Не понял как тупо проход за проходом? И каким критериям тогда должно удовлетворять выполнение П.
Я думал просто разница должна получится не пустой. То если в первом шаге разница получится (отдых–летом). что нам и написали в скобках то есть условию не удовлетворяет.
На фтором шаге разница пустое множество. И как бы условию значит удовлетворяет.
Правили закончились значит пошли на 2 круг.
Как мы узнаем когда останавливаться?
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
04.01.2014, 18:58
Цитата Сообщение от Kill100 Посмотреть сообщение
ага кажется разобрался это не пересечение а разность.
А проходов всегда фиксировано будет 2? Или как?
...
Как мы узнаем когда останавливаться?
Проходов сколько угодно, останавливаться когда база данных не пополнилась.

Первый проход: пробуем П1, не вышло. Пробуем П2 - сработало. Заносим рез-т в базу - там такого еще нет, значит еще проход

Второй проход: пробуем П1, Ок, база пополнена. Пробуем П2, Ok, но в базе это уже есть. Но все равно база обновлена П1, значит еще проход.

Третий проход: все Ок, но база какая была, та и осталась. Стоп

Возможны варианты - напр если правило сработало, то оно больше не применяется, или "до тех пор пока не сработали все правила", но поскольку это никак не оговорено, то "до тех пор пока есть прогресс"
1
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.01.2014, 20:00  [ТС]
Ок а как правильно составлять тогда сами правила?
Допустим. (возможно я что то упустил составляя список но думаю для постой модельке это неважно)
Выбор тарифного плана данного оператора сотовой связи (например, МСT, DuoLine, FonoM ).
Входные данные:
1) какие вызовы преобладают:
- входящие;
- исходящие;
- на телефоны ГТС;
2) наличие абонентской платы;
- Абонентская плата
- По секундная
3) размер абонентской платы;
- 100-200р
- 200-300р
4) другие услуги.
- Интернет
- СМС
То такая модель будет верной или нет?
Code
1
2
3
4
5
6
П1: Если (входящие) и (По секундная) и (Интернет) и (СМС) то (План 1)
П2: Если (исходящие) и (По секундная) и (Интернет) и (СМС) то (План 2)
П3: Если (ГТС) и (Абонентская плата) и (Интернет) и (СМС) и  то (План 3)
П4: Если (Абонентская плата) и (ГТС) то (300-400р) 
П5: Если (Интернет) то (СМС) 
П6: Если (СМС) то (Интернет)
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.01.2014, 20:56  [ТС]
Обратный вывод — подтвердить выбранную цель при помощи имеющихся правил и данных.
1-й проход.
Шаг 1. Цель — (ехать в горы): пробуем П1 — данных (отдых– летом) нет, они становятся новой целью, и ищется правило, где она в правой части.
Шаг 2. Цель (отдых – летом): правило П2 подтверждает цель и активирует ее.
2-й проход.
Шаг 3. Пробуем П1, подтверждается искомая цель.
Шаг 1) ТО есть смотрим с права и если совпадает то берем 1 из правил с лева?
Шаг 2) Отдых летом с права но слева же (любит – солнце) почему оно не стало новым правилом а подтвердило цель? и как понять фразу подтвердило цель?
В обще есть где то на пальцах с примерами расписанное всё это?
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
04.01.2014, 21:54
Цитата Сообщение от Kill100 Посмотреть сообщение
Шаг 1) ТО есть смотрим с права и если совпадает то берем 1 из правил с лева?
Шаг 2) Отдых летом с права но слева же (любит – солнце) почему оно не стало новым правилом а подтвердило цель? и как понять фразу подтвердило цель?
Потому что "обратный вывод", здесь ответ уже известен и надо только менять цели, базу пополнять не нужно. Правило нас не интересует если вывод (правая часть) не совпадает с целью

Цитата Сообщение от Kill100 Посмотреть сообщение
В обще есть где то на пальцах с примерами расписанное всё это?
А может лучше видео? Нормальное задание, бывают намного хуже.
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.01.2014, 22:02  [ТС]
Igor3D,
А что насчет модели с оператором? Такая норм или не верно сделал?

Цитата Сообщение от Igor3D Посмотреть сообщение
Потому что "обратный вывод", здесь ответ уже известен и надо только менять цели, базу пополнять не нужно. Правило нас не интересует если вывод (правая часть) не совпадает с целью
Цель = (ехать в горы)
Шаг 1. Цель — (ехать в горы):
пробуем П1: Если (отдых – летом) и (человек – активный) то (ехать в горы)
По идее тут может быть как и (отдых – летом) так и выбран (человек – активный)? или я не прав?
они становятся новой целью, и ищется правило, где она в правой части.
В правой он П2: Если (любит – солнце) то (отдых – летом)
Шаг 2. Цель (отдых – летом): правило П2 подтверждает цель и активирует ее. ТО есть если мы в принципе нашли правило в котором есть с права (отдых – летом) то это уже активирует цель?
2-й проход.
Цель (отдых – летом)
Шаг 3. Пробуем П1, подтверждается искомая цель.
Как она подтверждается ведь с права у нас же (ехать в горы) ?? О_о
0
2895 / 1930 / 208
Регистрация: 05.06.2011
Сообщений: 5,673
04.01.2014, 22:06
Как вариант (встречал такую): очередь на каждый предикат. Очередь взаимодействует с правилом: если в правиле встречается предикат, пытаемся их сопоставить; если успешно, модифицирует правило, исключив из него предикат; модифицированное правило либо добавляется в базу правил, если в условной части чего-нить осталось, либо, если она пуста, предикаты из части "то" рассовываются по очередям. Процесс идёт до исчерпания всех очередей.
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
04.01.2014, 22:16
Цитата Сообщение от Kill100 Посмотреть сообщение
Igor3D,
А что насчет модели с оператором? Такая норм или не верно сделал?
Не знаю, во всяком случае - как-то нудно сделали, без выдумки.

Цитата Сообщение от Kill100 Посмотреть сообщение
Igor3D,
2-й проход.
Цель (отдых – летом)
Шаг 3. Пробуем П1, подтверждается искомая цель.
Как она подтверждается ведь с права у нас же (ехать в горы) ?? О_о
А здесь нет никакого второго прохода. Вернее - проходы были раньше.

Цель "ехать в горы" - просматриваем все правила. Если справа что-то др (не горы) - нас это не интересует. Это как бы проход. Теперь замещаем цель на то чего не хватает, их может быть несколько. Т.е. мы знаем что если достигнем цели "отдых летом", то и конечная цель (горы) будет достигнута.
1
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.01.2014, 22:37  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Цель "ехать в горы" - просматриваем все правила. Если справа что-то др (не горы) - нас это не интересует. Это как бы проход. Теперь замещаем цель на то чего не хватает, их может быть несколько. Т.е. мы знаем что если достигнем цели "отдых летом", то и конечная цель (горы) будет достигнута.
То есть так пойдет?
Code
1
2
3
4
5
6
7
8
            foreach (var правило in СписокПравил)
            {
                Если (правило.ПраваяЧасть == Цель)
                {
                    Цель = правило.ЛеваяЧасть[0];
                }
            }
return Цель;
Добавлено через 3 минуты
Но тогда в итоге в цели находится (любит – солнце)
0
1968 / 824 / 115
Регистрация: 01.10.2012
Сообщений: 4,855
Записей в блоге: 2
05.01.2014, 11:57
Цитата Сообщение от Kill100 Посмотреть сообщение
То есть так пойдет?
Code
1
2
3
4
5
6
7
8
            foreach (var правило in СписокПравил)
            {
                Если (правило.ПраваяЧасть == Цель)
                {
                    Цель = правило.ЛеваяЧасть[0];
                }
            }
return Цель;
Добавлено через 3 минуты
Но тогда в итоге в цели находится (любит – солнце)
Нет, см П1. И новая цель выбирается не [0] а вложенным циклом.

Как-то Вы пассивны, тормозите на простых вещах. Типа "разжуйте это, и вот это, и вообще все-все". Поэтому умолкаю, пытайтесь думать сами, здесь ничего сложного нет
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
05.01.2014, 14:37  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Нет, см П1. И новая цель выбирается не [0] а вложенным циклом.

Как-то Вы пассивны, тормозите на простых вещах. Типа "разжуйте это, и вот это, и вообще все-все". Поэтому умолкаю, пытайтесь думать сами, здесь ничего сложного нет
Жаль. Так как то что вы говорите то же вода. Не какой конкретики. Я то хочу разобраться детально что почему и как. Так как учу самостоятельно.
Общими фразами.
Знали бы сказали почему выбирается именно этот вариант.
И 2 зачем пробегать по списку в левой части ведь про это не где не сказано.
Я думал достаточно взять [0] подправило. А если пробегать то по какому принципу тогда его выбирать.
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 13:40
Code
1
2
3
4
5
do
  foreach (правило)
    if (правило применимо && правило ещё не применено)
      добавить в множество фактов следствие;
while (текущая итерация этого цикла внесла изменения в множество фактов);
0
0 / 1 / 0
Регистрация: 25.05.2014
Сообщений: 42
04.03.2016, 16:53
Здравствуйте, я тоже пишу программу по экспертным системам, программа собственно уже готова, только нужно в дополнение к ней добавить класс с возможностью записи в документ не достающих вариантов, т.е. если программа не угадала, появляется возможно внести свой вариант, а моя система запоминает этот вариант, занося его в опреденный текстовый документ..помогите это реализовать
0
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
05.03.2016, 12:31
Похоже, можно применять алгоритмы для разбора с контекстно-свободными грамматиками.
0
0 / 1 / 0
Регистрация: 25.05.2014
Сообщений: 42
06.03.2016, 12:36
эй ребята!! помогите)

Добавлено через 13 часов 6 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string vis, sez, kabl, zast;
            Console.WriteLine("Я готов угадывать!");
            Console.ReadKey();
 
                Console.WriteLine("Какая высота Вашей обуви? Выше щиколотки/Ниже икры?");
                 vis = Console.ReadLine();
 
                Console.WriteLine("Какова сезонность Вашей обуви? 1=зов, 2=олв, 3=вл,4=л,5=во?");
                sez = Console.ReadLine();
 
                Console.WriteLine("Имеет ли Ваша обувь каблук? да/нет?");
                kabl = Console.ReadLine();
 
                Console.WriteLine("Какая застежка в вашей обуви или она вовсе отсутсвует? молния/шнурки/отсутствует?");
                zast= Console.ReadLine();
 
            {
                if (vis == "выше щиколотки")
                    if (sez == "1")
                        if (kabl == "да")
                            if (zast == "молния")
                                Console.WriteLine("Поздравляю, это сапоги!");
               
                                                                                   }
 
            {
                if (vis == "ниже щиколотки")
                    if (sez == "2")
                        if (kabl == "нет")
                            if (zast == "шнурки")
                                Console.WriteLine("Поздравляю, это кроссовки!");
                
                                                                                   }
            {
                if (vis == "ниже щиколотки")
                    if (sez == "3")
                        if (kabl == "да")
                            if (zast == "отсутствует")
                                Console.WriteLine("Поздравляю, это туфли!");
                                                                                   }
            {
                if (vis == "ниже щиколотки")
                    if (sez == "4")
                        if (kabl == "нет")
                            if (zast == "отсутствует")
                               Console.WriteLine("Поздравляю, это шлепанцы!");
                                                                                   }
           {
                if (vis == "выше щиколотки")
                    if (sez == "5")
                        if (kabl == "да")
                            if (zast == "молния")
                                Console.WriteLine("Поздравляю, это демисезонные ботинки!");
                                                                                    }
            {
                if (vis == "ниже щиколотки")
                    if (sez == "3")
                        if (kabl == "нет")
                            if (zast == "отсутствует")
                                Console.WriteLine("Поздравляю, это балетки!");
                                Console.ReadKey();
            }
            }
 
        }
 
    }
вот мой код. Теперь мне нужно сделать обучающуюся систему, что бы при вводе неизвестного объекта она запоминала его и заносила в текстовый документ. можно было сделать привязку к бд, но с документом проще
1
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
06.03.2016, 16:58
Для того, чтобы система обучалась, Вы должны предоставить ей такую возможность.

Если у Вас вопрос подразумевает выбор из нескольких вариантов, то нужно добавить пункт "ни один из вышеперечисленных". И если пользователь выбирает этот пункт, то запрашивать у него этот новый вариант выбора и правильный ответ.
Например, вопрос: "Это животное (1 - лает, 2 - мяукает, 3 - рычит)". И ответы системы: 1 - собака, 2 - кошка, 3 - тигр. Но пользователь выбирает 4 - другое. После чего вводит название варианта "мычит" и правильный ответ "корова". Система добавляет этот вариант к своему списку вариантов. В следующий раз Система спросит "Это животное (1 - лает, 2 - мяукает, 3 - рычит, 4 - мычит)".

После очередного вопроса Система выдаёт ответ. У пользователя должна быть возможность исправить (уточнить) этот ответ. Система спрашивает "этот ответ верный?". И если пользователь отвечает "нет", то Система запрашивает у него уточняющий вопрос и правильный ответ.
Например, вопрос: "Это животное (1 - лает, 2 - мяукает, 3 - рычит)". И ответы системы: 1 - собака, 2 - кошка, 3 - тигр. Пользователь выбирает 3. Система отвечает "тигр". Но пользователь не согласен и вводит свой вариант ответа "лев" и уточняющий вопрос "У этого животного есть пышная грива? 1 - да, 2 - нет". В следующий раз после ответа пользователя "3 рычит" система задаст ему вопрос "У этого животного есть пышная грива?".

Добавлено через 8 минут
Система не должна задавать сразу все вопросы по списку. Выбор очередного вопроса должен зависеть от ответа на предыдущий. Например, вопрос "У этого животного есть пышная грива?" имеет смысл только после ответа "рычит" на предыдущий вопрос.
Хранить Знания лучше всего в виде Дерева. В узлах Дерева будут вопросы, а в листьях - ответы. На каждом шаге Система задаёт вопрос и в зависимости от ответа переходит по дереву. И так, пока Система не дойдёт до листа с ответом.
C#
1
2
3
4
5
6
7
8
9
10
11
[Serializable]
Например, для двоичного дерева (пользователь может отвечать только "да" или "нет") соответствующий класс может выглядеть так:
public class Node<T>
{
    public T Value { get; set; }
    public Node<T> Right { get; set; }
    public Node<T> Left { get; set; }
    public bool IsLeaf { get { return Left == null && Right == null; } }
    public Node(){}
    public Node(T value) { Value = value; }
}
Если может быть несколько вариантов ответа, то Left и Right надо заменить на список детей: List<Node<T>>.

Для сохранения/загрузки дерева проще всего использовать сериализацию.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public Node<string> Load(string path)
{
    if(!File.Exists(path))
        return null;
        
    XmlSerializer serializer = new XmlSerializer(typeof(Node<string>));
    using(StreamReader reader = new StreamReader(path, Encoding.UTF8))
        return (Node<string>)serializer.Deserialize(reader);
}
 
public void Save(string path, Node<string> tree)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Node<string>));
    using(StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
        serializer.Serialize(writer, tree);
}
Добавлено через 5 минут
Для двоичного дерева программа будет выглядеть примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void Run()
{
    string path = @"e:\temp\data.xml";
    Node<string> tree = Load(path);
    for(Node<string> current = tree;;)
    {
        if(!current.IsLeaf)
        {
            // выводим вопрос
            Console.WriteLine(current.Value);
            current = ReadYesNo() ? current.Right : current.Left;
            continue;
        }
        // выводим ответ
        Console.WriteLine("Ответ: {0}. Верно?", current.Value);
        if(ReadYesNo())
            return;
        // добавляем новый вопрос-ответ в базу данных   
        Console.WriteLine("Введите правильный ответ:");
        string newAnswer = Console.ReadLine();
        Console.WriteLine("Введите уточняющий вопрос:");
        string newQuestion = Console.ReadLine();
        current.Right = new Node<string>(newAnswer);
        current.Left = new Node<string>(current.Value);
        current.Value = newQuestion;
        Save(path, tree);
        return;
    }
    
}
 
bool ReadYesNo()
{
    for(;;)
    {
        ConsoleKeyInfo answer = Console.ReadKey();
        switch(answer.Key)
        {
            case ConsoleKey.Y:
                Console.WriteLine("Да");
                return true;
            case ConsoleKey.N:
                Console.WriteLine("Нет");
                return false;
        }
    }
}
Добавлено через 4 минуты
Файл с данными будет выглядеть примерно так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<NodeOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Value>Ваша обувь выше щиколотки?</Value>
  <Right>
    <Value>сапоги</Value>
  </Right>
  <Left>
    <Value>Это обувь для дома?</Value>
    <Right>
      <Value>тапочки</Value>
    </Right>
    <Left>
      <Value>туфли</Value>
    </Left>
  </Left>
</NodeOfString>
Начальный файл легко составить самому. Right - переход в случае "да", Left - в случае "нет".
0
0 / 1 / 0
Регистрация: 25.05.2014
Сообщений: 42
06.03.2016, 17:22
помогите связать это с моим кодом..т.к. хватило меня лишь на написание примитивной программки. с чего начать?

Добавлено через 6 минут
и я думала данные будут храниться в обычном блокноте

Добавлено через 4 минуты
и вопросы в моей программе задаются все. потому что это продукционная модель, была бы семантическая..задавались бы только по делу
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
07.03.2016, 01:22
Я почитал немного про продукционные модели знаний, и имхо Ваша программа не похожа на такую систему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2016, 01:22
Помогаю со студенческими работами здесь

Продукционная модель знаний на mysql
Здравствуйте, не знал в какую ветку написать, помогите пжлста, надо организовать продукционную модель знаний на mysql, суть модели понял а...

Продукционная и сетевая модель знаний
Может кто знает как описать продукционную и сетевую модель знаний? Буду очень благодарна. Тема задания звучит так &quot;Построить...

Продукционная модель знаний. Интеллектуальное управление лифтами. C++
Есть следующая задача. В интернете толковой информации нету, или я плохо искал. Есть только описание продукционной модели, но не конкретных...

Продукционная модель
Здравствуйте! Помогите пожалуйста решить задачу. Заранее Спасибо!!! Входной алфавит {a, b, c}; автомат распознаёт последовательности...

Продукционная модель
Нужно написать программу для продукционной модели на LISP. Пример: сборка фотоаппарата (Сам аппарат, объектив, аккумулятор, карта памяти)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru