|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Старый стал, непомню ничего =(
Дамы и господа, очень нужна ваша помощь.
Вызвали на сессию заочную, и всунули задачку на экспертные системы. Её нужно программно реализовать. В чём, собственно затык, абсолютно ничего не помню по дэлфи.. есть форма, на форме должно быть следующее: Поле, где будет выводиться Вопрос и 2 кнопки "да" и "нет" и в зависимости от ответа текст в поле будет меняться на др . вопросы. в глубине сознания карлик кричит, что делается всё просто через IF THEN.. но засада в том что и этого без поднимания горы учебников я вспомнить не могу. Помогите пожалуйста, достаточно при мера 1-го, остальное смогу добить сам(надеюсь) Пример типа ..."В форме вопрос появился-дал ответ-другой вопрос." |
#2
|
||||
|
||||
Вот на скорую руку что-то типа того
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Если это задача про экспертные системы, то тут просто готовым кодом не отделаешься. А, собственно, по поводу принципа - ты почти угадал. Задача на продукционные правила, т.е. правила виды "ЕСЛИ..ТО". Вот только решаеть ее будет чуть посложнее, чем написать фиксированный код.
Для начала тебе надо реализовать базу знаний, в которой эти продукционные правила храняться. Это довольно просто, можно воспользоваться готовыми классами, получится что-то вида: Код:
type TProductionRule = class private FIfClause : TStringList; FThenClause : TStringList; public property IfCount : Integer read GetIfCount; property ThenCount : Integer read GetThenCount; property IfClauseName[Index : Integer] : String read GetIfClauseName; property IfClauseValue[Index : Integer] : String read GetIfClauseValue; property ThenClauseName[Index : Integer] : String read GetThenClauseName; property ThenClauseValue[Index : Integer] : String read GetThenClauseValue; end; Потом тебе надо будет написать машину логического вывода, которая будет брать правило и пытаться его вычислить. Пользователя она должна спрашивать только в том случае, если значение переменной не может быть высислено автоматически через правила. Код тут приводить не получится, т.к. там много писать придется. Ну а интерфейс - это дело десятое. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Alegun (24.05.2013)
|
#4
|
|||
|
|||
Ну у меня всё несколько проще....
просто Есть набор вопросов и к ним при да или нет другие вопросы и конечный результат по одной из цепочек.. Никаких подсчетов и выводов не нужно Что то типа, "Есть дополнительный?" капитал если "да" то "Можно дать рекламу?" иначе "Можно ли сбавить цену на продукцию?" и к ним такие же варианты... "Можно дать рекламу?" если "да" то "Акей давай рекламу и буит те щастье" и конец проги. если нет то "другой вопрос" |
#5
|
|||
|
|||
Цитата:
Ну, можно сделать тоже самое просто чуть попроще. Ты, собственно, и описал систему логического вывода на продукционных правилах. Просто если у тебя только один параметр на входе и выходе, то можно все упростить. С другой стороны, если сделать продукционные правила, то будет что-то типа: Код:
ПРАВИЛО 1: ЕСЛИ Есть доп капитал = ДА Можно дать рекламу = ДА ТО Рекомендация = Дай рекламу в газете ПРАВИЛО 2: ЕСЛИ Есть доп капитал = НЕТ Можно снизить цену = ДА ТО Рекомендация = Снижай цену и дай рекламу на листовках ПРАВИЛО 3: ЕСЛИ Можно изменить материалы = ДА ТО Можно снизить цену товара = ДА Теперь для запроса на вычисление [Рекомендация] система сначала спросит о наличии доп капитала, по ответу выберет правило 1 или 2, задаст второй вопрос, по необходимости (читай, по ответу) вызовет вычисление правила 3. Таким образов вычислится искомое значение и выведется результат. Это без системы самообучения и без разных других интересных штук, типа вероятностного вывода. Кстати, такая штука пишется довольно просто, в свое время на дипломку я час движок написал за вечер. Сложнее было с созданием правил, на них потратили почти неделю. |