Ünite 5: Optimizasyon-Yönelimli Karar Destek Sistemleri

Giriş

Optimizasyon-yönelimli karar destek sistemleri (OKDS), bir problemin farklı koşullar altında en iyi (optimal) çözümünü incelemek isteyen karar vericiler için yeri doldurulamayacak çok güçlü bir araçtır. Karar modellerinin temsil ettiği problemin parametrelerindeki değişikliklerin en iyi çözüme yansımalarını görmek, değişik modellerle probleme yaklaşmak, birden çok amaç olduğunda amaçlar arasındaki ödünleşmeler başta olmak üzere, problemi değişik bakış açılarından incelemek, özellikle can alıcı ve kritik problemler için her karar vericinin uygulamak isteyeceği çalışmalar arasındadır.

Yapay Zekâ

İnsan zekâsı düzeyinde problem çözme yeteneğine sahip olan bilgisayarlı sistemlerin geliştirilmesi çabalarını karşılayan bir terimdir.

Yöneylem Araştırması

1930’larda başlayan ve ikinci dünya savaşı yıllarında gelişen, İngilizlerin askeri projelerinde kullanılan disiplinler arası bilimsel yaklaşımları ve ilkeleri içeren yaklaşımların disiplinidir. Savaş sonrası yöneylem araştırması, endüstri, işletmecilik, devlet ve askeri kurumlar gibi insan, makine, malzeme ve para içeren büyük sistemlerin yönetiminde karşılaşılan karmaşık problemlerin çözülmesinde bilimsel yöntemlerin uygulanması olarak tanımlanmıştır.

Yönetim Bilimi

Yöneylem araştırmasının bir başka adı olup, yönetsel problemlerin çözümünde bilimsel yöntemlerin uygulanması olarak ifade edilebilir.

Olurlu ve Olurlu Olmayan Çözümler

Problemin kısıtlarını sağlayan ve sağlamayan çözümler için kullanılır. Bir örnekle açıklamak gerekirse, sırt çantası (knapsack) probleminden yola çıkabiliriz. Sırt çantası probleminde, bir yatırımcının yapabileceği yatırım alternatiflerinden yatırım yapmak üzere yaptığı seçimlerin toplam yatırım değerinin yatırım bütçesini aşmaması gerekir. Bu koşulu sağlayan çözümlere olurlu çözüm denir. Yapılan seçimlerin bütçeyi aşması halinde ilgili çözüm olurlu değildir.

Kırılgan ve Esnek Kısıtlar

Kırılgan kısıtlar (hard constraint) aşılması halinde olurlu olmayan çözümlere neden olurlar. Esnek kısıtlar (soft constraint) ise sağlanması arzu edilen ancak şart olmayan kısıtlardır.

Deterministik Arama

Aynı girdi değerleri ve başlangıç koşulları ile her zaman aynı çözümü döndüren arama yöntemleri ve algoritmalar için kullanılır.

Yerel ve Bütünsel Eniyi (Optimum)

Yerel en iyi tüm komşu çözümlerinden daha iyi olan çözümlerdir. Bütünsel (global) en iyi ise çözüm uzayındaki tüm diğer çözümlerden daha iyi olan çözümlerdir.

Tam Sayımlama

Bir problemin çözüm uzayındaki tüm çözümlerin tek tek incelenerek eniyi çözümün bulunması sürecine verilen isimdir. Küçük problemler için uygun bir yaklaşım olabilir. Bazı tamsayılı ve kombinatoryal problemlerin çözüm uzayı üstel (exponential) olarak artmaktadır. Bu problemlerin tam sayımlama (complete enumeration veya exhaustive search) ile çözülmesi olanaksızdır. Örneğin, bir gezgin satıcı problemini ele alalım. Bir şehirden başlayan ve tüm şehirleri tam olarak bir kez ziyaret eden ve bunu en az mesafe kat ederek başarmak isteyen bir gezgin satıcının 81 ilimiz için 81 faktöriyel çözümü olacaktır. Tüm illerin doğrudan erişilebildiğini kabul edersek bu çözüm sayısı yaklaşık 6×10120 olarak karşımıza çıkar. Saniyede bir trilyon çözümün toplam mesafesini hesaplayan bir bilgisayarımız olsa, çözüm süresi 2×10101 yıl olacaktır. Yeryüzündeki toplam su miktarının 1020 litre olduğunu düşünerek çözüm süresinin ne anlama geldiğini daha iyi anlayabilirsiniz.

Kısmi Sayımlama

