Моделирование дерева решений
Я строю модель, чтобы позволить бизнес-пользователям строить деревья решений во время выполнения.
Конкретная реализация будет видеть решение, примененное к конкретному вопросу в опросе, чтобы решить, должен ли вопрос быть показан или нет.
Примером для целей обсуждения будет:
- Q1: пожалуйста, укажите свой пол.
(М / Ф) - Q2: пожалуйста, укажите ваш возраст.
(0-120) - Q3: Вы когда-нибудь были беременны?
(Этот вопрос следует показывать только в том случае, если ответ на Q1=F И ответ на Q2> 9) - Q4: у вас когда-нибудь была маммография?
(Этот вопрос следует показывать только в том случае, если (ответ на Q1=F И ответ на Q2>40) ИЛИ ответ на Q3= Да
Модель, которую я имею до сих пор, видела бы следующую структуру, прикрепленную к каждому вопросу:
Данные в вышеприведенном ограничении должны позволить кому-то просматривать данные и воссоздавать условия, как показано в приведенных выше вопросах, чтобы затем позволить им либо показывать вопрос, либо не основываться на ответах на предыдущие вопросы.
То, что я до сих пор чувствую, немного грязно, и мне было интересно, является ли это установленным паттерном, который любой может придумать, который достигнет этого. Любые другие отзывы также будут полезны.
Я надеюсь, что мои вопросы имеют смысл.
Обновление (28 марта 2017 г.):
@ Авитус: Я не согласен с вашими мыслями (Пожалуйста, поправьте меня, если я ошибаюсь). EValuation сравнивает только два критерия одновременно, но TargetEvalID позволяет сравнивать вопрос с предыдущей группой. IE В примере, который я привел, я сравниваю ((Q1 И Q2) ИЛИ Q3). Чтобы добиться того, что вы говорите, я мог бы просто делать вложенные вопросы. Если бы я хотел сделать A и B, а C I сделал бы (A и B) и C.
Имеет ли это смысл?
Обновление (29 марта 2017 г.)
Я сделал одно изменение в модели, чтобы позволить группам сравниваться с другими группами.
IE (A И B) ИЛИ (C И D)
1 ответ
Самая большая вещь, которую вам не хватает, - это логическая группировка вещей, если только вы не разрешаете бизнес-пользователю выбирать до 2 критериев.
Например, вы учитываете (A) Или (B), (A) И (B)
Но вы должны учесть (A) Или (B) И ( C).
Это означает, что вам нужен дополнительный параметр для размещения третьего или четвертого набора, чтобы пользователь мог делать: ((A) Или (B)) И ( C) или, если он хочет сделать: (A) или ((B)) И (с))
Скорее всего, вам нужно будет создать рекурсивную функцию, чтобы понять, как это устроено.