• Sonuç bulunamadı

1.3 Subset Sum

Kesme problemi subset-sum problemine benzer niteliktedir. Alt küme toplamı probleminin (subset-sum) amacı, alt kümeleri arasında toplamı t olan bir küme bulunan bütün S kümelerini içeren bir alt küme toplamı sınıfı bulmaktır. Alt küme toplamı problemi NP-tam bir problem olduğu için çözümü oldukça karmaşık ve zordur. Kriptografide şifrelenmiş bir metnin anahtarını bulabilmeyi sağlayabildiğinden dolayı, problemin çözümü önem kazanmıştır. Alt küme toplamı probleminin NP-tam sınıfında olması, problemin seyyar satıcı problemiyle ilişkisini de ortaya koymaktadır. Seyyar satıcı problemi, seyyar bir satıcının mallarını n adet şehirde satmak istemesinden doğar. Satıcı mantıklı ve mümkün olan en kısa şekilde bu şehirleri turlamak istemektedir. Subset-sum ve seyyar satıcı probleminin ortak noktası, n elemanı en kısa sürede dolaşmak, optimizasyon konusunda en derin incelemelere kaynak olmuştur. Kesme problemi ise bu noktada alt küme toplamı ve seyyar satıcı problemlerinden yararlanmaktadır. Stok uzunluklarını en kısa sürede taramak ve en iyi planı oluşturmak açısından, subset-sum kesme problemine benzemektedir.

Projenin devam eden bölümleri şu şekildedir: 3. bölümde mevcut problemin tanımı verilmiştir. 4. bölümde probleme için geliştirilen yeni algoritma anlatılmış ve oluşturulan yazılım paketi tanıtılmıştır. 5. bölümde algoritmanın veri kütüphanesi üzerindeki sonuçları rapor edilmiştir. Son olarak 6. bölümde sonuç verilmiştir.

2.Çözüm Yöntemleri

Optimizasyon problemlerinin çözüm yöntemleri kesin ve yaklaşık çözüm olmak üzere ikiye ayrılmaktadır. Kesin yöntemler optimal çözümü garanti eden ancak çalışma zamanı uzun süreler alan yöntemlerdir. Kısa sürelerden optimal olmayan kaliteli çözümler bulabilmek içinse yaklaşık yöntemler kullanılabilir. Yaklaşık çözümler optimal çözümleri garanti etmese de kısa sürelerde optimale yakın çözümler üretebilirler.

Kesme problemi, anlatım açısından oldukça kolay olmasına rağmen problemin çözümü oldukça zordur. Problemdeki parça sayısı arttıkça, problem üssel bir şekilde zorlaşmaya başlar. Bu sebepten büyük girdi boyutlarında tam çözüm bulmak oldukça uzun sürmektedir.

Bu nedenle de matematiksel modeller ya da tam çözüm bulan algoritmaların çalışma zamanları çok çok uzun süreler almaktadır. Araştırmacılar genel olarak tam çözümü garanti eden yöntemler yerine kısa sürelerde kaliteli çözümler bulan yöntemler geliştirmeye çalışmaktadır.

3. MEVCUT PROBLEM

Bilindiği gibi bir boyutlu kesme probleminde istenilen parçalar stoklardan kesilerek tek parça halinde elde edilir. Ancak yaptığımız araştırmalar sonucunda, özellikle uygulama kısmında problemin bir çok özel halinin olduğu gördük. Özelikle metal kesimleri gibi sanayi uygulamalarında, gerektirdiği taktirde bazı parçaların daha küçük parçalara ayrılarak daha sonra birleştirilip çöpe atılan kısmın minimize edilmesi çalışmaktadır. Buradaki kısıtlar herhangi bir parçanın en fazla ikiye bölünebilmesi ve tekrardan birleşim için kaynak uygulanacak en küçük parçanın 1 metreden büyük olmasıdır. Bu iki yeni kısıt ile kesme probleminin yeni bir versiyonu elde edilmiş olur. Bizde gerçek hayat projelerinde kullanılan bu yeni problem için bir yazılım üreterek daha kaliteli kesim planları ile fabrikaların çöpe attıkları maddeleri minimize etmeyi amaçladık.