Tüm çözüm uzayını taramak zorunda kalmadan, yalnızca bir kısmını tarayarak çözüm bulan yaklaşımlardır. Bunların en bilineni dal-sınır (branch-andbound) yöntemidir. Çözüm uzayını alt parçalara ayırıp, elde edilen çözüm bilgilerinden yararlanarak bazı alt problemlerin incelenmesine gerek duymaz. En kötü durumda, performansı tam sayımlamaya eşittir.

Sezgisel Yöntemler (Heuristics)

Tam sayımlama ve kısmi sayımlamanın kabul edilebilir bir süre içinde çözüm bulamadığı problemlere uygulanan ve en iyi çözümü bulamamakla beraber yüksek-kalitede yani en iyiye yakınlığı tatmin edici düzeyde çözümler döndüren yaklaşımlardır. Gezgin satıcı problemi için kullanılan en yakın komşu sezgiseli en iyi çözüme ortalama performansta %85 oranında yakınsayan basit sezgisel yöntemlere örnek olarak verilebilir. Daha genel amaçlı olan ve farklı problemlerde kullanılabilme özelliğine sahip sezgisel yöntemler meta-sezgisel yöntemler olarak anılmaktadır. Bunların en önemlileri; Evrimsel Algoritmalar, Genetik Programlama, Tabu Arama, Tavlama Benzetimi ve Karınca Kolonileri Optimizasyonu’dur.

Çözüm-Oluşturan Sezgisel Yöntemler (Constructive Heuristics)

Her adımda çözümün bir parçasını yerleştiren ve bir seferde oluşturduğu çözüm, çözüm-oluşturan sezgisel yöntemin bulduğu tek çözümdür. Yani çözümü iyileştirme aşaması yoktur, ancak çözüm oluşturulurken ortaya iyi bir çözüm çıkması gözetilir. Gezgin satıcı problemine uygulanan en yakın komşu sezgiseli çözüm-oluşturan bir sezgiseldir.

Çözüm-İyileştiren Sezgisel Yöntemler (Improvement Heuristics)

Bir başlangıç olurlu çözümden başlayan, her adımda daha iyi çözüme giden ve bu yönleriyle yerel arama sezgiseli olarak da adlandırılan yaklaşımlardır. Optimizasyonyönelimli karar destek sistemleri, problemin özelliklerine ve karar vericinin beklentilerine uygun olan yöntem ve yaklaşımları içermelidir. Yukarıdaki yöntemlerin her biri belirli koşullar altında önemli katkılar sağlayabilirler. Hangisinin kullanılacağı karar verici ve geliştiricinin birlikte değerlendirmeleri gereken önemli bir konudur. Bir karar probleminin farklı yöntemlerle çözümlerinin incelenmesi büyük, ölçekli ve meta-sezgisel yöntemlerle ele alınan problemler için ayrı bir önem taşımaktadır. Kararın verilmesi için uygun olan süre içinde karara yönelik bilgileri mümkünse optimum çözümlere, değilse optimuma yaklaştıran karar destek sistemleri karar vericiler için önemli katkılar sağlayacaktır.

Optimizasyon Ve Optimum (En İyi) Çözüm

Optimizasyon, bir problem için belirlenmiş bir ya da bir kaç amaç doğrultusunda, erişilebilir çözümler arasından diğer hiç bir çözümden daha kötü olmayan çözüm veya çözümlerin belirlenmesi çabalarının bütününü kapsar. Yöneylem araştırması disiplini optimizasyonu daha sınırlı bir anlamda kullanmaktadır. Bu disiplinin genel kabul gören bakışı ışığında optimizasyon bulduğu çözümün en iyi çözüm olduğunu garanti eden yöntemlere yapılan özel bir adlandırmadır. Bazı gerçeklerin fark edilmesi optimizasyona daha geniş bir anlam ve misyon yüklemiştir. Gerçek-yaşam problemleri açısından, optimizasyona en iyi çözümü garanti eden yöntemler bağlamında bakıldığında dikkate değer sınırlamalar vardır. Bunlardan bazıları aşağıda ifade edilmiştir.

  • Klasik optimizasyon matematiksel modellemeyi gerektirir ve modelleme zaman alıcıdır,
  • Modellerin güncel parametrelerle kullanılması zorunluluğu bazen aşılması güç bir engel olabilmektedir,
  • Bazı yerel eniyileme yöntemleri türevlenebilirlik ve dışbükey (convex) çözüm uzayına sahip olma gibi bazı koşulların yerine gelmesine ihtiyaç duymaktadırlar,
  • Karar problemlerinin önemli bir kısmı tam sayılı ve kombinatoriyal problemler olup, dış bükeylik ve türevlenebilirlik özelliklerinin sağladığı ayrıcalıklara sahip değildirler,
  • Birden fazla çelişen amaç olduğunda, karar vericilerin doğrudan veya dolaylı etkileşimi optimizasyon için şarttır,
  • Bazen küçük, genellikle de orta veya büyük boyutlu problemleri kabul edilebilir zaman pencerelerinde çözebilecek algoritmalara sahip az sayıda problem vardır.

