Код Matlab для сортировки расписания по времени начала и окончания без наложения и конфликта - PullRequest
0 голосов
/ 09 апреля 2019

Я новичок и недавно начал изучать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...