4. GELİŞTİRİLEN YENİ ALGORİTMA

Önerilen yöntemde, kesme problemi alt küme toplamı problemi (Subset Problem) gibi modellenerek çözüm aranmıştır. Stok uzunluğu ulaşılması gereken sayı, istenilen parçaların uzunlukları ise kümenin elemanları olarak düşünülmüştür. Alt küme problemi için bulunan her

5 bir çözüm bir kesim deseni olarak düşünülerek, istenilen parçaların tümü elde edilene kadar bu alt prosedür çalışmaya devam etmektedir.

Alt küme toplamı problemi için önerilen prosedür açgözlü (Greedy) tabanlı bir algoritmadır. Klasik açgözlü algoritması altküme toplamı problemi için; parçaları büyükten küçüğe ya da küçükten büyüğe sıralayıp, dizinin ilk elemanından başlayarak sırayla ekleyebileceği parçaları çözüme ekleyerek çalışır. Fakat bu yöntem sürekli dizinin ilk elemanından başlayarak devam ettiği için, çözüm uzayını etkili bir şekilde tarayamamaktadır.

Bu problemin üstesinden gelmek ve daha kaliteli çözümler elde edebilmek için önerilen algoritma sadece dizinin ilk elemanında değil, sıra ile tüm elemanlardan başlayarak n adet çözüm bulup, bu çözümlerden en iyisini kesim deseni olarak kullanmaktadır. Bu yöntem ile açgözlü algoritmanın tekdüzeliği giderilmiş olsa da, yine de çözüm kümesinin elemanları genel olarak ardışık elemanlardan oluşmaktadır. Bu da bulunan çözümlerdeki çeşitliliği azaltıp, en iyi çözümün bulunma ihtimalini düşürmektedir. Bu sorunun üstesinden gelmek için random fonksiyonu kullanılarak her bir parçaya çözüm kümesine girmesini sağlayan bir yüzde verilmiştir. Parçaların çözüm kümesine girme yüzdesi aşağıdaki formüle göre hesaplanmaktadır:

sps: çözüme giren sıralı parça sayısı.

() (1.5) * (100 / ( 1))

fsps

Formüle göre ilk elemanın çözüme girme yüzdesi %150’dir. Böylece ilk elemanın çözüme girmesi garanti altına alınmıştır. Daha sonra, sps sayısı 1 artacağı için ikinci elemanın çözüme girme yüzdesi %75, üçüncü elemanın çözüme girme yüzdesi %50, şeklinde azalarak devam eder. Kesim desenine girecek parçadan çözüm kümesine eklenebildiği kadar eklenir. Eğer herhangi bir eleman düşük yüzdesinden dolayı çözüme giremediyse, sps değeri 1 azaltılarak kendisinden sonraki elemanın çözüme girme yüzdesi arttırılır. f fonksiyonu, çözüm uzayının daha kapsamlı bir şekilde aranmasını ve daha kaliteli çözümler elde edilmesini sağlar. Ayrıca parçaların bu işlemlerden önce uzunluklarına göre büyükten küçüğe sıralanmasıyla çözümlerin kalitesinin artması sağlanmıştır. Problemi bir bavulumuza eşyalarımızı yerleştirme şeklinde düşünürsek, öncelikle hacimsel olarak en büyük eşyalarımızı koyar, sonrasında daha küçük eşyalarla bavulumuzu doldurmaya çalışırız. Benzer şekilde stok uzunluğuna ulaşmaya çalışırken de, önce uzun parçaları kullanmak bize avantaj sağlayacaktır. Basit bir örnek vermek gerekirse; 10 tane 2 metre uzunluklu parçayı yerleştirme işlemi, 10 tane 15 metre uzunluğundaki parçayı yerleştirme işlemine göre daha kolaydır. Bu yüzden algoritmanın önceliği olabildiğince uzun parçalardan kurtulmaktadır.