Bu sınırlamaların her birinde umut verici ve kullanımını yüreklendiren gelişmeler de yok değildir. Bu gelişmelerin bazıları aşağıda ifade edilmiştir.

  • Matematiksel modellerin otomatik olarak kurulabilmesi konusundaki gelişmeler,
  • İşletme analitiği, veri ambarı ve veri marketi yaklaşımlarının sunduğu betimsel ve kestirimci bilgilerden yararlanarak parametrelerin belirlenmesi konusundaki gelişmeler,
  • Türev ve dışbükeylik gerektirmeyen stokastik sezgisel yöntemlerin yaygınlaşması,
  • Tam sayılı ve kombinatoryel problemlere özel modelleme ve çözümleme yaklaşımlarının ortaya çıkması,
  • Optimizasyon-yönelimli karar destek sistemlerinin karşılıklı etkileşimi desteklemesi ile insan-deneyiminin çözüme katkısının önünün açılması,
  • Değişik boyutlardaki problemlerin stokastik sezgisel yöntemlerle çözülmesinde elde edilen başarılar.

Optimizasyon yöntemleri, karar verici açısından bakıldığında en iyiyi-garanti-eden yöntemler ve en iyiyiarayan yöntemler olarak ikiye ayrılabilir. Yaşam ölçeğindeki problemlerin çok azında en iyiyi-garanti-eden yöntemlerin kullanılabildiği bilinmektedir. Orta ve büyük ölçekli problemlerde stokastik arama veya metasezgisel yöntemlere başvurmak kaçınılmaz görünmektedir. Bu durumda, söz konusu yöntemlerin kullanımına yönelik uzmanlık da elde edilecek sonuca yansımaktadır. Karar vericiler, gerçek en iyinin ne olduğunu bilmeden karara varmak durumunda kalmaktadırlar. Birden fazla stokastik veya metasezgisel yöntemle aynı probleme yaklaşmak, mevcut karar problemi hakkında karar vericilere farklı bir ışık tutmaktadır. Optimizasyon-yönelimli karar destek sistemlerine gereksinim olduğunun en önemli göstergeleri problem karmaşıklığının boyutları olan karar değişkeni veya alternatif çözüm sayısı, amaç sayısı ve yapısal veya parametrik belirsizliklerdir.

Karar Analitiği

Karar analitiği, işletme analitiğinin en üst basamağında yer alır. Bunun üç yönlü anlamı vardır.

  1. Rekabet gücüne katkısı: Bunlardan ilki yarattığı rekabet avantajı açısından ürettiği bilgilerin diğer analizlerden daha etkili olmasıdır. Bir kararın farklı senaryolara göre sonucunun hangi koşullar altında en iyi çözüme göre nerede konumlandığını görmek, modele yansıtılamayan diğer faktörler yönüyle de değerlendirme yapabilmek, karar kalitesi ve işletmecilik yeteneğine son derece olumlu yansımaktadır.
  2. Karar problemlerinin karmaşıklığı: Karar analitiğinin en üst basamakta yer almasının bir diğer anlamı aslında bu tür analizlerin karmaşıklığıyla da yakından ilgilidir. Otomasyona uygun olmayan, karar vericinin yakın etkileşimini gerektiren analizler bu düzeyde yoğunlaşmıştır. Çözümlenmesi güç bazen imkânsız problemlerin sezgiler veya sezgisel yöntemlerle ele alınmasını da gerektiren problemler karar analitiğinin konusunu oluşturmaktadır.
  3. Betimsel ve kestirimci analitiğin katkıları: Karar analitiğinin matematiksel ve benzetim modelleri, sezgisel yöntemler ve algoritmaları ancak kullandıkları veri, bilgi ve parametrelerin hassasiyeti, doğruluğu ve tamlığı oranında etkili olabilir. Betimsel analitik, işletme veri tabanlarından yararlanarak söz konusu veri, bilgi ve parametreleri tedarik etmektedir. Bazı modeller ise tahmin ve kestirim değerlerinden yararlanmaktadır. Kestirimci analitik bu noktada karar analitiğinin gereksinim duyduğu parametrelere ilişkin kestirim değerlerini (beklenen talep, olasılık dağılımı vb.) sunarak sürece katkı sağlar. Karar analitiğinin başarısı betimsel ve kestirimci analitikte gelinen düzeyle yakından ilgilidir.

