Gantt şemasının liste biçiminde sonucunu almak


Merhaba,
Öncelikle tam anlatabilmek adına uzun sürdü biraz özür dilerim şimdiden :frowning: Aslında sadece resimdeki gibi gantt şemasının liste olarak sonucun alınması. problem ise bekleme süreleri döngüsü. muhtemelen basit bir cevabı var fakat yapamadım.
İş sıralama üzerine yaptığım kodlamada gant şemasından sonuç almak istiyorum. listeler halinde iş sıralamalarını yapabildim fakat gantt hesaplamasında istediğim döngüyü kuramadım. öncelikle yüklediğim görüntü sadece bir sıralamanın gantt’ı. bulduğum her sıralama için gantt aldıracak bir döngü yazmalıyım. Ganttın temel mantığı ilk sıradaki iş tamamlanmadan diğerine geçilmemesi. yani paralel makine dizilimi (akış tipi atölye) söz konusu M1-----> M2------>… M5 gibi düşünebiliriz. M1 makinesi 3 nolu işi tamamlamadan M2 makinesi işe başlayamıyor. bu da taralı olarak belirtiliyor gantta. M2 makinesi m1 makinesini 1 birim bekliyor ve 3nolu işi 2 birim sürede tamamlıyor. yani m2 makinesi 3 nolu işi 3 birim sürede tamamlıyor. ardından sıradaki iş olan 4 nolu işe geçmesi gerekiyor. Fakat yine m1 makinesinin 4 nolu işi bitirmesini bekleyecek. yine 1 birim süre bekleyip işe başlıyor ve 8. birim sürede 4 nolu işi bitiriyor. bitirme süreleri alttaki tabloda verildi. İşleri en iyi sıraya koyup maximum akış sağlanması hedefleniyor. Aşağıda belirtilen rakamlar o işin o makinede tamamlanma süresi. mantık kavranması açısından belirttim bilenler için kafa karıştırmamak adına uzatmıyorum. Verilerimi excelden alıyorum list tipinde.
resimdeki verilerimi de belirteyim.
iş–> 1 2 3 4 5 6 7 8 9
M1 4 3 1 3 7 5 6 3 8
M2 3 7 2 4 1 2 3 2 4
M3 7 2 4 3 6 3 1 5 3
M4 2 8 3 7 4 4 5 4 1
M5 8 5 7 2 8 2 7 5 5

iş sıralaması ise [3, 4, 7, 8, 2, 5, 1, 6, 9] verilen gantt için böyle. 4 tane daha sıralama bulunacak ve her sıralamanın sonucunda gantt işlemi yapılacak (sorunum tam olarak burada) ve en yüksek rakam her tutulacak.

Görüntüsünü yüklediğim gantt şemasının liste biçiminde sonucunu almak istiyorum. yani en alttaki makinenin M5’in liste halini: ilk sıradaki işin yani 3. işin tamamlanma süresi 17::: Sıradaki iş olan 4. işin tamamlanma süresi 20::: … son sıradaki iş yani 9. işin tamamlanma süresi 63. bunları şu şekilde dizi işlemlerine tabi tutmak istiyorum. yani amacım 63 sayısını bulmak diyebiliriz.
Sıralama [3, 4, 7, 8, 2, 5, 1, 6, 9]
M1: [1 , 4, 10, 13, 16, 23, 27, 32, 40]
M2: [3, 8, 13, 15, 23, 24, 30, 34, 44]
M3: [7, 11, 14, 20, 25, 31, 38, 41, 47]
M4: [10, 18, 23, 27, 35, 39, 41, 45, 48]
M5: [17, 20, 30, 35, 40, 48, 56, 58, 63]
sonuçlarını almak istiyorum.
ilk_liste ve sonraki_liste olarak while döngüsü içerisinde karşılaştırarak sonuca varmayı denedim. M1 makinesinde bekleme olmadığı için kolay zaten. önceki sonraki diye karşılaştırmalar deneyerek yapmaya çalıştım fakat hep az da olsa yanlış tutarlar geliyor. 100 makine 100 iş için yaptığımdan dolayı döngüyü düzgün kurmalıyım :slight_smile: Buraya kadar okuyup da çözüm düşünenlere şimdiden çok teşekkürler. Zor olmasa gerek fakat ben yapamadım :face_with_head_bandage: umarım soruya yer kalmayacak şekilde anlatmışımdır teşekkürler şimdiden

Her is her makineden sirayla gececek diye varsayiyorum.

  1. M2 icin islerin hazirlik zamanini cikartman lazim. 3 isi 1’de hazir oluyor. 4 isi 4’te. 7 isi 10’da…

  2. Daha sonra bu hazirlik listesinin degistigi kilit noktalari bastan sona tarayip her kilit noktada hangi ise baslanacagini (varsa) cikartman lazim. 0’da hic is hazir degil, ise baslanmiyor. 1’de 3 hazir, 3’e baslaniyor. 3’te hic is hazir degil, ise baslanmiyor. 4’te 4 hazir, 4’e baslaniyor…

  3. M2 icin islerin bitis zamanini cikarttiginda, bu M3 icin islerin hazirlik zamani oluyor. Ayni sekilde devam ediyorsun…

Isler her makinada sirasiyla yapilacaksa (3 → 4 → 7 → 8 …) 2. adim daha da kolaylasiyor. Sirada bir tane is var, baslayacagi nokta ise max(hazir oldugu nokta, su anki isin bittigi nokta).