Üzerinde çalıştığımız problemin klasik bir boyutlu kesme probleminden farkı, parçaların istenildiği zaman ikiye bölünerek kesim desenine girmesi, daha sonra sonra bölünmüş parçaların kaynak ile tekrar birleştirilebilmesidir. Bu sebeple her bir kesim deseni oluşturulduktan sonra, eğer stokta minimum kaynak uzunluğundan daha büyük bir boşluk kaldı ise, istenilen parçalardan biri ile bu boşluk doldurularak, ikiye bölünür. Bölünen parçanın kalan kısmı ise parçalar dizisine eklenir. Burada parça seçme işlemi yapılırken, bir üst paragrafta bahsedilen nedenlerden dolayı uzunluk dikkate alınarak, en uzun parça kaynak için kullanılır.

Bu sayede üzerinde çalışılan kesim deseninin iyileştirilmesinin yanında, kaynak için en uzun parçalar bölünerek daha küçük parçalar elde edildiğinden sonraki kesim desenlerinin kalitesinin de artması sağlanır. Bu prosedür tüm parçaların istekleri tamamlanana kadar devam eder. Algoritmanın içerinde rastgelelik fonksiyonu kullanıldığını için prosedürün istenen iterasyon sayısı kadar devam edip, en iyi çözümü vermesi sağlanmıştır. Algoritmanın akış diyagramı aşağıda Şekil 1’de verilmiştir. Akış diyagramında S dizisi parçaların uzunluklarını, D dizisi ise parçaların istek adetlerini belirtmektedir.

6 Şekil 1: Algoritmanın Akış Diyagramı.

7 4.1 Yazılım Paketi

Bir boyutlu kesme problemi için önerilen algoritma, Visual Studio 2008 ile C# dilinde kodlanmıştır. Program.txt uzantılı bir dosyadan girdi verilerini alarak, kesim planını oluşturup çıktı olarak girdi dosyasının bulunduğu diziye bir txt dosyası oluşturmaktadır. Program girdi dosyasının ilk satırından sırasıyla stok uzunluğunu ve parça sayısını, devam eden satırlarda ise uzunluk değerlerini ve istek adetlerini okumaktadır. Çıktı dosyasında ise, her bir kesim deseni ve o desenden kaç adet kesileceği raporlanmaktadır. Şekil 2’de girdi ve çıktı dosyası için birer örnek bulunmaktadır.

Şekil 3:Girdi ve Çıktı dosya örnekleri.

Yazılımın arayüzü, kullanıcının programı daha rahat kullanabilmesi için çeşitli parametreler barındırmaktadır. Programa girdi dosyası ile birlikte, kaynak işlemi uygulanabilecek en kısa uzunluk, minimum kaynak kullanım yüzdesi ve prosedürün iterasyon değeri girilmelidir. Her bir kaynak işlemi şirkete ekstra maliyet getireceği için kaynak sayısını istenilen seviyede tutmayı hedefleyen minimum kaynak yüzdesi parametresi programa eklenmiştir. Kesim deseninde kullanılan parçaların toplam uzunluğunun stok uzunluğuna yüzdesi bu parametreden daha düşük ise o kesim deseni için ekleme işlemi yapılacaktır.

Program çalıştırılıp çözüm elde edildikten sonra, arayüzde kullanılan toplam stok sayısı, çöpe atılacak parçaların toplamı, çöp yüzdesi, tüm kesim deseni için kaç adet kaynak işlemi yapılacağı ve programın çalışma zamanı raporlanmaktadır. Ayrıca tüm kesim deseni bir .txt dosyasında kullanıcıya sunulmaktadır. Şekil 3’te programın arayüzü görünmektedir.

8 Şekil 3:Geliştirilen programın arayüzü.

Benzer Belgeler