Stok Seviyeleri Kontrol Yöntemleri

Tedarik zincirinde stok yönetimi için genel olarak iki yöntem vardır. Merkezi stok kontrolünde, merkezi bir karar verici vardır ve bu karar merkezi tedarik zinciri boyunca maliyetleri minimize edecek stok yönetim politikasını belirlemekle görevlidir. Bu nedenle merkezi kontrol tedarik zinciri boyunca, zincire katılan bütün elemanlar arasında koordinasyon ve iletişim gerektirir.

İkinci bir yöntem olan yerel stok kontrolün ise genel olarak daha fazla tercih edilmektedir, özellikle kompleks organizasyonlara sahip tedarik zincirlerinde. Bunun nedeni her organizasyonun kendi yerel seviyesinde stok yönetimi için çok büyük bilgi ve veri akışına sahip olmasıdır. Bunun yanında farklı karakteristik özelliklerde eklenince merkezi stok kontrolü için durum içinden çıkılmaz bir hal almaktadır.

Bunu bir holdinge bağlı şirketler olarak düşünebiliriz. Elektronik eşya ve giyim alanında faaliyet gösteren iki farklı şirketin holdinge bağlı merkezi bir stok kontrolü içinde olması beklenemez. Her şirket kendi yerel stoklarını denetler ve stok seviyelerine göre kendi tedarikçilerine sipariş verirler.

Stok yönetimi, stok seviyeleri olarak ele alındığında üç farklı yönteme ayrılmaktadır. Bu yöntemler periyodik gözden geçirme esasına dayalı stok kontrol sistemi, sürekli gözden geçirme esasına dayalı stok kontrol sistemi ve hibrid stok kontrol sistemidir.

Periyodik Gözden Geçirme Esasına Dayalı Stok Kontrol Sistemi

Bu yöntemde stokların kontrol edileceği bir zaman aralığı mevcuttur. Bu belirli “t” zaman aralıklarıyla stok seviyesi kontrol edilmektedir. Her kontrol döneminde stok seviyesinin önceden işletme tarafından belirlenen “S” seviyesine yükselmesi için gerekli olan stok miktarı “Q” hesaplanır ve “Q” adet sipariş verilir.

Periyodik Gözden Geçirme Esasına Dayalı Stok Kontrol Sistemi

Sürekli Gözden Geçirme Esasına Dayalı Stok Kontrol Sistemi

Sürekli gözden geçirme yönteminde stok seviyesi önceden belirlenmiş bir noktanın-yeniden sipariş noktası- “R” altına düştüğünde, yine önceden belirlenmiş bir miktarda “Q” sipariş verilir. En uygun kullanımı iki kutu uygulamasıdır. Buna göre stok iki kutuda bulunur ve birinci kutu bittiğinde yeniden sipariş verilir. Sipariş gelene kadar ikinci kutudaki stok tüketilir.

Sürekli Gözden Geçirme Esasına Dayalı Stok Kontrol Sistemi

 

Hibrid Stok Kontrol Sistemi

Bu sistemde ise her bir “t” zaman aralığında, stok seviyesi yeniden sipariş noktasının “R” altına düşerse, stok seviyesini “S” seviyesine çıkaracak “Q” miktar sipariş verilir. Anlaşılacağı üzere periyodik ile sürekli gözden geçirme yöntemlerinin birlikte kullanıldığı bir sistemdir. (s,S) olarak bilinir.

 

Sürekli Gözden Geçirme Esasına Dayalı Stok Kontrol Sistemi ile İlgili Örnek Benzetim Algoritması

Aşağıdaki programda;

Stok sisteminin çalıştırılacağı hafta sayısı,
Q değeri için başlangıç miktarı (Q)
Q değeri için bitiş miktarı (Qmax)
R değeri için başlangıç miktarı(R)
R değeri için bitiş miktarı(Rmax)
Q ve R başlangıç değerlerinin kaç birim artacağını gösteren Delta miktarı girilir.

Girilen değerlere göre yapılan hesaplamalar sonucu minimum maliyete sahip Q ve R değerleri belirlenerek stok seviyesi bu değerlere göre ayarlanır. Böylece maliyet minimize edilmiş olur.

Programda sembolik değerler kullanılmıştır. Bu değerler istenildiği takdirde kodlar düzenlenerek değiştirilebilir ya da kullanıcı tarafından girmesi istenilebilir. Bunlar;

Temin Süresi: 2
Sipariş Maliyeti: 50 TL
Elde Bulundurma Maliyeti: 0.20 TL
Elde Bulundurmama Maliyeti – Kayıp Satış: 100 TL
Talep Dağılımı: 80 ile 140 arasında düzgün(Uniform) dağılım ( a+((b-a)*random) )

Kayıp Satışlar ile Birlikte Stok Kontrol Benzetimi

