Hi,
let me share a model you could start with:
.mod
using CP;
tuple meeting
{
int id;
int duration;
{int} employees;
}
{meeting} meetings=...;
int totalDuration=sum(m in meetings) m.duration;
tuple incompatibleMeeting
{
meeting m1;
meeting m2;
}
{incompatibleMeeting} incompatibleMeetings={<m1,m2> | ordered m1,m2 in meetings: 0!=card(m1.employees inter m2.employees)};
dvar interval itvs_meeting[m in meetings] in 0..totalDuration size m.duration;
minimize max(m in meetings) endOf(itvs_meeting[m]);
subject to
{
forall(<m1,m2> in incompatibleMeetings) overlapLength(itvs_meeting[m1],itvs_meeting[m2])==0;
}
.dat
meetings={<1,4,{1,3,4}>,<2,3,{2,4,5}>,<3,1,{1,3,5}>,<4,2,{2,3,4}>,<5,3,{1,2,3,4,5}>,
<6,3,{1,2,4,5}>,<7,5,{1,2,3}>};
This could be a starting point
regards
#DecisionOptimization#OPLusingCPLEXOptimizer