Karar analitiğinin en üst düzeyde prestijli konumu, yanında aşılması gereken güçlükleri de beraberinde getirmektedir. Karar analitiğinin gerçekleşmesi ancak aşağıdaki güçlüklerin aşılmasıyla mümkün olabilir:

  1. Optimizasyon problemlerinin modellenmesinde karşılaşılan güçlükler,
  2. Modellerin çözülmesinde karşılaşılan güçlükler,
  3. Model için gerekli verilerin bulunması ve modelle ilişkilendirilmesinde karşılaşılan güçlükler,
  4. Modellerin manipülasyonunun analitik bir çevikliği olmaması,
  5. Karar vericiyi analitikle buluşturacak etkili sistemlerin yokluğu.

Optimizasyon-Yönelimli Karar Destek Sisteminin Tasarımı Ve Geliştirilmesi

Bir OKDS’nin tasarımı, ele alınan problemin incelenmesi, modelinin kurulması, model parametrelerinin düzenlenmesi, modelle buluşturulması, modelin ve parametrelerinin güncellenmesi, modelin çözülmesi, çözümün karar vericiye sunulması, karar vericinin farklı model ve çözücülerle çalışabilmesi gibi bir dizi sorunun yanıtının verilmesini gerektirir. Bu soruların yanıtları OKDS geliştirirken kullanılacak ortamın özellikleriyle birlikte de düşünülmelidir. Ortamın sunduğu üstünlükler tasarıma olumlu yansıyacağı gibi, sınırlamaları da yine bu aşamada göz önüne alınmış olmalıdır.Matematiksel modellerin geliştirilmesine olan yatkınlığı, modellerin çözümünü destekleyen Çözücü (Solver) eklentisi, Çözücü’nün sunduğu doğrusal modellere yönelik Simpleks algoritması, doğrusal olmayan programlar için sunduğu General Reduced Gradient algoritması ve hemen her tür model için kullanılabilecek olan evrimsel algoritma desteği, makrolarla hızlandırılmış bir Visual Basic for Applications nesne tabanlı programlama desteği, ActiveX denetim araçlarının sunduğu arayüz bileşenleri model yönetimi aracı olarak Excel VBA’nın sunduğu olanakların ilk akla gelenleridir. İşlem tablolarının esasen veri yönetimi için tasarlandığı da düşünüldüğünde, modele gerekli bilgilerin temini ve hesaplanmasında Excel VBA’nın sunacağı olanaklar birçok karar verici ve kullanıcının beklediğinin çok çok üzerindedir.

Karar Modelinin Kurulması ve Çözümü

Problemin karar değişkenleri her bir üründen üretilecek miktarlardır. Kısıtları ise bir adet Emek (veya işgücü) kısıtı, Malzeme adet kısıtı ve her bir ürün için maksimum satış miktarı olmak üzere on iki adet (Satis) kısıtıdır. Amaç fonksiyonu ise her birinin birim kârları ile üretim miktarlarının çarpımından oluşacaktır. Karar vericinin model için seçeceği ürünlerin sayısı değişebileceğinden yapılması gereken, ürün bilgileri için sayfada açık uçlu bir alan ayrılmasıdır. (Şekil 5.3,sayfa118, şekil 5.4, sayfa 119).

Karar Modelinin Çözümünün Programlanması: Çözücü Makrosu Oluşturma

Bu aşamaya kadar yaptıklarımızın benzerlerini daha önce yapmış olmalısınız. Model sayfasındaki ürünlerin her değişiminde Çözücü ekranlarından kurtulmak için Modeli çözmek için yaptığımız işlemleri bir Makro içine kaydedeceğiz. Böylece yeni bir çözüme gereksinim duyulduğunda makroyu çalıştırmamız yeterli olacaktır. Makro kaydetme ve VBA editörüne ilişkin programlama bileşenleri Excel şeridinin Geliştirici (Developer) sekmesinde yer alırlar. Eğer böyle bir sekme kullandığınız Excel’de yer almıyorsa bunu Excel Seçenekleri’nin içindeki Şeridi Özelleştir bileşeninden yapabilirsiniz (Şekil 5.6, sayfa 120). Bir Çözücü makrosu kaydetmeden önce, VBA editöründe Tools (Araçlar) ve References (Başvurular) seçeneğinden açılan listede Çözücüyü (Solver) görmeli ve işaretli değilse aktif hale getirmek için işaret kutusunu kullanmalısınız (Şekil 5.6). Eğer bunu yapmazsanız makronuz kaydedilse bile çalıştırmanız halinde Sub Function tanımsızdır uyarısı alacaksınız. VB editöründen Tools › References › Solver (Çözücü) işaretlemesini yaptıysanız bir Çözücü makrosu kaydedip kullanmaya hazırsınız demektir. Bir Çözücü makrosu kaydetmek, Çözücü ile modelin en iyi çözümünü bulmak için izlediğiniz adımları makronun kaydı anında tekrarlamanızdan ibarettir.

