Optimizasyon MATLAB

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak.

Makine Mühendisliği - 2010

İÇİNDEKİLER
İÇİNDEKİLER..................................................................................................................... i
SİMGELER.......................................................................................................................... i
ŞEKİLLER LİSTESİ............................................................................................................ i
TABLOLAR LİSTESİ ......................................................................................................... i
1 GİRİŞ........................................................................................................................... 1
2 İŞLEM ......................................................................................................................... 1
3 FİRE MİKTARININ EN AZA İNDİRİLMESİ .......................................................... 1
3.1 Amaç Fonksiyonu ................................................................................................ 1
3.2 Sınırlayıcılar ......................................................................................................... 1
4 MATLAB PROGRAMI .............................................................................................. 1
4.1 Açıklamalı Kodlar ................................................................................................ 2
4.2 Girdi ve Çıktılar ................................................................................................... 4
5 SONUÇLAR ve YORUM ........................................................................................... 5

SİMGELER
b: Yatay doğrultudaki boyut
h: Dikey doğrultudaki boyut
x: Optimize edilecek adet
i: Yerleştirme indeksi
j: Sipariş indeksi
n: Sipariş adedi
f: Amaç fonksiyonu

ŞEKİLLER LİSTESİ

Şekil 1 Sipariş dosyası......................................................................................................... 4


Şekil 2 Program çıktısı ........................................................................................................ 5

TABLOLAR LİSTESİ

Tablo 1 Açıklamalı kodlar................................................................................................... 2

i
İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak. Makine Mühendisliği - 2010

1 GİRİŞ
İmalat sektöründeki firmalarda kârın yüksek olması için kullanılan yarı mamullerin en
yüksek yüzdeyle kullanılabilmesi, ayrıca atık miktarının da en düşük düzeyde kalması
gerekmektedir. Bu çalışmanın kapsamında olan siparişi verilen dikdörtgen biçimindeki
plakaların ana levhaya yerleştirilmesinde de bu değişmez.
Güncel sistemlerde genetik algoritma, yapay sinir ağları gibi yöntemlerle geliştirilmiş,
minimum fire sağlayan yazılımlar kullanılmaktadır.
Bahsedilen yazılımlar önce tek bir levha yerleştirip, geriye kalan alanı en yüksek verimle
kullanacak şekilde her bir levhayı teker teker yerleştirerek fire miktarını en düşük seviyeye
indirmeyi amaçlarlar. Bunu yaparken hem alan hem biçim optimizasyonu yaparlar.
Bu çalışmada gelen sipariş okunarak, fire en az olacak şekilde alan optimizasyonu
yapılmıştır. Bunu yaparken MATLAB Optimization Toolbox’da bulunan “fmincon” aracı
kullanılmıştır.

2 İŞLEM
Siparişi verilen dikdörtgen biçiminde cam levhaların 6000x3200mm boyutundaki ana
levhaya en az fire verecek biçimde yerleştirilmesi istenmektedir. İşlem yapılacak malzeme
cam olduğu için lazer veya su jetiyle kesme işlemindeki gibi kısmi kesimler mümkün değildir.
Önce yatay veya dikey olmak üzere boydan boya cam kesilir. Geriye kalan parçalardaki
biçimler de her seferinde boydan boya olacak şekilde kesilerek istenen ürünler elde edilir.

3 FİRE MİKTARININ EN AZA İNDİRİLMESİ

3.1 Amaç Fonksiyonu


Fire miktarının en az olabilmesi için ana levhadan siparişlerin alanını çıkardıktan sonra
kalan alanın en küçük değerde olması gerekir.
n
f  bT hT   xi bi hi i  1...n (3.1)
i 1

3.2 Sınırlayıcılar
Sipariş miktarı ana levhanın alanına eşit ya da ana levhadan daha büyük olursa en fazla
sayıda levha yerleştirilecektir.
n

x b h
j 1
j j j  bT hT j  1...n (3.2)

Sipariş edilen levhaların her biri ana levhaya sığabilmelidir.


