2016-04-09 2 views
0

donc je voulais créer une règle qui va comme ceci en pseudo-codeTechniques de liaison de motifs dans JESS?

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

Je pensais que je pouvais utiliser des contraintes conjonctifs comme

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

Je le Deftemplate et Deffacts suivant.

(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))) 

J'ai deux deffacts du sujet SAME avec différentes sections pour différents cours. J'ai un étudiant avec le cours BSCS, ce que je veux, c'est que le programme trouve un cours pour BSCS qui corresponde à son emploi du temps, mais s'il n'en trouve aucun. Il va vérifier l'horaire d'une autre classe.

+0

Aucune valeur (nom de sujet?) Ne correspond à un fait dans la mémoire de travail et l'extrait de code Jess ne fait pas référence à un nom de modèle, cela n'a donc aucun sens. Peut-être que vous éditez votre question pour montrer votre problème: le deftemplate, et les faits qui devraient correspondre ou ne pas correspondre. – laune

+0

J'ai déjà ajouté mon deftemplate et deffacts. –

Répondre

0

Je ne vois pas où vous avez besoin de "ou". Vous localisez les événements de cours BSCS avec un modèle, liez une planification et utilisez un modèle d'étudiant pour tester la disponibilité. Donc, je suppose que les informations sur les étudiants fournissent une liste d'horaires gratuits. - La manière dont le planning est stocké dans vos données peut convenir aux lecteurs humains, mais elle n'est pas adaptée au calcul des correspondances. Peut-être y a-t-il un ensemble constant d'heures de classe pour chaque jour, mais même si des jours correspondant dans un emplacement et des temps dans un autre emplacement sont incommodes. Et si les temps de début et de fin peuvent être quelque chose, vérifier les chaînes (!) Selon le modèle hhmm-hhmm pour un correspondant ou englobant (!) L'autre aura besoin d'une fonction.

+0

J'ai déjà compris l'horaire. J'ai un défaut pour chaque tranche de temps. Il est indispensable que le programme vérifie d'abord l'horaire d'une classe BSCS puis seulement la deuxième pour les classes qui sont offertes pour BSIT. Je ne veux pas utiliser le niveau de saillance parce que cela signifierait que j'aurais besoin d'implémenter des niveaux de saillance sur les autres règles similaires. –

+0

Il est impossible de bien conseiller en raison du manque d'information. Par exemple: BSCS-BSIT est-il la seule paire où le premier devrait être choisi de préférence? Est-il possible d'avoir des troisième, quatrième, ... niveau de préférence BSAA, BSAB, etc? Ces niveaux dépendent-ils uniquement des noms de cours, c'est-à-dire que BSCS «bat» toujours BSIT (peu importe l'étudiant/semestre et peu importe le nom)? Une solution générale trouverait toutes les correspondances par heure, les insèrerait comme des faits et ensuite trouverait le meilleur selon BSxx. – laune

+0

Cela dépend en fait de l'étudiant. Eh bien, il ya une liste de cours que l'étudiant devrait suivre, mais en raison de certains sujets, il a échoué, il a besoin de reprendre ce sujet. Bien sûr, le programme doit d'abord vérifier l'horaire de la classe qui est offerte pour le cours de l'étudiant et lorsqu'il constate qu'il n'est pas disponible, il vérifie la classe d'un autre cours. –