Çözücü Makrosunun Kaydedilmesi

Model sayfasının üzerinde iken Geliştirici sekmesinin Kod seçenekler grubunda bulunan Makro Kaydet düğmesine tıklayınız (Şekil 5.8, sayfa 121). Bu sizi Şekil 5.9’da (sayfa 122) görünen ekrandaki Aç Doldur menüsüne yönlendirecektir. Burada makronuza bir isim vermelisiniz. Makronun işlevi ile uyumlu bir isim olmalıdır. Burada Benim Makrom ismini kullanalım. Dilerseniz kısa yol tuşları da kullanabilirsiniz ancak makro konusunda bir düzeye gelmeden kısa yol tuşları kullanımı tercih edilmemelidir. Aynı kısa yol tuşları başka sistem kısa yol tuşları ile karışabilir. Makronun saklanacağı yer konusunda Bu Çalışma Kitabı seçeneği ile çalışmanız önerilir. Şekil 5.9’da (sayfa 122) göreceğiniz Tamam düğmesi ile Excel üzerinde yaptığınız işlemler makro kaydına girecektir. Bu yüzden makro kaydı esnasında neler yapacağınızı önceden prova etmeniz uygun olacaktır. Bu modelin en iyi çözümünü ararken uyguladığımız adımları aynen uygulamamız gerekiyor. Eğer makro anında Çözücünün Aç-Doldur ekranında bazı ifadeler yer alıyorsa bunlar Çözücüde daha önce çözdüğünüz bir probleme aittir. O anki probleme ait olsalar dahi bunları var kabul etmeyiniz, Tümünü Sıfırla ile menüyü boşaltınız ve işlemlere öyle devam ediniz. Makro kaydet anında Tümünü Sıfırla işlemini yapmanız da kaydedilen ve kodlanan işlemler arasına girecektir. Bu istediğimiz bir şeydir. İstemediğimiz halde makro kaydına giren kodları kayıt bittikten sonra temizleme ve ayıklama olanağımız saklıdır, bunu dilediğimiz zaman yapabiliriz. Çözücü işlemini bitirdiğinde Makro Kaydet düğmesini kullanarak kayıttan çıkınız. Şu anda göremeseniz bile bir makronuz olduğunu bilmelisiniz. Makronuzu görmek için VB Editörüne geçmelisiniz. VB Editörüne gitmek için Geliştirici sekmesinden Visual Basic düğmesini veya Alt+F11 tuşlarını kullanınız. Açtığınızda standart olarak görünen Project Explorer (Proje Gezgini) penceresinden hem çalışma sayfanızı hem makrolarınızın yer aldığı modül veya modüllerinizi görebilirsiniz. Makronuz bu modüllerden birinin içindedir. İlk defa kullanıyorsanız zaten sadece bir adet modül göreceksiniz. Bu size Şekil 5.10’daki (sayfa 123) kodu da görüntüleyecektir. Kod satırı 1, 2, 3 makro kaydetmenin standart satırlarıdır. Kod satırı 4 ise Çözücü Aç-Doldur menüsündeki Tümünü Sıfırla düğmesini kullanmanızın karşılığıdır. Karşılıklı etkileşimli olarak yaptığınız model çözme işlemlerinizin birbirini etkilemesini engeller. Kod satırı 5 Çözücünün Aç-Doldur menüsündeki bilgilerden bir kısmını içermektedir. Bu satırı şöyle okumalıyız: C12 hücresinde amaç fonksiyonunun formülü yer almaktadır. Amaç fonksiyonu MaxMinVal=1 dizisinin ilk bileşeni olan e nbüyükleme (maximization) yapılıdır. Sabit değer aranmadığı için ValueOf parametresi 0’dır. Değişken hücreler C11:G11 aralığındaki hücrelerdir. Çözücü türü olarak açılır listede ikinci sıradaki bileşen olan Engine:=2 tercih edilmiştir. Bu çözücü türü Simpleks Algoritmasını kullandığı için tanımı EngineDesc:= “Simplex LP” olarak verilmiştir. Kod satırı 5’in mevcut halinde bazı değişiklikler yapmamız gerekiyor. C12 hücresinin adını Toplam_Kar olarak tanımlamıştık. Bu adı yerine koymayı tercih edeceğiz. Değişken hücrelerin adresini içeren ByChange parametresinin yanına Miktar yazalım. Kod satırı 6 işgücü kısıtını ifade etmektedir. “$C$13”, kısıtın sol tarafının formülünün hücre adresidir. Bunu da adı olan Toplam_Emek ile değiştirelim. Relation:=1 açılır kısıt türleri listesinin birinci bileşeni olan (?) yani küçük eşittir türü bir kısıt ilişkisine sahip olduğunu göstermektedir. FormulaText:=”Mevcut_Emek_Saati” ise kısıtın sağ tarafını ifade etmektedir. Benzer açıklama Kod satırı 7, 8 ve 9 için de geçerlidir. Ancak kod satırı 8 ve 9’da açık alan adresi yerine değişken hücrelerin adı olan Miktar kullanımı uygun olacaktır. Kod satırı 9 diğerlerinden farklı olarak 4’ncü kısıt türü olan değişkenlerin yalnızca tamsayı değer almasını sağlayan bir kısıt olduğunu göstermektedir. Kod satırları 5, 10 ve 11 birebir aynıdırlar. Bu, makronun yapılan işlemlerin ve atılan adımların ne zaman anlamlı, ne zaman anlamsız olduğunu anlamamasındandır. Bunlardan yalnızca biri bırakılmalı, diğer ikisi silinmelidir. Silinmemeleri herhangi bir problem yaratmaz ancak kodun okunurluğunu olumsuz etkileyecektir. Kod satırı 12 Çözücünün Aç-Doldur menüsündeki Çöz (Solve) düğmesinin işlevini kod içinde yerine getirmektedir. Kod satırı 13 makronun tamamlandığını ifade eden standart satırdır. Benim Makrom isimli makroda önerilen değişikler yapıldığında karşımıza daha okunaklı bir makro çıkacaktır (Şekil 5.11, sayfa 124). Şekil 5.11’e baktığınızda Solver Solve ifadesinin yanında True ibaresini göreceksiniz. Bu makronuzun bitiminde Çözücü tarafında karşınıza çıkarılan Aç-Seç menüsünü onaylamanız anlamına gelir. True yazdıktan sonra artık Çözücü bu Aç-Seç menüyü size göstermeyecektir (Şekil 5.12, sayfa 124). Benim Makrom’u birkaç şekilde çalıştırabilirsiniz. Başlangıç ve test aşamasında F8 tuşu ile adım adım çalıştırmayı da düşünebilirsiniz. Eğer makronuz aktif ise ya da imleciniz bu makronun üzerinde ise makro ve VBA kodunuz yakalanabilir hata içermiyorsa F5 tuşu kodunuzu çalıştıracaktır. Kodumuzun kusursuz çalıştığından emin olmak için modelinizde küçük fakat anlamlı bir değişiklik yapınız. Örneğin mevcut emek saatini 750’den 800’e çıkarıp çalıştırınız. Sonuçların değiştiğini gözlemlemelisiniz. Geliştirdiğimiz makronun asıl faydasını gözlemek için Şekil 5.13’teki C5:G11 adresindeki ürün bilgilerini siliniz. Şekil 5.13’teki (sayfa 125) ekranda renkli olarak gösterilen alanları asla silmeyiniz. Sildiğiniz ürünlerin yerine yenilerini Ürünler sayfasından taşıyınız. Bunu yaparken ürün sayısı şu anda olduğu gibi beş olmasın, farklı bir değer olsun. Dilerseniz Şekil 5.14’teki (sayfa 125) gibi bir seçim yapabilirsiniz. Miktar hücrelerinde önceden kalan değerler olmasına aldırmayın. Bu yeni ürünlerin sayısı altı olduğu için daha önce kullandığımız adlandırmalar geçersiz kalmıştır. Örneğin Miktar, C11:G11 alanının adı iken şu an doğru bir model çözümü için C11:H11 şeklinde güncellenmesi gerekmektedir. Emek, Malzeme, MakSatis ve Miktar alanları da güncellenmelidir. Çünkü makromuz sayfadaki isimler üzerinden eniyileme yapıyor, açık adreslerini umursamıyor. Şimdilik Menü şeridinden yararlanarak adlandırmayı gerçekleştirelim. B5:H11 aralığını seçip, Formüller › Tanımlı Adlar › Seçimden Oluştur işlemleri ile yeni alanlara da B5:B11 aralığındaki hücrelerin isimlerinin verilmesini sağlayınız. Önceki alan adı tanımlamaları konusunda yeni tanımlamaya onay veriniz. Artık bu modeli çözmeye hazırsınız. Çünkü geliştirdiğimiz Benim Makrom alan adları üzerinden çalışan bir yapıya sahiptir.

