# Kesikli olay simülasyonu
Sistem değişkenlerinin zaman içindeki değişimine göre simülasyonun kesikli ya da sürekli olduğu belirlenir.
Sistem durumunu belirleyen değişkenlerinin değerleri zaman içinde sürekli değişim gösteriyorsa (sıvının borudan akması ya da nüfus değişimi gibi) simülasyon sürekli olarak tanımlanır.
Sistem durumunu belirleyen değişkenlerin değerleri zamanın belirli noktalarında değişiyorsa (kuyruğun uzunluğu ya da müşterilerin bekleme zamanı istatistikleri yeni bir müşterinin varışı ya da ayrılışıyla değişir) simülasyon kesikli olarak tanımlanır. Kesikli sistem, durum değişkenlerinin zamanın farklı noktalarında değiştiği sistemdir.
Kesikli olay simülasyonu fiziksel bir sistemin matematiksel/mantıksal bir modelini kullanır ve simülasyonu yapılan zamanın belirli noktalarındaki durumsal değişimleri gösterir. Değişikliğin doğası ve oluştuğu an doğru tanımlamayı zorunlu kılar. Hizmet bekleyen müşteriler, malzeme envanter yönetimi ve askeri savaşlar kesikli olay simülasyonun tipik etki alanlarıdır.
Kesikli olay simülasyonu, bir sistemin çalışmasını zamanla gerçekleşen kesikli olaylar sıralaması olarak modeller. Her bir olay belirli bir anda meydana gelir ve sistem durumunda değişiklik yapar. Ardışık olaylar arasında sistem durumunda bir değişiklik olmayacağı varsayılır ki böylece simülasyon belirli bir zamanda doğrudan bir olaydan takip eden olaya atlayabilir.
Kesikli olay simülasyonunda, sistem operasyonu kronolojik olay basamakları olarak tanımlanır. Her olay bir anda gerçekleşir ve sistemde bir durum değişimini gösterir.
Kesikli olay simülasyonları her bir zaman dilimini simüle etmek zorunda değildir. Kesikli olay simülasyonunda simülasyonun durumu kesin bir anda meydana gelen olaya göre değişir ve bir sonraki olaya kadar aynı durumda kalır. Postanede bulunan müşterilerin durumu postaneye yeni bir müşteri girdiğinde ya da müşteri işini bitirip ayrıldığında değişir. Bu yönüyle kesikli olay simülasyonu, simülasyon süresinin zaman dilimlerine ayrılarak sistem durumunun her bir zaman diliminde meydana gelen aktivite setlerine göre güncellendiği, simülasyonun sürekli olarak sistem dinamiğini izlediği sürekli simülasyondan farklılık gösterir
Kesikli olay simülasyonunu sürdürmek için birçok mekanizma ortaya atılmıştır. Olay tabanlı, etkinlik tabanlı, süreç tabanlı ve üç evreli yaklaşım da bunların arasındadır. Yaklaşımlarından biri üç fazlı yaklaşım metodudur. Bu yaklaşıma göre, birinci faz bir sonraki kronolojik olaya atlamaktır. İkinci faz, ilgili zamanda meydana gelen koşulsuz tüm olayları yönetmektir (bunlar B-olayları olarak adlandırılır). Üçüncü faz ise ilgili zamanda meydana gelen tüm koşullu olayları yönetmektir (bunlar C-olayları olarak adlandırılır). Üç fazlı yaklaşım, olay tabanlı yaklaşımın bilgisayar kaynaklarının daha etkili kullanılabilmesini sağlamak için aynı anda meydana gelen olayların sıralandırıldığı bir ayrıştırmadır. Üç fazlı yaklaşım pek çok ticari simülasyon yazılım paketlerinde kullanılmaktadır ancak genellikle kullanıcının bakış açısından simülasyon yönteminin altında yatan özellikler gözükmez.


## Örnek.
Kesikli olay simülasyonun nasıl yapılacağını öğreten yaygın bir alıştırma bankada gişe hizmeti bekleyen müşteri kuyruğu modellemektir. Bu örnekte sistem öğeleri müşteri kuyruğu ve gişe görevlileridir. Sistem olayı müşterinin bankaya varışı ve ayrılışıdır (Gişe görevlisinin hizmet vermeye başlaması müşterinin varış-ayrılışının bir parçası olabilir). Olaylarla değişen sistem durumu; kuyrukta bekleyen müşteri sayısı (“0” dan “n”e bir tam sayı) ve gişe görevlisinin durumudur (meşgul ya da müsait). Modeli stokastik olarak karakterize eden değişkenler ise müşteriler arasındaki bankaya varış zamanları ve gişe görevlisinin hizmet süresidir.


