Методы связывания шаблонов в JESS?

Поэтому я хотел создать правило, которое выглядит так в псевдокоде.

IF ?subject in ?course with ?schedule is still available 
   OR
IF ?subject in ?course2 with ?schedule2 is still available
THEN assert ?subject

Я думал, что могу использовать связующие ограничения, такие как

(or (and (course ?course) (sched ?sched))
    (and (course ?course1) (sched ?sched1)))

У меня есть следующие Deftemplate и Deffacts.

(deftemplate subject-information
    (slot name)
    (slot course)
    (slot prerequisite)
    (multislot sem-offered)
    (slot priority-lvl)
    (slot units)
    (slot section)
    (slot schedule)
    (slot day))



(deffacts subject-info
 (subject-information
        (name CS222)
        (course BSIT)
        (prerequisite Math101)
        (prerequisite2 CS111)
        (sem-offered 2)
        (priority-lvl 3) 
        (units 4)
        (section C)
        (schedule 1330-1455)
        (day MW)
        (add-day TTH))

 (subject-information
        (name CS222)
        (pre-requisites CS111)
        (pre-requisites2 Math101)
        (course BSCS)
        (sem-offered 2 3)
        (priority-lvl 3)
        (units 4)
        (section A)
        (schedule 1200-1325)
        (day MW)))

У меня есть два дефекта ОДНОЙ и той же темы с разными разделами для разных курсов. У меня есть студент с курсом BSCS, я хочу, чтобы программа нашла класс для BSCS, который соответствует его расписанию, но если не найдет. Он идет и проверяет расписание другого класса.


person Miao Ren Lei    schedule 09.04.2016    source источник
comment
В рабочей памяти нет значения (имя субъекта?), которое соответствовало бы какому-либо факту, а фрагмент кода Jess не ссылается на имя шаблона, так что это не имеет никакого смысла. Возможно, вы отредактируете свой вопрос, чтобы показать свою проблему: дефшаблон и факты, которые должны совпадать или не совпадать.   -  person laune    schedule 09.04.2016
comment
Я уже добавил свои deftemplate и deffacts.   -  person Miao Ren Lei    schedule 10.04.2016


Ответы (1)


Я не вижу, где вам нужно это "или". Вы находите события курса BSCS с помощью одного шаблона, привязываете расписание и используете шаблон студента для проверки доступности.

(subject-information {course == "BSCS"}
                     (schedule ?sched))
(student-information (free-schedule $? ?sched $?))

Так что я просто предполагаю, что информация о студентах содержит список свободных расписаний. - Способ хранения расписания в ваших данных может быть удобен для чтения человеком, но не совсем подходит для вычисления совпадений. Может быть, для каждого дня существует постоянный набор времени занятий, но даже в этом случае сопоставление дней в одном слоте и времени в другом неудобно. И если время начала и окончания может быть любым, то для проверки строк (!) в соответствии с шаблоном ччмм-ччмм для одного совпадения или охвата (!) другого потребуется функция.

person laune    schedule 10.04.2016
comment
Я уже определился с расписанием. У меня есть деффект для каждого временного интервала. Для программы обязательно сначала проверить расписание класса BSCS, а затем только для классов, предлагаемых для BSIT. Я не хочу использовать уровень значимости, потому что это означало бы, что мне нужно будет реализовать уровни значимости для других подобных правил. - person Miao Ren Lei; 10.04.2016
comment
Хорошенько посоветовать невозможно из-за недостатка информации. Например: является ли BSCS-BSIT единственной парой, в которой предпочтение следует отдавать первой? Возможно ли иметь третий, четвертый,... уровень предпочтения BSAA, BSAB и т.д.? Зависят ли эти уровни только от названий курсов, то есть BSCS всегда превосходит BSIT (независимо от студента/семестра и независимо от названия)? Общее решение заключалось бы в том, чтобы найти все совпадения по времени, вставить их как факты, а затем найти лучшее в соответствии с BSxx. - person laune; 10.04.2016
comment
На самом деле все зависит от ученика. Ну, есть список предметов, которые должен пройти студент, но из-за того, что он не сдал некоторые предметы, ему нужно пересдать этот предмет. Конечно, программа должна сначала проверить расписание класса, предлагаемого для курса студента, и когда она находит его недоступным, она идет и проверяет класс другого курса. - person Miao Ren Lei; 10.04.2016
comment
Может быть несколько наборов классов, выбранных из собственного курса учащегося и из другого курса, охватывающего новые и не пройденные занятия учащегося. Между классами набора не должно быть конфликтов по расписанию. Лучший из этих наборов будет иметь минимальное количество классов из других курсов. - Учитывая всех студентов, у вас есть хорошая задача планирования. Попытка решить ее с помощью правил, ковыряющихся в одном углу, вызовет неудовлетворенность. - Конечно, я мог что-то не так понять... - person laune; 10.04.2016