Karar Vericinin Beklentilerine Uygun Olarak Modelin Kurulması

Şu halde Model sayfasında yer alan ürünlerin değişmesinin alan adları güncellendiği sürece Benim Makrom için bir sorun teşkil etmeyeceğini söyleyebiliriz. Verilerin Ürünler sayfasından Kopyala ile alınması ve Özel Yapıştır › İşlemi Tersine Çevir ile Model sayfasına aktarılması kullanışlı bir durum değildir. Bu amaçla ürünleri kullanıcıya seçtirip o ürünlere ilişkin bilgileri bu sayfaya aktaran bir özellik katmak istensin. Makroların anlamlı en küçük halleriyle kaydedilmesi ve kullanılması daha doğru olacaktır. İlk önce Model sayfasındaki mevcut ürün bilgilerini silen bir makro oluşturalım. Bu makronun adı UrunBilgisiSil olsun. Editörde yazılacak kod Şekil 5.15,sayfa 126da gösterildiği şekilde olmalıdır. Şimdi sıra ürünleri diğer sayfadan alıp getiren bir makro oluşturmaktadır. Al Getir isimli bir makro olsun. Urunler sayfasında Secim adı verilmiş olan A2:A13 aralığına karar vericinin seçtiği ürünler için 1 yazılsın (Şekil 5.16,sayfa 126). Ayrıca A14 hücresinin adını TopUrunSay olarak değiştirip içine =TOPLA(Secim) yazalım. Bu Secim alanında seçili ürünlerin sayısını tutacak ve makrolarımız için referans bir bilgi olacaktır. Ek olarak B2: G13 alanına UrunBilgisi adını verelim. UrunBilgisiSil ve AlGetir makrolarınızı yazdıktan sonra F8’le adımlayarak çalıştırınız ve yanlış bir silme işlemi yapıp yapmadığını izleyiniz. Eğer her ikisi de doğru çalışıyorsa şunları başarmışsınız demektir:

  • Model sayfasındaki ürün bilgilerini silebiliyor,
  • Urunler sayfasının Secim alanından Model sayfasına aktarılmasını istediğiniz ürünlerin yanına 1 yazıp, diğer ürünler için bu bölümü boş bıraktığınızda AlGetir makrosu ile ürün bilgilerini Model sayfasına aktarabiliyorsunuz.

