Witam,
jestem umiarkowanym laikiem jeśli chodzi o programowanie, ale muszę napisać program balansujący linię montażową. Aktualnie borykam się z problemem sprawdzania warunków pierwszeństwa. Oto przykładowy diagram pierwszeństwa:
![user image](http://i.imgur.com/fKEok.png)
Zrobiłem macierz/tabelę, w której, dla każdego z 25 zadań ( Ti ), wypisana jest lista zadań, które nie mogą być bez jego ukończenia wykonane ( P(Ti,:) ). Wygląda to tak:
P = [ 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 ;
10 16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 0;
8 12 15 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0;
11 10 13 15 16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0;
20 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
12 15 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
12 14 15 19 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
13 15 16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0;
15 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
15 16 17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0;
19 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
17 18 19 20 21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
21 22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
19 20 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
22 23 24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
24 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
Mam też tablicę, w której dla poszczególnych stacji roboczych ( W(Ti,:) ) wypisane są zadania należące w danej chwili do danej stacji (ograniczenie do pięciu miejsc jest tylko na czas testów). Aktualne rozwiązanie wzięło się z podanego w przykładzie 'initial solution', doprowadzeniem do którego zajmę się w późniejszej fazie projektu.
W = [ 1 3 0 0 0 ;
5 0 0 0 0 ;
6 7 0 0 0 ;
11 0 0 0 0 ;
13 0 0 0 0 ;
2 0 0 0 0 ;
4 10 16 0 0 ;
8 9 14 0 0 ;
18 0 0 0 0 ;
12 19 0 0 0 ;
17 21 0 0 0 ;
15 0 0 0 0 ;
23 0 0 0 0 ;
20 0 0 0 0 ;
22 24 0 0 0 ;
25 0 0 0 0 ];
Program ma za zadanie wymieniać ze sobą zadania T1 i T2 (wybrane poprzez kontrolowane losowanie) w różnych stacjach roboczych, aż nie trafi na lepsze rozwiązanie. Oczywiście wymienić zadania może tylko wtedy, gdy spełnią one kilka warunków. Jednym z nich jest właśnie reguła pierwszeństwa i to ona sprawiła mi do tej pory największy problem.
PROBLEM:
Zrobiłem sprawdzanie w następujący sposób: program sprawdza czy dwa wybrane do wymiany zadania T1 i T2 nie mają siebie nawzajem w liście pierwszeństwa. Niestety wyniki nie są dobre i program zawsze wymienia zadania w taki sposób, że prawa pierwszeństwa nie są zachowane. Moje sprawdzanie nie wystarczy, ale nie mam pomysłu w jaki sposób do tego problemu podejść, dlatego proszę o pomoc na tym forum. Na co muszę zwrócić uwagę i jak ugryźć ten problem? Jeśli ktoś jest mi w stanie pomóc, będę wdzięczny.
Pozdrawiam serdecznie,
J.A.
ps. proszę się nie przejmować składnią bo piszę w matlabie, zależy mi na pomocy w wymyśleniu/napisaniu algorytmu sprawdzania precendesów.