Я новичок и недавно начал изучать Matlab.
Я пишу программу, которая создаст персональное расписание на семестр в колледже, удовлетворяющее определенным условиям.
У меня проблемы с созданием кода, который создаст уникальные расписания, в которых нет конфликтов (перекрытий) из всех возможных настроек курсов.
У меня есть курсы в такой матрице.
Start End Sun Mon Tue Wed Thu
[ 1100 1250 1 0 1 0 1 ]
[ 0800 0950 0 1 0 1 0 ]
[ 1200 1350 0 1 0 1 0 ]
[ 1400 1700 0 1 0 1 0 ]
Вектор отслеживает, какой курс и какая строка
[1; 1; 1; 2] <первые 3 строки - это курс 1, 4-й ряд - это курс 2 и т. Д .... </p>
У меня всего 7 матриц (7 курсов), каждая из которых содержит несколько строк, представляющих различные способы планирования курса.
Окончательный результат - это матрица, в которой все 7 курсов не перекрывают ни один из курсов.
Я пытался использовать его, чтобы придумать все возможные комбинации с 8-ю вложенными для циклов и устранить те, которые имеют конфликты. Но общее количество комбинаций слишком велико, или я не смог правильно настроить цикл. IDE только что застрял в "занят"
Это мой текущий код
scheudle = []
courseindex = []
c1=1;c2=1;c3=1;c4=1;c5=1;
iteration=0;
completeschedule= []
for cr1 = (find(fullcourse == 1))' % H is course number in sequence
iteration1=iteration1+1
if conD(cr1,1) == true
disp('hello')
scheudle(1,[c1 (c1+1)]) = conT(cr1,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr1,1)
c1 = c1 + 2
end
if conD(cr1,2) == true
disp('hello')
scheudle(2,[c2 (c2+1)]) = conT(cr1,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr1,1)
c2 = c2 + 2
end
if conD(cr1,3) == true
scheudle(3,[c3 (c3+1)]) = conT(cr1,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr1,1)
c3 = c3 + 2
end
if conD(cr1,4) == true
scheudle(4,[c4 (c4+1)]) = conT(cr1,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr1,1)
c4 = c4 + 2
end
if conD(cr1,5) == true
scheudle(5,[c5 (c5+1)]) = conT(cr1,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr1,1)
c5 = c5 + 2
end
for cr2 = find(fullcourse==2)'
iteration2=iteration2+1
if conD(cr2,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr2,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr2,1)
c1 = c1 + 2
end
if conD(cr2,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr2,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr2,1)
c2 = c2 + 2
end
if conD(cr2,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr2,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr2,1)
c3 = c3 + 2
end
if conD(cr2,4) == 1
scheudle(4,[c4 (c4+1)]) = conT(cr2,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr2,1)
c4 = c4 + 2
end
if conD(cr2,5) == 1
scheudle(5,[c5 (c5+1)]) = conT(cr2,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr2,1)
c5 = c5 + 2
end
for cr3 = find(fullcourse==3)'
iteration3=iteration3+1
if conD(cr3,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr3,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr3,1)
c1 = c1 + 2
end
if conD(cr3,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr3,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr3,1)
c2 = c2 + 2
end
if conD(cr3,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr3,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr3,1)
c3 = c3 + 2
end
if conD(cr3,4) == 1
scheudle(4,[c4 (c4+1)]) = conT(cr3,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr3,1)
c4 = c4 + 2
end
if conD(cr3,5) == 1
scheudle(5,[c5 (c5+1)]) = conT(cr3,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr3,1)
c5 = c5 + 2
end
for cr4 = find(fullcourse==4)'
iteration4=iteration4+1
if conD(cr4,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr4,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr4,1)
c1 = c1 + 2
end
if conD(cr4,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr4,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr4,1)
c2 = c2 + 2
end
if conD(cr4,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr4,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr4,1)
c3 = c3 + 2
end
if conD(cr4,4) == 1
scheudle(4,[c4 (c4+1)]) = conT(cr4,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr4,1)
c4 = c4 + 2
end
if conD(cr4,5) == 1
scheudle(5,[c5 (c5+1)]) = conT(cr4,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr4,1)
c5 = c5 + 2
end
for cr5 = find(fullcourse==5)'
iteration5=iteration5+1
if conD(cr5,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr5,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr5,1)
c1 = c1 + 2
end
if conD(cr5,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr5,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr5,1)
c2 = c2 + 2
end
if conD(cr5,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr5,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr5,1)
c3 = c3 + 2
end
if conD(cr5,4) == 1
scheudle(4,[c4 (c4+1)]) = conT(cr5,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr5,1)
c4 = c4 + 2
end
if conD(cr5,5) == 1
scheudle(5,[c5 (c5+1)]) = conT(cr5,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr5,1)
c5 = c5 + 2
end
for cr6 = find(fullcourse==6)'
iteration6=iteration6+1
if conD(cr6,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr6,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr6,1)
c1 = c1 + 2
end
if conD(cr6,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr6,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr6,1)
c2 = c2 + 2
end
if conD(cr6,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr6,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr6,1)
c3 = c3 + 2
end
if conD(cr6,4) == 1
scheudle(4,[c4 (c4+1)]) = conT(cr6,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr6,1)
c4 = c4 + 2
end
if conD(cr6,5) == 1
scheudle(5,[c5 (c5+1)]) = conT(cr6,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr6,1)
c5 = c5 + 2
end
for cr7 = find(fullcourse==7)'
iteration7=iteration7+1
if conD(cr7,1) == 1
scheudle(1,[c1 (c1+1)]) = conT(cr7,:)
courseindex(1,[c1 (c1+1)]) = fullcourse(cr7,1)
c1 = c1 + 2
end
if conD(cr7,2) == 1
scheudle(2,[c2 (c2+1)]) = conT(cr7,:)
courseindex(2,[c2 (c2+1)]) = fullcourse(cr7,1)
c2 = c2 + 2
end
if conD(cr7,3) == 1
scheudle(3,[c3 (c3+1)]) = conT(cr7,:)
courseindex(3,[c3 (c3+1)]) = fullcourse(cr7,1)
c3 = c3 + 2
end
if (conD(cr7,4) == 1)
scheudle(4,[c4 (c4+1)]) = conT(cr7,:)
courseindex(4,[c4 (c4+1)]) = fullcourse(cr7,1)
c4 = c4 + 2
end
if (conD(cr7,5) == 1)
scheudle(5,[c5 (c5+1)]) = conT(cr7,:)
courseindex(5,[c5 (c5+1)]) = fullcourse(cr7,1)
c5 = c5 + 2
end
[scheudleS, I] = sort(scheudle,2,'ascend')
courseindexS = courseindex(I)
ans1= all(all(courseindexS(1:end,[2:2:end])- courseindexS(1:end,[1:2:end]) == 0))
ans2 = courseindexS(1:end,[2:2:end])- courseindexS(1:end,[1:2:end])
if all(all(courseindexS(1:end,[2:2:end])- courseindexS(1:end,[1:2:end]) == 0))
iteration = iteration + 1
completeschedule((iteration*5)-4:iteration*5,:) = scheudleS
fun = 1 + fun
else
c1=1;c2=1;c3=1;c4=1;c5=1;
break
end
end
end
end
end
end
end
end