[]
Kapasite Algoritması / Optimizasyonu / Ataması / Otomasyonu
Arkadaşlar selam,
Başıma iş aldım. Bir problem bulup, onu bilimsel metotlarla çözmek istedim. Bulduğum problem, üretim planlaması. Birçok farklı sektörde kullanılabilir.
Şöyle ki;
Elimizde türlere ayrılmış, son tarihi olan işler var ve bu türlerde üretim yapabilecek kapasiteler var.
hizliresim.com
Bunları tarih ve üretici kısıtlarına göre minimum gecikme ve maksimum doluluk yaparak üretim sırasına almak istiyorum. Ayrıca çok erken de başlamamalı.
hizliresim.com
Deneyip içinden çıkamadığım yollar;
Doğrusal programlama
Tam sayı programlama
Job shop scheduling
Google ortools kütüphanesi. developers.google.com
Greedy Algoritması
Sizlerle bi beyin fırtınası yapmak istedim. Bu problem nasıl çözülür?
Python kullanarak işlem yapmaya çalışıyorum. Aslında çözüm dilinden önce mantığını, fonksiyonlarını anlamaya çalışıyorum. Her türlü görüşünüzü duymak isterim. Üzerine konuşmak isteyen ve beraber yeni şeyler öğrenelim diyenler varsa hiç çekinmesin :)
Başıma iş aldım. Bir problem bulup, onu bilimsel metotlarla çözmek istedim. Bulduğum problem, üretim planlaması. Birçok farklı sektörde kullanılabilir.
Şöyle ki;
Elimizde türlere ayrılmış, son tarihi olan işler var ve bu türlerde üretim yapabilecek kapasiteler var.
hizliresim.com
Bunları tarih ve üretici kısıtlarına göre minimum gecikme ve maksimum doluluk yaparak üretim sırasına almak istiyorum. Ayrıca çok erken de başlamamalı.
hizliresim.com
Deneyip içinden çıkamadığım yollar;
Doğrusal programlama
Tam sayı programlama
Job shop scheduling
Google ortools kütüphanesi. developers.google.com
Greedy Algoritması
Sizlerle bi beyin fırtınası yapmak istedim. Bu problem nasıl çözülür?
Python kullanarak işlem yapmaya çalışıyorum. Aslında çözüm dilinden önce mantığını, fonksiyonlarını anlamaya çalışıyorum. Her türlü görüşünüzü duymak isterim. Üzerine konuşmak isteyen ve beraber yeni şeyler öğrenelim diyenler varsa hiç çekinmesin :)
Burada 2 tane kıstasınız olduğu için kolay bir problem gibi görünmüyor. Yani hem gecikmeyi azaltmak isterken hem de kapasiteyi maksimize etmek istiyorsunuz. Bunlardan sadece biri olsaydı, greedy veya linear programmingle çok rahat çözülürdü. Bu şekilde komplike geldi gözüme :)
- ciagra (07.03.21 15:31:57)
@ciagra aslında daha komplike hale gelebilir. Örneğin; iş10 şu tarihte başlamalı ya da c üreticisinde yapılmalı gibi ama bir yerden çözeme başladıktan sonra bunları eklemek vardı aklımda.
Ancak biliyoruz ki bir çözüm kümesi var. Yani tanımsız değil. Yeni bilgiler öğretmeye açık. Bu nedenle problem daha çekici hale geliyor.
Ancak biliyoruz ki bir çözüm kümesi var. Yani tanımsız değil. Yeni bilgiler öğretmeye açık. Bu nedenle problem daha çekici hale geliyor.
- bagcivan (07.03.21 16:05:06)
Isi parcalayip ele almaya calis. Misal burada elindeki her uretici icin ayri bir bir planlama yapmaya calisabilirsin. Once islerini turlerine gore 4 tabloya bol. Her bir tabloyu deadline tarihlerine gore kucukten buyuge sirala. Sonrasi da greedy algorithm ile isleri ureticilere atama olayi.
Asagi yukari su asagidaki adimlari takip edeceksin greedy algorithm icin
1) x turundeki en yakin deadline ne zaman? (Onceligin bu is olacak)
2) x turunde uretim yapan ureticilerin kac tanesini es zamanli bu ise atamam gerek?
3) eger hepsini atadiysan kac gunde bitirirsin
4) is bittigindeki yeni ise hemen baslaman gerekir mi? eger gerekirse, o zaman adim bire don.
Mesela tablona bakildiginda a turu icin onceligin deadlinei bugun olan bir is. Talep ettigi kapasite 2761 ancak senin tum ureticilerinle gunluk saglayabildigin kapasite 2200. Demek ki bu is 2 gunde bitecek. ilk gun 2200 urettikten sonra geriye kalan 561 kapasite icin de doldurma olayi sana kalmis. Istiyorsan ikinci gun o 561 kapasiteyi herhangi bir ureticiye verirsin. Ya da hepsi is yapsin diyorsan da 3 parcaya bolup her ureticiye 187 birim is atarsin.
Eger saat hesabi da onemliyse kalan isi zaten direkt her uretici arasinda bolusturmek sana daha fazla avantaj saglar.
Asagi yukari su asagidaki adimlari takip edeceksin greedy algorithm icin
1) x turundeki en yakin deadline ne zaman? (Onceligin bu is olacak)
2) x turunde uretim yapan ureticilerin kac tanesini es zamanli bu ise atamam gerek?
3) eger hepsini atadiysan kac gunde bitirirsin
4) is bittigindeki yeni ise hemen baslaman gerekir mi? eger gerekirse, o zaman adim bire don.
Mesela tablona bakildiginda a turu icin onceligin deadlinei bugun olan bir is. Talep ettigi kapasite 2761 ancak senin tum ureticilerinle gunluk saglayabildigin kapasite 2200. Demek ki bu is 2 gunde bitecek. ilk gun 2200 urettikten sonra geriye kalan 561 kapasite icin de doldurma olayi sana kalmis. Istiyorsan ikinci gun o 561 kapasiteyi herhangi bir ureticiye verirsin. Ya da hepsi is yapsin diyorsan da 3 parcaya bolup her ureticiye 187 birim is atarsin.
Eger saat hesabi da onemliyse kalan isi zaten direkt her uretici arasinda bolusturmek sana daha fazla avantaj saglar.
- j r r tolkien hayrani (07.03.21 17:05:36)
@j r r tolkien hayrani önerilerin için teşekkür ederim. yapılacak işi birine anlatmaya çalışmak bile sorunu daha iyi anlamama yardımcı oluyor. parçalayıp ele almanın üzerinde çalışacağım. dediğin gibi işleri böldüğümüzde her tür için algoritma ayrı ayrı çalışabilir. fakat iş bölünmüyor yani bir işi bir üretici yapacak.
Örneğin 12 tane a türünde iş var ve bu işi yapabilecek 3 üretici var. Bu durumda her bir üreticinin günlük kapasitesi farklı olduğu için, toplam üretim süreleri de değişkenlik gösterecek. Birden fazla üreticiye greedy algoritması ile nasıl optimum bir dağılım yapabiliriz? Bunu biraz araştırayım.
Örneğin 12 tane a türünde iş var ve bu işi yapabilecek 3 üretici var. Bu durumda her bir üreticinin günlük kapasitesi farklı olduğu için, toplam üretim süreleri de değişkenlik gösterecek. Birden fazla üreticiye greedy algoritması ile nasıl optimum bir dağılım yapabiliriz? Bunu biraz araştırayım.
- bagcivan (07.03.21 17:29:26)
Peki burda amaç teorik bir çözüm geliştirmek mi? Yoksa pratik bir soruna çözüm üretmek mi? Eğer pratik bir soruna çözüm geliştirmek istiyorsan, gördüğüm kadarıyla input sayın fazla olmadığı için klasik brute-force yöntemi de deneyebilirsin.
- ciagra (07.03.21 23:59:26)
@ciagra pratik bir soruna çözüm üretmek. input sayısı fazla olabilir ama onu da deneyeceğim
- bagcivan (20.03.21 16:06:13)
1