PuLP Kütüphanesi ve Python ile Do*rusal Programlama

advertisement
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).
Download