bi hi  bT hT i  1...n (3.3)
Yerleştirilen levha sayısı sipariş edilenden büyük olmamalıdır.
xi  x j i  j  1...n (3.4)
Yerleştirme adedi negatif olmamalıdır.
xi  0 i  1...n (3.5)

4 MATLAB PROGRAMI
Amaç fonksiyonu ve sınır şartları ana levha alanının verimli kullanılması hakkında ifade
içermediği için yerleştirmenin program yazılırken dikkate alınması gereklidir.
Ayrıca “fmincon” aracı küsürlü sonuç üretebilmektedir. Ancak adet küsürlü
olamayacağından küsürlere karşılık gelen alan kullanılamayacaktır. Bunu engellemek için

1
İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak. Makine Mühendisliği - 2010

sipariş edilen her bir levhanın ana levhaya en fazla kaç adet sığabileceği hesaplanmıştır. Bu
hesap yatay ve dikey yerleşim için tekrarlanmıştır. Bu sayede levha alanını en verimli
kullanacak şekilde yerleştirme yapılması amaçlanmıştır.
Programda bulunan adetlerin sipariş sayısından fazla olması halinde bu adetler sabitlenip
amaç fonksiyonu güncelleştirilerek yeniden optimizasyon yapılmaktadır.

4.1 Açıklamalı Kodlar


Tablo 1 Açıklamalı kodlar
%Degisken cakismasi olmamasi icin hafiza temizleniyor
clear all
%Cikti ve hata kontrolu icin calisma alani temizleniyor
clc;
%Ana levha boyutları [en boy](mm)
lBoyut=[6000 3210];
%Levha yatay yerlesecek bicimde ayarlaniyor
if lBoyut(1)<lBoyut(2)
lBoyut=fliplr(lBoyut);
end
%Kesilecek levha boyutları (mm) ve adetleri [en boy adet]
bhi = xlsread('siparis.xls');
n=size(bhi,1);
%Levhaların yerlesimi yatay olacak sekilde ayarlaniyor
for i=1:n
if bhi(i,1)<bhi(i,2)
bhi(i,1:2)=fliplr(bhi(i,1:2));
end
end
%Eşitsizlik sınırlayici matrisleri tanimlaniyor
aEssiz=bhi(:,1:2);
aEssiz=satirCarp(aEssiz)';
bEssiz=lBoyut(1)*lBoyut(2);
xHepsi=zeros(1,n);
toplamAlan=aEssiz*bhi(:,3)
%Siparisin toplam alani gecip gecmedigi kontrol ediliyor
if toplamAlan<lBoyut(1)*lBoyut(2)
error('Levha alanlari, toplam alani gecmiyor');
break;
end
%En fazla sigabilecek levha sayilari elde ediliyor
xHepsi=fmincon(@(xHepsi)
odevAmac(xHepsi,aEssiz,bEssiz,0,0),zeros(1,n),aEssiz,bEssiz,[],[],0,[]);
cHepsiTsayi=fix(xHepsi);
%Siparis sayisindan buyuk olan sayilar siparis sayisina sabitlenip diger
%sayilarin optimum degeri yeniden hesaplaniyor
j=1;m=n;
for i=1:n
if cHepsiTsayi(i)>bhi(i,3)
sabit(j)=bhi(i,1)*bhi(i,2); xsabit(j)=bhi(i,3);
eksikler(i)=i;
bEssiz=bEssiz-satirCarp(bhi(i,:)); %bhi(i,1)*bhi(i,2)*bhi(i,3);
aEssiz(i)=0;
j=j+1; m=m-1;
else
eksikler(i)=0;
end
end
aEssiz_=aEssiz;
i=size(aEssiz_,2);
while i>=1
if aEssiz_(i)==0

2
İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak. Makine Mühendisliği - 2010

