3.2.4 Jedno zadanie w danym czasie
Ponieważ nie jest możliwe wykonywane dwóch zadań w jednym czasie, zastosowano ograniczenia powodujące, że zadania nie mogą na siebie nachodzić, jeżeli oba są wykonywane, tzn. ich isDone = 1.
PrimitiveConstraint c3 = new XplusYeqC(quest.getlsDone(),quest.getlsDone(),2); PrimitiveConstraint cl = new XplusYlteqZ(quest.getBeginTime(), quest.getDuration(), otherQuest.getBeginTime());
PrimitiveConstraint c2 = new XplusYlteqZ(otherQuest.getBeginTime(), otherQuest.getDuration(), quest.getBeginTime());
storę.impose(new IfThen(c3,new Or(cl,c2))) ;_
3.2.5 Nagroda za zadanie
Nagroda za zadanie jest wliczana do wymaganej tylko wtedy, gdy zadanie jest wykonane, tzn. isDone = 1.
IntVar boundReward = new IntVar(storę, quest.getQuestName() +"p"+ quest.getQuestPart()
+"BoundReward",quest.getReward().min(),quest.getReward().max()); boundReward.addDom(0,0); // 0 albo nagroda rewardsBound.add(boundReward);
storę.impose(new XmulYeqZ(quest.getlsDone(),quest.getReward(),boundReward));
3.2.6 Wymagana nagroda
Aby wymagania co do sumarycznej były uwzględnione, konieczne jest zastosowanie ograniczenia na sumę nagród wykonanych zadań (isDone = 1)
_nt[] weights = Ints.toArray(onesArray) ;
storę.impose(new Linear(storę,rewardsBound.toArray(new
!ntVar[rewardsBound.size()j),weights,">",requiredExperience-l));
3.2.7 Odległości między zadaniami
Aby uwzględnić odległości zadań, konieczna jest wiedza na temat tego, które zadanie jest wykonywane po którym. W związku z tym, ograniczenia wynikające z odległości są uwzględniane, jeżeli czas rozpoczęcia zadania jest mniejszy od innego, oraz oba są wykonywane (isDone = 1)
PrimitiveConstraint clO = nei
XltY(previousQuest.getBeginTime(),quest.getBeginTime()); PrimitiveConstraint c9 = new
XplusYeqC(quest.getlsDone(),previousQuest.getlsDone(),2); PrimitiveCónstraint cl = new And(c9,cl0);
storę.impose(new IfThen(cl,c8));