## Kesikli olay simülasyonunun bileşenleri.
Sistem olayı meydana geldiğinde, sistem değişkenlerini ve sistem olayları meydana gelirken ne olup bittiğinin mantığını tanımlamaya ilave olarak kesikli olay simülasyonu aşağıdaki bileşenleri içerir:
"Sistem Durumu": Çalışılan sistemin dikkat çeken özelliklerini yakalayan değişkenler setidir.
Saat: Simülasyon o andaki zamanın izlediği yolu kayıt altında tutmalıdır. Ölçü birimi tasarlanan sistem için hangisi uygunsa o seçilir. Kesikli olay simülasyonlarında -gerçek zamanlı simülasyonların aksine- olaylar anlık olduğundan bir anda birinden diğerine atlanır. Saat, simülasyon ilerledikçe bir sonraki olayın başlangıç zamanına geçer.
Olay listesi: Simülasyon en az bir olay listesi sağlamalıdır. Olay listesi bazen yaklaşan olay listesi olarak da adlandırılır. Çünkü simüle edilen önceki olayın  sonucu olarak yaklaşan olayları listeler. Bir olay; başlangıç zamanına, olayın kendi performansını oluşturan bir tür koda ve –her zaman olmasa da- bir bitiş zamanına sahip olmalıdır. Kimi yaklaşımlarda, o andaki ve gelecekteki olaylar için ayrı listeler vardır. Olay listeleri olay başlangıç zamanına göre sıralanır. Genelde olaylar "bootstrapped"tir. Yani olaylar simülasyon ilerlerken dinamik olarak çizelgelenir. Örneğin; üstteki banka örneğinde, müşterinin varışı olayı t zamanında ve eğer müşteri kuyruğu boş ve veznedar boşta ise, sonraki olay olan müşterinin ayrılışı t+s zamanında gerçekleşecektir. Buradaki s hizmet süresidir.
Anlık olarak olaylar oluştuğunda, zaman içinde meydana gelen olaylar olay sıralaması olarak modellenir. Bazı simülasyonlarda her bir olayın başlangıç ve bitişi bir aralık olarak tanımlanabilir.
Yaklaşan olay seti tipik bir öncelik sırası olarak organize edilir ve olay zamanına göre ayrılır. Olay setine, olayların eklendiği sıra dikkate alınmaksızın kronolojik sıraya göre çıkarılır. Başta “binary tree” olmak üzere kesikli olay simülasyonu için birkaç genel maksat öncelik sırası algoritmasının etkili olduğu ispatlanmıştır. “Skip list”, ""calendar queues" "ve" "ladder queues"" diğer alternatifler olarak öne çıkmaktadır.
Rastsal sayı üreteçleri: Simülasyon sistem tasarımına da bağlı olarak çeşitli rastsal değişkenlerin atanmasına gerek duyar. Bu ise bir ya da daha çok sözderastsal sayı üreteci tarafından sağlanır.
İstatistikler: Simülasyon, genel olarak ilgilenilen durumu sayılara döken sistem istatistiklerini tutar. Banka örneğinde ilgilenilen, ortalama hizmet süresidir.
"Koşullu sonlandırma:" Olaylar "bootstrapped" olduğundan teorik olarak kesikli olay simülasyonu sonsuza dek çalışabilir. Bu yüzden tasarımcısı simülasyonun ne zaman sonlanacağına karar vermelidir. Bu seçenekler “t anında”, “n adet olay işlendikten sonra” ya da “X istatistiksel ölçüsü x değerine ulaştığında” gibi olabilir.


## Simülasyon motorunun mantığı.
Kesikli olay simülasyonu ana döngüsü aşağıdaki gibi olacaktır:


### Başlangıç.
  - Sonlandırma koşulunu "FALSE" olarak tanımla.
  - Sistem durum değişkenlerini tanımla.
  - Saati tanımla (çoğunlukla sıfır değerinde başlar).
  - Başlangıç olayı planla (örn: olay listesine birkaç başlangıç olayı koy).


### "Do-While" döngüsü.
Sonlandırma koşulu "FALSE" iken aşağıdakileri yap:
  - Saati bir sonraki olay zamanına getir.
  - Bir sonraki olayı yap ve olay listesinden çıkar.
  - İstatistikleri güncelle.


### Bitiş.
  - İstatistik raporunu oluştur.