O halde Model sayfasına aktardığınız ürünlerin yeniden adlandırılması gerekir. Bunu sürekli menü şeridinden yapmak uygun olmayacaktır. VBA ile yeniden adlandırmanın menü üzerinden adlandırmadan daha kolay olacağını göreceksiniz. Bunun için AdVer makrosunu yazıp çalıştırınız (Şekil 5.18, sayfa 128). Bu aşamada atılması gereken bir adım da ürünler sayfasına gitmek durumunda kalmadan hangi ürünleri modelde görmek istediğimizi belirleyebilmektir. Bunun için bir kullanıcı formu, bir liste kutusu ve bir komut düğmesine gereksinimimiz vardır. VB editörünün Insert (Ekle) › UserForm (KullanıcıFormu) menüsünden bu seçeneğe erişebilirsiniz. UserForm’u açıp boyutlandırın ve Properties (Özellikler) kısmında Caption= Ürün Seç yazıp bunun form üzerindeki görüntüsünden emin olun. Daha sonra Toolbox’tan ListBox (Liste Kutusu) bileşenini seçip UserFormun üzerine ekleyin. Properties-ListBox1 özelliklerinden sırayla şunları değiştirin veya girin: BoundColumn=1; ColumnCount=2; ColumnHeads=True; ColumnWidths=30pt; 50pt; MultiSelect=1- frmMultiSelectMulti;RowSource=UrunBilgisi. Bu özellikler sırayla döndürülecek değerin birinci sütundan alınacağı, liste kutusunda iki sütunun görüntüleneceği, verilerin alan adları ile birlikte liste kutusunda görüntüleneceği, sütun genişliklerinin ürün kodu ve açıklamasını görüntüleyecek kadar geniş olması için kullanılacak değerleri, liste kutusundan bir veya daha çok seçimin yapılabileceği ve liste kutusunda görüntülenecek verilerin çalışma kitabı içindeki Urun Bilgisi alanından alınacağını ifade etmektedir. Bu ayarlar gerçekleştirildiğinde Şekil 5.20’deki (sayfa 129) görüntünün elde edilmesi gerekir. Liste kutusunda ürünlerin seçimi bilgisi alındıktan sonra bu bilgilerin Urunler sayfasındaki Secim alanına seçilenler için 1 seçilmeyenler için boşluk aktarması gerekir. Bunun için aşağıdaki makronun hazırlanıp komut düğmesi (command button) olarak UserForm üzerinde kullanıma hazır hale getirilmesi gerekir. Komut düğmesi UserForm’a eklendikten sonra Caption özelliğine “Seçim Bitti” gibi butonun işlevini hatırlatacak bir ifade eklenir. Farenin sağ tuşuna komut düğmesi üzerinde tıklanarak ViewCode (Kod Görüntüle) seçeneği izlenerek içine Şekil 5.21’de (sayfa 129) görüntülenen ifadeler yazılır. Bu komut düğmesi Model sayfasındaki mevcut bilgileri silmeli, liste kutusundan seçilen ürünleri Urunler sayfasından alıp Model sayfasına getirmeli ve gelen yeni ürünleri B5:B11 alanındaki isimlerle adlandırmalıdır. SecimleriYaz makrosu liste kutusunun içeriğini Secim alanına aktaran makrodur. İçeriği Şekil 5.22’de (sayfa 129) gösterilmiştir. UserForm2 ise tasarladığımız forma VBA’nın atadığı standart bir isimdir. Burada bir değişiklik yapılmamış olmakla beraber bu isim daha kullanışlı isimlerle değiştirilebilir. Buraya kadar yaptıklarımızı bir menü haline getirelim. Model sayfasında gerekli düzenlemeleri yapalım (Şekil 5.23, sayfa 130). Bu butonların ayrı ayrı makrolarla iliştirilmesinin sebebi her bir makronun hata denetimini öncelikle kendi içinde yapılması gerektiğini vurgulamaktır. Butonların eklenmesi için Geliştirici › Denetimler › Ekle › ActiveX Denetimleri içinden komut düğmelerini seçerek Model çalışma sayfasına taşımanız ve boyutlandırmanız gerekmektedir. Butonların bütünlüğünü sağlamak ve görselliğini desteklemek üzere Ekle › Çizimler › Şekiller (Shapes) içinden karesel bir şekil alınıp kullanılmış ve butonların arkasına yerleştirilmiştir. Bu menüdeki butonlar bağımsız kullanılamaz. Yukarıdan aşağıya doğru hep aynı sırada çalıştırılmalıdır. Elimizdeki OKDS için doğrusu tek bir buton kullanmak, ancak o butonun içine bu makroları ekranda göründüğü sırada eklemektir. Böyle bir tek butonun içinde sırasıyla UrunBilgisiSil makrosu, UserForm2.Show ifadesi, AlGetir makrosu, AdVer makrosu ve Benim Makrom makrosu yazılmalıdır.

