Back to index

fet  5.18.0
Public Member Functions | Public Attributes
ConstraintTeacherHomeRoom Class Reference

#include <spaceconstraint.h>

Inheritance diagram for ConstraintTeacherHomeRoom:
Inheritance graph
[legend]
Collaboration diagram for ConstraintTeacherHomeRoom:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ConstraintTeacherHomeRoom ()
 ConstraintTeacherHomeRoom (double wp, QString tc, QString rm)
bool computeInternalStructure (QWidget *parent, Rules &r)
 Computes the internal structure for this constraint.
bool hasInactiveActivities (Rules &r)
QString getXmlDescription (Rules &r)
 Returns an XML description of this constraint.
QString getDescription (Rules &r)
 Returns a small description string for this constraint.
QString getDetailedDescription (Rules &r)
 Returns a detailed description string for this constraint.
double fitness (Solution &c, Rules &r, QList< double > &cl, QList< QString > &dl, QString *conflictsString=NULL)
 The function that calculates the fitness of a solution, according to this constraint.
bool isRelatedToActivity (Activity *a)
 Returns true if this constraint is related to this activity.
bool isRelatedToTeacher (Teacher *t)
 Returns true if this constraint is related to this teacher.
bool isRelatedToSubject (Subject *s)
 Returns true if this constraint is related to this subject.
bool isRelatedToActivityTag (ActivityTag *s)
 Returns true if this constraint is related to this activity tag.
bool isRelatedToStudentsSet (Rules &r, StudentsSet *s)
 Returns true if this constraint is related to this students set.
bool isRelatedToRoom (Room *r)
 Returns true if this constraint is related to this room.
bool hasWrongDayOrHour (Rules &r)
bool canRepairWrongDayOrHour (Rules &r)
bool repairWrongDayOrHour (Rules &r)

Public Attributes

QList< int > _activities
int _room
QString teacherName
QString roomName
double weightPercentage
 The weight (percentage) of this constraint.
bool active
QString comments
int type
 Specifies the type of this constraint (using the above constants).

Detailed Description

Definition at line 503 of file spaceconstraint.h.


Constructor & Destructor Documentation

Definition at line 1771 of file spaceconstraint.cpp.

ConstraintTeacherHomeRoom::ConstraintTeacherHomeRoom ( double  wp,
QString  tc,
QString  rm 
)

Definition at line 1777 of file spaceconstraint.cpp.


Member Function Documentation

Implements SpaceConstraint.

Definition at line 2005 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);
       assert(0);

       return true;
}
bool ConstraintTeacherHomeRoom::computeInternalStructure ( QWidget *  parent,
Rules r 
) [virtual]

Computes the internal structure for this constraint.

Implements SpaceConstraint.

Definition at line 1785 of file spaceconstraint.cpp.

{
       Q_UNUSED(parent);

       //This procedure computes the internal list of all the activities
       //which correspond to the subject of the constraint.
       
       QStringList::iterator it;
       Activity* act;

       this->_activities.clear();

       for(int ac=0; ac<r.nInternalActivities; ac++){
              act=&r.internalActivitiesList[ac];

              //check if this activity has the corresponding students
              bool sameTeacher=false;
              if(act->teachersNames.count()==1)
                     if(act->teachersNames.at(0)==teacherName)
                            sameTeacher=true;
       
              if(!sameTeacher)
                     continue;
              
              this->_activities.append(ac);
       }

       this->_room = r.searchRoom(this->roomName);
       assert(this->_room>=0);
       
       return true;
}

Here is the call graph for this function:

double ConstraintTeacherHomeRoom::fitness ( Solution c,
Rules r,
QList< double > &  cl,
QList< QString > &  dl,
QString *  conflictsString = NULL 
) [virtual]

The function that calculates the fitness of a solution, according to this constraint.

We need the rules to compute this fitness factor. We need also the allocation of the activities on days and hours. If conflictsString!=NULL, it will be initialized with a text explaining where this restriction is broken.

Implements SpaceConstraint.

Definition at line 1887 of file spaceconstraint.cpp.

{
       //if the matrix roomsMatrix is already calculated, do not calculate it again!
       if(!c.roomsMatrixReady){
              c.roomsMatrixReady=true;
              rooms_conflicts = c.getRoomsMatrix(r, roomsMatrix);

              c.changedForMatrixCalculation=false;
       }

       //Calculates the number of conflicts.
       //The fastest way seems to iterate over all activities
       //involved in this constraint (share the subject and activity tag of this constraint),
       //find the scheduled room and check to see if this
       //room is accepted or not.

       int nbroken;
       
       bool ok2=true;

       nbroken=0;
       foreach(int ac, this->_activities){
              int rm=c.rooms[ac];
              if(rm==UNALLOCATED_SPACE) //counted as unallocated
                     continue;
              
              bool ok=true;
              if(rm==UNSPECIFIED_ROOM) //it may be other room, from subject (activity tag) preferred room(s), which is OK
                     ok=false;
              else if(rm==this->_room){
              } //OK
              else{ //other room, from subject (activity tag) pref. room(s)
                     bool okk=false;
                     foreach(PreferredRoomsItem it, activitiesPreferredRoomsList[ac])
                            if(it.preferredRooms.contains(rm))
                                   okk=true;
                     assert(okk);
                     //assert(activitiesPreferredRoomsPreferredRooms[ac].contains(rm));
              }

              if(!ok){
                     if(rm!=UNALLOCATED_SPACE)
                            ok2=false;
              
                     if(conflictsString!=NULL){
                            QString s=tr("Space constraint teacher home room broken for activity with id %1 (%2)",
                                   "%1 is activity id, %2 is detailed description of activity")
                                   .arg(r.internalActivitiesList[ac].id)
                                   .arg(getActivityDetailedDescription(r, r.internalActivitiesList[ac].id));
                            s += ". ";
                            s += tr("This increases the conflicts total by %1").arg(CustomFETString::number(weightPercentage/100* 1));
                            
                            dl.append(s);
                            cl.append(weightPercentage/100* 1);
                            
                            *conflictsString+=s+"\n";
                     }

                     nbroken++;
              }
       }
       
       if(this->weightPercentage==100)
              assert(ok2);

       return weightPercentage/100 * nbroken;
}