aEssiz_(i)=[];
end
i=i-1;
end
%Guncellestirilen adetlere gore yeniden optimizasyon yapiliyor
if j>1
xHepsi=fmincon(@(xHepsi)
odevAmac(xHepsi,aEssiz_,bEssiz,sabit,xsabit),zeros(1,m),aEssiz_,bEssiz,[],[
],0,[]);
dHepsiTsayi=fix(xHepsi);
end
m=1;
%Yerlestirme listesi guncellestiriliyor
for i=1:n
if eksikler(i)~=0
hepsiTsayi(i)=dHepsiTsayi(m);
m=m+1;
else
hepsiTsayi(i)=cHepsiTsayi(i);
end
end
%Her bir levhanin tek basina ana levhaya en fazla kac adet
%sigabilecegi hesaplaniyor
for i=1:n
for j=1:2
for k=1:2
xTek=fmincon(@(xTek)
amac(xTek,bhi(i,j)),0,bhi(i,j),lBoyut(k),[],[],0,[]);
cTekTsayi(j,k,i)=fix(xTek);
xTek_(j,k,i)=xTek;
end
end
%Levhanın yatay yerlestirilmesi durumunda sigabilen levha adedi
yatay(i,:)=diag(cTekTsayi(:,:,i))';
%Dikey durumda adet
dikey(i,:)=fliplr(diag(fliplr(cTekTsayi(:,:,i)))');
end
dizilim=[yatay;dikey];
i=1; k=1; x1=0; y1=0; eskiBoy=0; eskiEn=0;
kalanBoyut=lBoyut; m_=1; toplam=0;i_=1;
while i<=n
yerlesen=1;
%Yatay yerlesimde mi daha fazla yer kaliyor dikey yerlesimde mi?
if kalanBoyut(1)-dizilim(i,1)*bhi(i,1)<kalanBoyut(1)-
dizilim(i+4,1)*bhi(i,2)
a=1;
b=2;
else
a=2;
b=1;
end
%Yerlesen levha sayisi siparis sayisina ulasincaya kadar
while yerlesen<=hepsiTsayi(i)
en(i)=bhi(i,a);
boy(i)=bhi(i,b);
%Levha yerlestirecek yer kalmadiysa diger levhalarin sigip
%sigmadigi kontrol ediliyor
if kalanBoyut(2)<boy(i)
i=i+1;
break;
end

3
İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak. Makine Mühendisliği - 2010

%Levha yerlestirilip sayilar guncelleniyor


yerlesim(m_,:)=[x1 y1 bhi(i,a) bhi(i,b)];
m_=m_+1;
yerlesen=yerlesen+1;
toplam=toplam+1;
%Yatay mesafede levhanin yerlesebilecegi yer varsa
yerlestiriliyor
if x1+eskiEn+en(i)<lBoyut(1)
x1=x1+en(i);
eskiEn=en(i);
else
%Yoksa ust satira gecilip isleme devam ediliyor
x1=0;
%Yerlestirilen levhanin alttaki levhalarla cakismamasi icin
%yukseklik ayarlaniyor
y1=y1+max(yerlesim(i_:size(yerlesim,1),4));
i_=m_;
kalanBoyut(2)=lBoyut(2)-y1;
end
kalanBoyut(1)=lBoyut(1)-x1;
end
%Butun levhalar yerlestirildiyse donguden cikiliyor
if i>n
break;
else
i=i+1;
end
end
%Grafik olusturuluyor
for m_=1:size(yerlesim,1)
rectangle('Position', [yerlesim(m_,1) yerlesim(m_,2) yerlesim(m_,3)
yerlesim(m_,4)]);
end

4.2 Girdi ve Çıktılar


Program Microsoft Excel® formatında bir dosyaya kaydedilmiş sipariş bilgilerini işleyip
levhaya yerleşmiş şekilde sonuç grafiğini göstermektedir.

Şekil 1 Sipariş dosyası

4
İsmail H. ŞANLITÜRK Fırat Üniversitesi Müh. Fak. Makine Mühendisliği - 2010

Şekil 2 Program çıktısı

5 SONUÇLAR VE YORUM
Yazılan program ……. A.Ş.’de kullanılan programla karşılaştırıldığında verimi çok
düşük kalmaktadır. Ticari programlarda toplam alana göre yerleştirme miktarının belirlenmesi
yerine, kalan alana maksimum sayıda levha yerleştirilmesi yapılmaktadır.
Ayrıca yazılan program yükseklik doğrultusundaki alanı verimli kullanırken, yatay
doğrultudaki alanı verimli kullanamamaktadır.

You might also like