PuLP Kütüphanesi ve Python ile Doğrusal Programlama Problemlerinin Çözümü Coşkun Atay1, Serkan O. Dibek2, Öykü Kara2, Cemre Ersöz2 1 İzmir Ekonomi Üniversitesi, Bilgisayar Teknolojileri Bölümü 2 İzmir Ekonomi Üniversitesi, Endüstri Sistemleri Mühendisliği Bölümü Anahtar sözcükler Python PuLP Doğrusal Programlama Çay Harmanlama Python Nesnel,yorumlanabilen,etkileşimli Syntax hataları az Basit söz dizimleri Akılda kalınabilirlik PuLP Modelleme kütüphane tanımlamaları sağlayan ÇALIŞMAMIZIN AMACI Matematiksel modellerin Python dilinde,PuLP kütüphanesini kullanarak bir çay karışımı ve harmanlama problemini çözecek doğrusal programlama sunmaktır. 1.Giriş PuLP, mümkün olduğunca özel sözdizimleri ve sözcüklerden uzak durarak, Python dilinin gücünü kullanan ve kullanıcının Python dilinin doğal ifadelerini kullanarak program oluşturmasını sağlayan üst düzey bir modelleme kütüphanesidir.Optimizasyon problemlerini ve karar değişkenlerini matematiksel ifadelere oldukça yakın ifade edilmesine olanak sağlar. 2.PuLP'ın Tasarımı ve Özellikleri PuLP’ın tasarımında ve Python’un kullanılacak dil olarak seçilmesinde pek çok unsur göz önünde bulundurulmuştur. Basit bir modelleme ve deneyleme aracı, ya da daha büyük bir endüstriyel uygulamanın bir parçası olup olmamasına bakılmaksızın, PuLP’ın her yerde kullanılabilir olması istenmiştir. MIT Lisansı 3.Çözücüler ile Arayüz Yapmak PuLP,Python-PuLP ifadelerinin tam sayılara(örn. modelin seyrek matris ve vektör gösterimleri) dönüştürülmesini dahili olarak halleder ve bu veriyi çözücü için modüler bir yaklaşım getirmektedir. Çözücüler kullanıcılar tarafından geliştirelebilir. 4.Sözdizimi,Kolaylık ve Mevcut Paketler Python kod yazımı için resmileştirilmiş bir biçim geliştirmiştir.Bu biçim kodun okunabilirliğine ve sürdürülebilirliğine önem vermektedir. PuLP,mümkün olduğunca Python programlama dilinin doğal ifadelerini kullanarak bu tarzı geliştirir. Çok az özel fonksiyon veya anahtar kelime bulundurur. Python standart kütüphanesinin yanı sıra,Python Package Index'te yöneylem araştırması ile ilgili pek çok paket bulundurur. BASİT BİR ÖRNEK MODEL: # declare your variables x1 = LpVariable("x1", 0, 40) # 0<=x1<= 40 x2 = LpVariable("x2",0,1000) # 0<=x2<= 10 # define the problem prob = LpProblem("problem", LpMaximize) # define the constraints prob += 2*x1 + x2 <= 100 prob += x1 + x2 <= 80 prob += x1 <= 40 prob += x1 >= 0 prob += x2 >= 0 (Model Devamı) # define the objective function to maximize prob += 3*x1 + 2*x2 # solve the problem status = prob.solve(GLPK(msg=0)) LpStatus[status] # print the results x1 = 20, x2 = 60 value(x1) value(x2) 5.Çay Harmanlama Problemi ÇAY HASADI Hasat çayın işlemesi için önemli olduğu gibi ürünün ekonomisi yönünden de en uygun şekilde yapılmalıdır. Çay işlemeye uygunluğu yönünden genç ve körpe çay yaprağı ile tomurcuğunun toplanması esastır. Genel bir kural olarak iki yaprak bir tomurcuğun toplanması istenmektedir bu durum çayın kolay işlenmesini ve kalitesini arttırmaktadır. Üretilecek belirli bir çay karışımı için, karışım bileşenlerinin uygun bir şekilde ve verilen kısıtlayıcılara göre seçilmesi gerekmektedir. Verilen kısıtlayıcılara, belirlenen formül içeriğine ve diğer kalite değerlerine göre bir çay karışımı üretmek için bir grup torba seçilir. Kısıtlar: Kullanılacak Maksimum Torba Sayısı: 19Toplam Üretim Miktarı: 5000 kg (miktar ± %1.5 aralığında üretilebilir)Kullanılan her torba, tamamının ya da bir kısmının kullanılıp kullanılmadığına bakılmaksızın, mevcut 19 tanktan bir tanesine tekabül etmektedir. Torbalar tankta karıştırılamaz, yani her tank için yalnızca bir tane torba kullanılmalıdır. Çay sektöründe küçük ölçekli firmalar genellikle ürettikleri çaydan elde ettikleri tüm nevilerin tamamını harmanlayarak tek paket halinde piyasaya sürerlerken,büyük ölçekli firmalar kalitelerine göre farklı nevi içerikli paketler üretmektedirler Yeni marka bir çay üretileceği zaman çay nevi oranlarını belirten bir harmanlama reçetesi hazırlanır. Üretilecek ürün, verilen formül ile aşağıda tanımlanmaktadır. Formüldeki bileşenlerin her birinin kalite değeri bulunmaktadır ve ürünün kalite değerleri, formül bileşenlerinin kalite değerlerinin ağırlıklı ortalaması olarak hesaplanmaktadır. Stoklar yalnızca belirli bileşenlere sahip olan torbalardaki malzemeleri içermektedir ve her torbanın kendine ait kalite değeri ve ağırlığı bulunmaktadır. 6.Çay Karışımı Probleminin MILP formülasyonu 7.Çay Karışımı için Python ve PuLP Programı 8.Sonuç ve Öneriler Pyhton tabanlı bir modelleme aracı olan PuLP, ifade gücü, yaygın kullanılabilirliği ve gücü kendine özgü bir şekilde birleştirerek kendini mevcut olan diğer üst düzey modelleme dillerinden ayırmaktadır. Bir problemin matematiksel açıklaması, çoğunlukla mümkün olan en güçlü ve en basit açıklamadır ve herhangi bir modelleme dili de bunu mümkün olduğunca yakalamak istemektedir. PuLP’ın bir dizi ücretsiz ve ücretli çözücüyü kullanabilmesi önemlidir. Kullanıcı, ücretsiz bir çözücüde basit LP modelleri geliştirmek ve ardından da modelin çözüm zamanını önemli derecede azaltabilecek ticari bir çözücü kullanan müşteriye çözüm sağlayabilir. 9.Kaynaklar 1] CPLEX. http://www.ilog.com/products/cplex/. [2] Gurobi. http://www.gurobi.com/. [3] Python Package Index. http://pypi.python.org/pypi. [4] Python Standard Library. http://docs.python.org/library/. [5] C. Duquesne. YAPOSIB. http://code.google.com/p/yaposib/. [6] J. Forrest. CBC. http://www.coin-or.org/. [7] William Hart. Coopr. https://projects.coin-or.org/Coopr. [8] William Hart. Python optimization modeling objects (Pyomo). Proc INFORMS Computing Society Conference. (2009). [9] M. E. Lübbecke and J. Desrosiers. Selected topics in column generation.Operations Research. 53(6):1007–1023. (2005). [10] S. A. Mitchell and J. S. Roy. PuLP. http://www.coin-or.org/PuLP/. [11] Open Source Initiative. MIT License. http://www.opensource.org/licenses/mitlicense.php. [12] M. O’Sullivan. Dippy. https://projects.coin.or.org/CoinBazaar/wiki/ Projects/Dippy. [13] Guido van Rossum. PEP 8 – Style Guide for Python Code. http://www.python.org/dev/ peps/pep-0008/. [14] Guido van Rossum. Python Reference Manual. CWI Report. CS-R9525 edition. May (1995). [15] Stuart Mitchell, Michael O’Sullivan and Iain Dunning. “PuLP: A Linear Programming Toolkit for Python”, The University of Auckland, Auckland, New Zealand. Sept. (2011).