void MatchingSolver::createTeamConstraints() { // Ensure that teams are matched together. // The team members seat group indices are the same. m_teamVars.clear(); for (int i = 0; i < m_teams.size(); ++i) { int beginnersInTeam = 0; if (m_teams[i]->getSpeakers()->size() > 0) { IntVar *teamSeatGroupValue = m_solver.MakeIntVar(0, m_currentSeatGroupIndex - 1, "team"); Team* team = m_teams[i]; const QList<SpeakerModel*> *speakers = team->getSpeakers(); for (int j = 0; j < speakers->size(); ++j) { if (speakers->at(j)->isBeginner()) beginnersInTeam++; int speakerId = m_speakers.indexOf(speakers->at(j)); Constraint *c = m_solver.MakeElementEquality(m_speakerToGroupMapping, m_speakerVars[speakerId], teamSeatGroupValue); m_solver.AddConstraint(c); } m_teamVars.push_back(teamSeatGroupValue); } m_beginnersInTeam.push_back(beginnersInTeam); } }