clc;
clear;
%%
%Tüm hesaplamalar tek bir konteynar olduðu varsayýlarak yapýlacaktýr.
con=1;
%%
%Yerleþtirilecek kutularýn boyutlarý Excel'deki verilerden çekilir.
boyutlar=xlsread('verilerkutu.xlsx');
derinlik1=boyutlar(:,1)';
derinlik=boyutlar(:,1)';
genislik=boyutlar(:,2)';
genislik1=boyutlar(:,2)';
yukseklik=boyutlar(:,3)';
yukseklik1=boyutlar(:,3)';
%%
%Yerleþim yapýlacak konteynerýn boyutlarý Excel'deki verilerden çekilir.
kont_boyut=xlsread('verilerkont.xlsx');
kont_yukseklik=kont_boyut(1);
kont_genislik=kont_boyut(2);
kont_derinlik=kont_boyut(3);
%%
%Kutu sayýsý "a" deðiþkenine eþittir.
[a,b]=size(boyutlar);
%Kutular 1,2,...,a þekilnde numaralarýna göre sýralanýrlar.
kutular=1:a;
%Baþlangýçta paketlenmemiþ kutular kümesi tüm kutular kümesine eþittir.
%Kümenin her bir elemaný baþlangýçta 1'e eþittir.
paketlenmemis_kutular=ones(1,a);
%%
%Kutularýn koordinatlarý üç boyutlu bir matriste gösterilecektir.
koordinat=zeros(1,a,3);
%Paketlenmemiþ kutularýn boyutlarý bir baþka üç boyutlu matriste
%saklanacaktýr.
paketlenmemis_kutu_boyut=zeros(1,length(paketlenmemis_kutular), 3);
paketlenmemis_kutu_boyut(1,1:a,1)=(derinlik1);
paketlenmemis_kutu_boyut(1,1:a,2)=(genislik1);
paketlenmemis_kutu_boyut(1,1:a,3)=(yukseklik1);
%Kutu paketlendiðinde tüm boyutlarýný sýfýra eþitlenecektir.
%%
%Ýlk baþta yaratýlan katmanýn derinliði maksimum derinliðe sahip olan kutunun derinliðine eþittir.
[mevcut_katman_derinligi,k]=max(derinlik);
ilk_katman=mevcut_katman_derinligi;
%Baþlangýçta kalan boyutlarýn hepsi ilk boyutlara eþittir.
kalan_katman_derinligi=mevcut_katman_derinligi;
kalan_katman_yuksekligi=kont_yukseklik;
kalan_katman_genisligi=kont_genislik;
kalan_kont_derinligi=kont_derinlik;
%%
for i=1:a
%%
%Eðer konteynerda yeni bir katman için yeterli geniþlik varsa hesaplama
%yapýlýr. Aksi durumda hesaplamalar durdurulur.
if kalan_kont_derinligi>=-1
%Eðer paketlenmemiþ kutu varsa hesaplama yapýlýr. Aksi durumda hesaplamalar
%durdurulur.
if sum(paketlenmemis_kutular)>=0
[mevcut_katman_derinligi,k]=max(derinlik);
derinlik(k)=0;
%Ýlk kutunun t-yerleþtirilmesinden sonra konteynerýn kalan derinliði hesaplanýr.
kalan_kont_derinligi=kalan_kont_derinligi-mevcut_katman_derinligi;
%%
if i==1
koordinat(1,k,1:3)=[derinlik1(k),genislik1(k),yukseklik1(k)];
elseif i==3
koordinat(1,k,1:3)=[derinlik1(k)+ilk_katman,genislik1(k),yukseklik1(k)+yukseklik1(l)];
elseif i==4
koordinat(1,k,1:3)=[derinlik1(k)+ilk_katman+derinlik1(2),genislik1(k),yukseklik1(k)];
else
koordinat(1,k,1:3)=[derinlik1(k)+ilk_katman,genislik1(k),yukseklik1(k)];
end
paketlenmemis_kutu_boyut(1,k,1:3)=0;
paketlenmemis_kutular(k)=0;
%%
%Katman oluþturulduktan sonra diðer kutular da geniþlillerine seçilerek
%katmana yerleþitirilmeye baþlanýr.
[secilen_kutu_derinligi,l]=max(derinlik);
%Kutularýn yerleþiminde öncelik yandaki boþ hacmindir. Eðer katmandaki kutunun
%yanýndaki hacmi boþsa bir sonraki kutu bu hacme yerleþitirilebilir.
if kalan_katman_derinligi-secilen_kutu_derinligi>secilen_kutu_derinligi
koordinat(1,l,1:3)=[derinlik1(k)+derinlik1(l),genislik1(l),yukseklik1(l)];
paketlenmemis_kutu_boyut(1,l,1:3)=0;
paketlenmemis_kutular(l)=0;
kalan_katman_derinligi=kalan_katman_derinligi-secilen_kutu_derinligi;
kalan_katman_genisligi=kalan_katman_genisligi-genislik1(l);
kalan_katman_yuksekligi=kalan_katman_yuksekligi-yukseklik1(l);
derinlik(l)=0;
yukseklik(l)=0;
genislik(l)=0;
%Eðer kutunun yanndaki hacmi boþ deðilse sýra önündeki hacminin kontrolüne
%gelir. Önündeki hacminin boþ olmasý durumunda kutu bu boþluða
%yerleþtirilebilir.
elseif kalan_katman_genisligi>genislik1(l)
%%
if i==1
koordinat(1,l,1:3)=[derinlik1(l),genislik1(k)+genislik1(l),yukseklik1(l)];
else
koordinat(1,l,1:3)=[derinlik1(l)+ilk_katman,genislik1(k)+genislik1(l),yukseklik1(l)];
end
paketlenmemis_kutu_boyut(1,l,1:3)=0;
paketlenmemis_kutular(l)=0;
kalan_katman_derinligi=kalan_katman_derinligi-secilen_kutu_derinligi;
kalan_katman_genisligi=kalan_katman_genisligi-genislik1(l);
kalan_katman_yuksekligi=kalan_katman_yuksekligi-yukseklik1(l);
derinlik(l)=0;
yukseklik(l)=0;
genislik(l)=0;
%Kutunun önündeki hacminin de boþ olmmasý durumunda sýra üst hacmine gelir.
%Üst hacimde yeterli boþ alanýn olmasý durumunda kutu buraya yerleþtirilebilir.
elseif kalan_katman_yuksekligi>yukseklik1(l)
koordinat(1,l,1:3)=[derinlik1(l),genislik1(l),yukseklik1(k)+yukseklik1(l)];
paketlenmemis_kutu_boyut(1,l,1:3)=0;
paketlenmemis_kutular(l)=0;
kalan_katman_derinligi=kalan_katman_derinligi-secilen_kutu_derinligi;
kalan_katman_genisligi=kalan_katman_genisligi-genislik1(l);
kalan_katman_yuksekligi=kalan_katman_yuksekligi-yukseklik1(l);
derinlik(l)=0;
yukseklik(l)=0;
genislik(l)=0;
end
end
end
end