:- use_module(library(ic)). :- use_module(library(branch_and_bound)). assign(ListOfCourses, Schedule, NumberOfClashes):- you fill in this part. assign1([], Schedule, NumberOfClashes):- !, [] = Schedule, NumberOfClashes #= 0. assign1(ListOfCourses, Schedule, NumberOfClashes):- AssignmentSoFar = [], ClashesSoFar #= 0, assign2(ListOfCourses, AssignmentSoFar, ClashesSoFar,Schedule,NumberOfClashes). /* assign2(ListOfCourses, AssignmentSoFar, ClashesSoFar,Schedule,NumberOfClashes) */ assign2([], AssignmentSoFar, ClashesSoFar, Schedule, NumberOfClashes):- Schedule=AssignmentSoFar, NumberOfClashes #= ClashesSoFar. assign2( [CourseCode | Rest], AssignmentSoFar, ClashesSoFar, Schedule, NumberOfClashes):- group(CourseCode,Group), howManyClashes(CourseCode,Group,AssignmentSoFar,HMC), Temp #= HMC + ClashesSoFar, assign2(Rest, [ (CourseCode,Group) | AssignmentSoFar ], Temp, Schedule, NumberOfClashes). /**********************/ howManyClashes(CourseCode, Group, [], 0). howManyClashes(CourseCode, Group, [(CourseCode2,Group2)|R], HMC):- group(CourseCode, Group), group(CourseCode2, Group2), findall(Time,course(CourseCode,Group,Time),Times1), findall(Time2,course(CourseCode2,Group2,Time2),Times2), setIntersectCount(Times1,Times2,CurrentClashes), howManyClashes(CourseCode, Group, R, OtherClashes), HMC #= CurrentClashes + OtherClashes. /**************************/ /* set_intersect_count(L1,L2,R) gives in R the number of elements that L1 and L2 have in common */ set_intersect_count(L1,L2,R):- you fill in this part. /**************************/ group(cmpe101,1). group(cmpe101,2). group(cmpe108,1). group(cmpe108,2). group(cmpe108,3). group(cmpe108,4). group(cmpe112,1). group(cmpe112,2). group(cmpe211,1). group(cmpe223,1). group(cmpe224,1). group(cmpe226,1). group(cmpe231,1). group(cmpe242,1). group(cmpe242,2). /* course(coursecode, group_no, meeting_time). */ /**************** data ****************/ course(cmpe101, 1, (tuesday, 12-30)). course(cmpe101, 1, (tuesday, 13-30)). course(cmpe101, 1, (tuesday, 14-30)). course(cmpe101, 1, (tuesday, 15-30)). course(cmpe101, 1, (thursday,14-30)). course(cmpe101, 2, (wednesday, 10-30)). course(cmpe101, 2, (wednesday, 11-30)). course(cmpe101, 2, (wednesday, 12-30)). course(cmpe101, 2, (wednesday, 13-30)). course(cmpe101, 2, (thursday, 15-30)). /**************** data ****************/ course(cmpe108, 4, (tuesday, 12-30)). course(cmpe108, 4, (tuesday, 13-30)). course(cmpe108, 3, (tuesday, 16-30)). course(cmpe108, 3, (tuesday, 17-30)). course(cmpe108, 1, (wednesday, 10-30)). course(cmpe108, 4, (wednesday, 10-30)). course(cmpe108, 2, (wednesday, 11-30)). course(cmpe108, 4, (wednesday, 11-30)). course(cmpe108, 1, (thursday, 10-30)). course(cmpe108, 2, (thursday, 10-30)). course(cmpe108, 1, (thursday, 11-30)). course(cmpe108, 2, (thursday, 11-30)). course(cmpe108, 3, (thursday, 14-30)). course(cmpe108, 3, (thursday, 15-30)). course(cmpe108, 1, (thursday, 16-30)). course(cmpe108, 2, (thursday, 16-30)). course(cmpe108, 1, (thursday, 17-30)). course(cmpe108, 2, (thursday, 17-30)). course(cmpe108, 4, (friday, 9-30)). course(cmpe108, 3, (friday, 11-30)). /**************** data ****************/ course(cmpe112, 2, (monday, 10-30)). course(cmpe112, 2, (monday, 11-30)). course(cmpe112, 1, (tuesday, 10-30)). course(cmpe112, 1, (tuesday, 11-30)). course(cmpe112, 1, (wednesday, 10-30)). course(cmpe112, 1, (wednesday, 11-30)). course(cmpe112, 1, (thursday, 8-30)). course(cmpe112, 1, (thursday, 9-30)). course(cmpe112, 2, (thursday, 10-30)). course(cmpe112, 2, (thursday, 11-30)). course(cmpe112, 2, (friday, 10-30)). course(cmpe112, 2, (friday, 11-30)). /**************** data ****************/ course(cmpe211, 1, (monday, 16-30)). course(cmpe211, 1, (monday, 17-30)). course(cmpe211, 1, (tuesday, 10-30)). course(cmpe211, 1, (tuesday, 11-30)). course(cmpe211, 1, (thursday, 8-30)). course(cmpe211, 1, (thursday, 9-30)). /**************** data ****************/ course(cmpe223, 1, (tuesday, 16-30)). course(cmpe223, 1, (tuesday, 17-30)). course(cmpe223, 1, (wednesday, 10-30)). course(cmpe223, 1, (wednesday, 11-30)). course(cmpe223, 1, (thursday, 10-30)). course(cmpe223, 1, (thursday, 11-30)). /**************** data ****************/ course(cmpe224, 1, (wednesday, 8-30)). course(cmpe224, 1, (wednesday, 9-30)). course(cmpe224, 1, (thursday, 14-30)). course(cmpe224, 1, (thursday, 15-30)). course(cmpe224, 1, (friday, 16-30)). course(cmpe224, 1, (friday, 17-30)). /**************** data ****************/ course(cmpe226, 1, (tuesday, 14-30)). course(cmpe226, 1, (tuesday, 15-30)). course(cmpe226, 1, (wednesday, 12-30)). course(cmpe226, 1, (wednesday, 13-30)). course(cmpe226, 1, (thursday, 16-30)). course(cmpe226, 1, (thursday, 17-30)). /**************** data for cmpe231****************/ you fill in this part. /**************** data for cmpe242 ****************/ you fill in this part.