package asd;
import java.util.*;
public class stokkontrolyeni {
 
/**
* @author ilkerguven.com
*/
public static void main(String[] args) {
Scanner oku = new Scanner(System.in);
 
System.out.println("Programın çalıştırılacağı hafta sayısını giriniz.");
int n=oku.nextInt();
 
System.out.println("Minumum sipariş miktarını giriniz(Q).");
int q=oku.nextInt();
int z=q;
System.out.println("Maksimum sipariş miktarını giriniz(Qmax).");
int qmax=oku.nextInt();
System.out.println("Minumum yeniden sipariş noktasını giriniz(R).");
int r=oku.nextInt();
int w=r;
System.out.println("Maksimum yeniden sipariş noktasını giriniz(Rmax).");
int rmax=oku.nextInt();
System.out.println("Değerlerin artış miktarını(Delta) giriniz.");
int delta=oku.nextInt();
 
 
int sayac=0,sayac1=1;
int kayıpsatis=100;double eldebulundurma=0.20;
int b[]=new int[99]; // Başlangıç env pozisyonu
int c[]=new int[99]; // Başlangıç envanteri
String d[]=new String [99]; // GelenSipariş
int e[]=new int[99]; // Gelen birim
int f[]=new int[99]; // Talep
int g[]=new int[99]; // Son envanter
int h[]=new int[99]; // Kayıp Satış
String ı[]=new String [99]; // Sipariş verildi mi?
int j[]=new int[99]; // Bitiş env pozisyonu
int k[]=new int[99]; // Tedarik Süresi
float l[]=new float[99]; //Elde Bulundurma maliyeti
float m[]=new float[99]; // Sipariş maliyeti
float ni[]=new float[99]; // Elde bulundurmama maliyeti
float o[]=new float[99]; // Toplam Maliyet
int a1=0,a2=0; // toplam değeri sayısını bulmak için kullandığım çarpanlar ve z1 sonuç
 
for(q=q;q<=qmax;q+=delta){a1+=1;}//for döngüsünün delta değeri için kaç kere döneceğinin hesabı
for(r=r;r<=rmax;r+=delta){a2+=1;}//for döngüsünün delta değeri için kaç kere döneceğinin hesabı
q=z;r=w; // değişkenleri sıfırladım
int qdizi[]=new int [a1*a2+1]; // her q ve r değerinin 
int rdizi[]=new int [a1*a2+1]; // saklanacağı diziler
float p[]=new float[a1*a2+1]; // Genel Toplam Maliyet
 
System.out.println("Toplam "+a1*a2+" adet maliyet bulunacaktır.");
 
System.out.println("A	"+"B	"+"C	"+"D	"+"E	"+"F	"+"G	"+"H	"+"I	"+"J	"+"K	"+"L	"+"M	"+"N	"+"O	");
 
for(r=r;r<=rmax;r=r+delta){
q=z;
for(q=q;q<=qmax;q+=delta ){
System.out.println(" ");
System.out.println("Q değeri: "+q+" R değeri: "+r+" için yapılan hesaplamalar;");
qdizi[sayac1]=q;
rdizi[sayac1]=r;
sayac1+=1;
for(int i=1;i<=n;i++){ 
 
b[1]=q; c[1]=q; d[1]="HAYIR"; d[2]="HAYIR"; d[3]="HAYIR";  
 
if(d[i].equals("HAYIR")) e[i]=0; 
else e[i]=q;
f[i]=(int)(80+(140-80*Math.random()));
 
if(c[i]+e[i]-f[i]>=0) g[i]=c[i]+e[i]-f[i];
else g[i]=0;
 
if(f[i]-(c[i]+e[i])>0) h[i]=f[i]-(c[i]+e[i]);
else h[i]=0;
 
if(b[i]-f[i]<=r) ı[i]="EVET";
else ı[i]="HAYIR";
 
if(f[i]>c[i] & ı[i].equals("EVET") & e[i]==0) j[i]=b[i]-c[i]+q;
else if(ı[i].equals("EVET")) j[i]=b[i]-f[i]+q;
else j[i]=b[i]-f[i];
 
if(ı[i].equals("EVET")) k[i]=2;
else k[i]=0;
 
l[i]=(float) (eldebulundurma*g[i]);
 
if(ı[i].equals("EVET")) m[i]=50;
else m[i]=0;
 
ni[i]=h[i]*kayıpsatis;
 
o[i]=l[i]+m[i]+ni[i];
 
if(i+1<=n){ b[i+1]=j[i]; c[i+1]=g[i];  }
 
if(i+3<=n){
if(ı[i].equals("EVET")) d[i+3]="EVET";
else d[i+3]="HAYIR";}
 
System.out.println(i+"	"+b[i]+"	"+c[i]+"	"+d[i]+"	"+e[i]+"	"+f[i]+"	"+g[i]+"	"+h[i]+"	"+ı[i]+"	"+j[i]+"	"+k[i]+"	"+l[i]+"	"+m[i]+"	"+ni[i]+"	"+o[i]+"	");
 
if(n==i){
sayac=sayac+1;
for(int x=1;x<=i;x++){
p[sayac]=o[x]+p[sayac];
}
System.out.println(sayac+". Toplam maliyet: "+p[sayac]);
}
 
}
}
}
 
float minp = p[1];
int sira=0;
 
for(int t=1; t<p.length; t++)
{
if(minp > p[t])
{
minp = p[t];
sira=t;
}
}
 
System.out.println("\nMinumum maaliyet: "+minp+" TL(Sıra:"+sira+"). Q değeri: "+qdizi[sira]+" R değeri: "+rdizi[sira]);
}
 
}

 

İlker GÜVEN

Posted in Endüstri Mühendisliği and tagged , , , , , , , , , , , , , , , , , , .

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.

Güvenlik Sorusu *

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>