İkinci Amacın Eklenmesi

Aynı modelin yalnızca kâr amacı için değil, aynı zamanda mevcut kaynakların maksimum verimlilik oranı ile kullanılmak istendiğini varsayalım. Bu durumda Emek ve Malzeme kısıtlarının kullanılmayan miktarlarının enküçüklenmesi amaçlanmalıdır. Yeni amaç fonksiyonu Kullanılmayan_Kaynak adıyla C15 hücresine; =TOPLA((Mevcut_Emek_SaatiToplam_Emek)+(Mevcut_ Malzeme–Toplam_Malzeme)) ifadesiyle eklenmiştir. Bu durumda modelin hem toplam kârı enbüyükleyen, hem de kullanılmayan kaynağı enküçükleyen iki ayrı amaç fonksiyonu ve bunlar için iki ayrı makrosu ve bu makroları çalıştıran iki butonu olmalıdır. Her iki amaca yönelik yeni bir iki butonlu menü hazırlanmış olsun. Orijinal amacımız olan kâr enbüyüklemek butonunun içinde Şekil 5.24’te (sayfa 130) görünen kod yer alacaktır. Kullanılmayan kaynak miktarını enküçüklemek için yapmamız gereken çok az şey vardır. Öncelikle kâr enbüyükleme makrosu olan BenimMakrom’un içeriği birkaç değişiklikle kayıp enküçükleyen çözücü makrosuna dönüştürülecektir. Bu yeni makroya SeninMakron adını vermiş olalım. SeninMakron Şekil 5.25’teki (sayfa 131) gibi görünecektir. BenimMakrom ile SeninMakron arasında sadece iki fark vardır. Bunlar SetCell parametresinin Kullanlmayan_Kaynak olarak ve MaxMinVal parametresinin ikinci sıradaki amaç fonksiyonuna atfen 2 olarak değiştirilmesidir. Yani SetCell:=”Kullanlmayan_Kaynak”, MaxMinVal:=2 dışındaki tüm kod satıları diğeriyle aynıdır. Bu iki amacın birlikte yer aldığı yeni düzenleme ile OKDS Şekil 5.26’de (sayfa 131) olduğu gibi görünecektir. Bu şekilde bir OKDS geliştirildikten sonra modelin tüm parametrelerine bağlı olarak duyarlılık analizleri ve senaryo analizleri uygulanabilir.