Here is the call graph for this function:

Returns a small description string for this constraint.

Implements SpaceConstraint.

Definition at line 1840 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);

       QString begin=QString("");
       if(!active)
              begin="X - ";

       QString end=QString("");
       if(!comments.isEmpty())
              end=", "+tr("C: %1", "Comments").arg(comments);

       QString s=tr("Teacher home room"); s+=", ";

       s+=tr("WP:%1\%", "Weight percentage").arg(CustomFETString::number(this->weightPercentage));s+=", ";
       
       s+=tr("T:%1", "T means teacher").arg(this->teacherName);s+=", ";

       s+=tr("R:%1", "R means Room").arg(this->roomName);

       return begin+s+end;
}

Here is the call graph for this function:

Returns a detailed description string for this constraint.

Implements SpaceConstraint.

Definition at line 1863 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);

       QString s=tr("Space constraint"); s+="\n";
       s+=tr("Teacher home room"); s+="\n";
       s+=tr("Weight (percentage)=%1\%").arg(CustomFETString::number(this->weightPercentage));s+="\n";

       s+=tr("Teacher=%1").arg(this->teacherName);s+="\n";

       s+=tr("Room=%1").arg(this->roomName);s+="\n";

       if(!active){
              s+=tr("Active=%1", "Refers to a constraint").arg(yesNoTranslated(active));
              s+="\n";
       }
       if(!comments.isEmpty()){
              s+=tr("Comments=%1").arg(comments);
              s+="\n";
       }

       return s;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Returns an XML description of this constraint.

Implements SpaceConstraint.

Definition at line 1825 of file spaceconstraint.cpp.

                                                            {
       Q_UNUSED(r);

       QString s="<ConstraintTeacherHomeRoom>\n";
       s+="   <Weight_Percentage>"+CustomFETString::number(weightPercentage)+"</Weight_Percentage>\n";
       s+="   <Teacher>"+protect(this->teacherName)+"</Teacher>\n";
       s+="   <Room>"+protect(this->roomName)+"</Room>\n";
              
       s+="   <Active>"+trueFalse(active)+"</Active>\n";
       s+="   <Comments>"+protect(comments)+"</Comments>\n";
       s+="</ConstraintTeacherHomeRoom>\n";

       return s;
}

Here is the call graph for this function:

Implements SpaceConstraint.

Definition at line 1818 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);
       
       return false;
}

Implements SpaceConstraint.

Definition at line 1999 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);
       return false;
}

Returns true if this constraint is related to this activity.

Implements SpaceConstraint.

Definition at line 1960 of file spaceconstraint.cpp.

{
       Q_UNUSED(a);

       return false;
}

Returns true if this constraint is related to this activity tag.

Implements SpaceConstraint.

Definition at line 1979 of file spaceconstraint.cpp.

{
       Q_UNUSED(s);

       return false;
}

Returns true if this constraint is related to this room.

Implements SpaceConstraint.

Definition at line 1994 of file spaceconstraint.cpp.

{
       return r->name==this->roomName;
}

Returns true if this constraint is related to this students set.

Implements SpaceConstraint.

Definition at line 1986 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);
       Q_UNUSED(s);

       return false;
}

Returns true if this constraint is related to this subject.

Implements SpaceConstraint.

Definition at line 1972 of file spaceconstraint.cpp.

{
       Q_UNUSED(s);
       
       return false;
}

Returns true if this constraint is related to this teacher.

Implements SpaceConstraint.

Definition at line 1967 of file spaceconstraint.cpp.

{
       return teacherName==t->name;
}

Implements SpaceConstraint.

Definition at line 2013 of file spaceconstraint.cpp.

{
       Q_UNUSED(r);
       assert(0); //should check hasWrongDayOrHour, firstly

       return true;
}

Member Data Documentation

Definition at line 508 of file spaceconstraint.h.

Definition at line 511 of file spaceconstraint.h.

bool SpaceConstraint::active [inherited]

Definition at line 102 of file spaceconstraint.h.

QString SpaceConstraint::comments [inherited]

Definition at line 104 of file spaceconstraint.h.

Definition at line 517 of file spaceconstraint.h.

Definition at line 515 of file spaceconstraint.h.

int SpaceConstraint::type [inherited]

Specifies the type of this constraint (using the above constants).

Definition at line 109 of file spaceconstraint.h.

The weight (percentage) of this constraint.

Definition at line 100 of file spaceconstraint.h.


The documentation for this class was generated from the following files: