Yazılarımız

Cadsay

MATLAB'DE OPTİMİZASYON PROBLEMLERİNİ MODELLEMEK

MATLAB ekranında optimizasyon problemi kurulumu, amaç fonksiyonu ve kısıt matrisi tanımlarıyla karar değişkenleri görünümü

Üretim planlama toplantısında üç saat geçti. Beş tezgâhın günlük kapasitesi, on iki ürünün adam-saat süresi, hammadde stoğu ve kâr marjı tahtaya yazıldı. Sonunda biri sordu: "Hangi ürünü kaç adet üretsek toplam kâr en yüksek olur?" Excel'de bir Solver çalıştırıldı, ama kısıt sayısı arttıkça yapı dağıldı. Aynı modeli üç hafta sonra bir mühendis MATLAB'de yirmi satırda kurdu; sonuç saniyeler içinde geldi, üstelik kısıtlardan birini gevşettiğinde kârın ne kadar arttığı duyarlılık raporundan görüldü.

Optimizasyon, problemin matematiksel iskeletini doğru kurmaktır. Karar değişkeni, amaç fonksiyonu, kısıt seti — bu üç parça doğru yazıldığında çözücü işin geri kalanını üstlenir. MATLAB Optimization Toolbox dört temel problem sınıfını ayrı solver'larla destekler ve hangi problemde hangi solver'ın seçileceği baştan bilinmesi gereken bir karardır. Konunun resmi referansı için Optimization Toolbox dokümantasyonu birinci başvuru kaynağıdır; teorik temel için doğrusal programlama klasiklerine (Dantzig, Bertsimas) ek olarak Wikipedia üzerindeki mathematical optimization taksonomisi kavram haritasını berraklaştırır.

HANGİ PROBLEM SINIFINA HANGİ SOLVER UYAR?

Bir modeli kurmadan önce problemin hangi sınıfa düştüğünün cevabı verilmelidir. Yanlış solver seçimi ya çözüm vermez ya yavaş yakınsar ya da yerel optimuma takılır. MATLAB'in dört temel sınıf için ayrı fonksiyonu vardır:

SınıfAmaçKısıtSolver
LP (doğrusal)DoğrusalDoğrusallinprog
QP (karesel)KareselDoğrusalquadprog
MILP (tamsayılı doğrusal)DoğrusalDoğrusal + tamsayıintlinprog
NLP (doğrusal olmayan)Doğrusal değilDoğrusal/değilfmincon

Türev hesaplanamadığı veya amaç fonksiyonu siyah kutu (örneğin Simulink simülasyon çıktısı) olduğu durumlarda Global Optimization Toolbox üzerinden gelen ga (genetik algoritma), particleswarm ve simulannealbnd devreye girer. Tek değişkenli kısıtsız problemlerde fminbnd, çok değişkenli kısıtsız problemlerde fminunc kullanılır. Solver eşleştirmesinin temel mantığı şudur: amaç ve kısıt doğrusalsa linprog dakikalar yerine saniyeler kazandırır; doğrusallık bozulduğunda fmincon kaçınılmaz olur.

SOLVER-BASED VE PROBLEM-BASED NASIL FARKLILAŞIR?

Optimization Toolbox modeli iki farklı söz dizimi ile kurmaya izin verir. İkisi aynı problemi çözer; biri matris düşünmeyi, diğeri matematiksel ifade düşünmeyi destekler.

  • Solver-based: Karar değişkenleri tek bir vektörde toplanır, kısıtlar A*x <= b ve Aeq*x = beq matris formatında verilir. Klasik yaklaşım. Hızlı, ama matris indekslerini takip etmek model büyüdükçe zorlaşır.
  • Problem-based: Değişkenler optimvar ile isimlendirilir, kısıtlar matematiksel ifade gibi yazılır, problem nesnesi optimproblem ile kurulur ve solve ile çağrılır. Okunabilirliği yüksek; karmaşık kısıt setlerinde tercih sebebi.

Üç ürün üreten bir tesiste karar değişkenleri x1, x2, x3 adetler olsun. Problem-based yaklaşımda kod akışı şöyle ilerler:

  • uretim = optimvar('uretim', 3, 'LowerBound', 0) — üç değişkenli, negatif olmayan vektör
  • prob = optimproblem('ObjectiveSense', 'maximize') — kâr maksimize edilecek
  • prob.Objective = 18*uretim(1) + 24*uretim(2) + 31*uretim(3) — birim kârlar
  • prob.Constraints.iscilik = 2*uretim(1) + 3*uretim(2) + 4*uretim(3) <= 480 — günlük adam-saat
  • prob.Constraints.hammadde = 5*uretim(1) + 2*uretim(2) + 6*uretim(3) <= 600 — kg cinsinden hammadde
  • sol = solve(prob) — çözücüye teslim

Aynı problemi linprog ile yazsaydık f = -[18 24 31] (maksimum için negatif), A = [2 3 4; 5 2 6], b = [480; 600] şeklinde matrislere dökerdik. Sonuç değişmez; ekibin matematiksel literatüre yakınlığı yazım tarzını belirler. Türk makine mühendisliği fakültelerinde son yıllarda problem-based yaklaşım ders müfredatına daha çok girmiştir; YÖK lisansüstü tezlerinde MATLAB optimizasyon başlıkları altında her iki tarz da kullanılır.

AMAÇ FONKSİYONU NASIL YAZILIR?

Amaç fonksiyonu üç farklı biçimde yazılabilir; seçim problemin uzunluğuna ve tekrar kullanım ihtiyacına göre değişir:

  1. Anonim fonksiyon: Tek satırlık ifadeler için. amac = @(x) x(1)^2 + 3*x(2)^2 + 2*x(1)*x(2); Hızlı yazılır, başka script'lerden çağrılamaz.
  2. M-file fonksiyonu: Ayrı bir amac.m dosyası. İlk satır function y = amac(x), gövde, kapanış end. Yorum satırlarıyla belgelenir, help amac ile geri okunur.
  3. Problem-based ifade: Doğrudan prob.Objective = ... şeklinde. Sembolik karar değişkenleri üzerinde matematiksel ifade yazılır; MATLAB arka planda otomatik türev üretir.

Türev bilgisi solver'a verilirse yakınsama hızlanır. fmincon için optimoptions('fmincon', 'SpecifyObjectiveGradient', true) ayarlandıktan sonra amaç fonksiyonu iki çıktı döner: değer ve gradyan. Karmaşık türev hesabını elden yazmak istemeyenler için Symbolic Math Toolbox üzerinden matlabFunction komutu otomatik üretim sağlar. Ancak küçük modellerde otomatik türev çıkarmaktan vazgeçip FiniteDifferenceType seçeneğini central yapmak da yeterli doğruluk verir; merkezi farklar ileri farklara göre daha kararlıdır, çalışma süresi iki kat olur.

MATLAB problem-based optimizasyon kurulumu optimvar optimproblem objective constraints solve aşamaları akış görünümü

KISIT YAZIM DİSİPLİNİ

Bir modeli reddedilemez kılan unsur amaç fonksiyonu değil, kısıtların eksiksiz ve tutarlı yazılmış olmasıdır. Dört tip kısıt birbirinden ayrı düşünülür:

  • Doğrusal eşitsizlik: A*x <= b. Üretim kapasitesi, hammadde sınırı, bütçe gibi yukarı sınırların ifadesi.
  • Doğrusal eşitlik: Aeq*x = beq. Toplam talebin belli bir değere eşit olması, malzeme dengesi (girdi = çıktı).
  • Sınır kısıtları: lb <= x <= ub. Değişken bazlı alt-üst sınırlar; A matrisi içine yazmak yerine ayrı argüman olarak vermek hem hızlı hem okunaklı.
  • Doğrusal olmayan kısıt: nonlcon argümanı ile geçirilen ayrı bir fonksiyon. İki vektör döner: eşitsizlik c(x) <= 0 ve eşitlik ceq(x) = 0.

Sık yapılan üç hata vardır. Birincisi: maksimizasyon problemini linprog ile çözerken katsayı vektörünün başına eksi koymayı unutmak. linprog yalnızca minimizasyon yapar; -f'*x minimize edilince f'*x maksimize edilmiş olur. İkincisi: eşitlik kısıtının matris satır sayısı ile beq vektörünün eleman sayısının uyuşmaması; MATLAB hatayı net verir ama mesajda kaç satır bekledi okunmazsa dakikalar yiter. Üçüncüsü: doğrusal olmayan kısıtı A matrisine yazmaya çalışmak — doğrusal olmayan kısıt yalnızca nonlcon üzerinden geçer.

Türk enerji sektöründe yapılan tipik bir örnek üzerinden bakalım. Bir kombine çevrim santralinde gaz türbini ile buhar türbininin üretim miktarları karar değişkenleridir. Yakıt maliyeti minimize edilir, talep eşitliği (toplam üretim = saatlik talep) eşitlik kısıtı, türbin kapasiteleri sınır kısıtıdır. Ek olarak buhar türbininin gaz türbini çıkışından beslenmesi nedeniyle buhar <= 0.6*gaz tipinde bir oran kısıtı vardır — bu doğrusal eşitsizlikle A matrisine yazılır. Türev içermeyen termodinamik verim eğrisi kullanıldığında problem doğrusal olmaktan çıkar; fmincon devreye girer ve verim eğrisi nonlcon üzerinden tanımlanır.

BAŞLANGIÇ NOKTASI VE SOLVER OPTIONS NASIL AYARLANIR?

Doğrusal olmayan problemlerde solver'ın bulduğu sonuç genellikle yerel optimumdur. Global optimum garantisi yoktur. Başlangıç noktası x0'ın seçimi hangi yerel optimuma yakınsanacağını belirler. İki disiplin uygulanır:

  • Fizibıl başlangıç: x0 tüm kısıtları sağlayan bir nokta olmalıdır. Aksi halde fmincon önce fizibıl bölgeye atlama denemesi yapar ve bazen yanıltıcı yollar izler.
  • Çoklu başlangıç (multi-start): Farklı x0 noktalarından koşturulur, en iyi sonuç alınır. Global Optimization Toolbox'taki MultiStart nesnesi bu iş için tasarlanmıştır; GlobalSearch ise akıllı örnekleme yapar.

Solver davranışı optimoptions ile ayarlanır. En kritik beş seçenek şunlardır:

  1. Algorithm: fmincon için interior-point (varsayılan, büyük problemlerde iyi), sqp (orta ölçek, kararlı), trust-region-reflective (sınır ve eşitlik kısıtı, gradyan zorunlu), active-set (eski stil, küçük problem).
  2. Display: off, final, iter. Model geliştirme sırasında iter bilgilendirici; üretim koşusunda off.
  3. MaxIterations ve MaxFunctionEvaluations: Büyük problemde varsayılan limitlere takılınca yakınsamamış sonuç döner; exitflag 0 olur.
  4. OptimalityTolerance ve ConstraintTolerance: Varsayılan 1e-6. Mühendislik probleminde çoğunlukla yeterli; finansal optimizasyonda 1e-9'a indirilebilir.
  5. SpecifyObjectiveGradient, SpecifyConstraintGradient: Türev verilirse iterasyon sayısı yarıya iner.

Çözücü bittiğinde exitflag mutlaka okunur. Pozitif değer (1 veya 2) yakınsama başarısı; 0 iterasyon limitinin dolması; -2 fizibıl nokta bulunamadı anlamına gelir. output yapısı içindeki firstorderopt alanı KKT koşullarına ne kadar yakın durulduğunu gösterir; mühendislik için 1e-6 altı genelde güvenlidir.

SONUÇ NASIL DOĞRULANIR?

Bir optimizasyon sonucunun gerçek değeri salt çözüm noktasında değil, çevresindeki davranışta gizlidir. fmincon ve linprog çıktısı olarak dönen lambda yapısı her kısıta karşılık gelen Lagrange çarpanını verir.

  • lambda.ineqlin: Doğrusal eşitsizlik kısıtlarının duyarlılığı. Bir kısıt aktifse (bağlayıcıysa) çarpanı sıfırdan farklı olur; o kısıtı bir birim gevşetmek amaç fonksiyonunu çarpan kadar değiştirir.
  • lambda.eqlin: Eşitlik kısıtlarına karşılık gelen çarpanlar. Her zaman aktif olduklarından çarpanları sıfırdan farklı çıkar.
  • lambda.lower, lambda.upper: Sınır kısıtlarına karşılık gelen çarpanlar.
  • lambda.ineqnonlin, lambda.eqnonlin: Doğrusal olmayan kısıtlara karşılık gelen çarpanlar.

Yöneticiye sunulan raporda "hammadde stoğunu 100 kg arttırırsak kâr ne kadar değişir" sorusunun cevabı lambda.ineqlin değerinin 100 ile çarpımıdır. Bu sayı duyarlılık raporunun temelidir ve TÜBİTAK destekli endüstriyel optimizasyon projelerinde idare-yüklenici müzakerelerinde tek başına karar değiştirici olur. Excel Solver duyarlılık raporu da aynı bilgiyi verir ama yapı bozulduğunda yeniden kurulması saatler alır; MATLAB'de bir döngü içinde kısıt sağ tarafı parametrik olarak değiştirilip eğri çizilir.

SIMULINK ENTEGRASYONU VE PARAMETRE OPTİMİZASYONU

Statik bir matematiksel model her zaman yetmez. Bir ulaştırma sistemindeki sinyal süreleri, bir HVAC kontrolöründeki PID katsayıları, bir vinç sürücüsündeki tork limitleri — zamana göre değişen bir sistemin parametreleri optimize edilir. Simulink modelinin çıkışı bir performans metriğine (yerleşim zamanı, aşma yüzdesi, RMS hata) dönüşür ve bu metrik MATLAB tarafından çağrılan bir maliyet fonksiyonu olur.

Akış şöyle ilerler:

  1. Simulink modeli oluşturulur; ayarlanacak parametreler değişken olarak Workspace'ten okunur.
  2. MATLAB script'inde maliyet fonksiyonu yazılır: parametre vektörünü alır, sim('modelAdi') ile modeli çalıştırır, çıkış sinyalinden metriği hesaplar, döndürür.
  3. fmincon veya ga bu maliyet fonksiyonunu minimize edecek parametre setini arar.
  4. Sonuç parametreleri modele yazılıp doğrulama koşusu yapılır.

Türk savunma sanayi ve otomotiv yan sanayisinde bu yöntem yaygın olarak kullanılır; titreşim sönümleme kontrolörü, motor kontrol haritası, otonom araç sürüş profili gibi başlıklar Simulink + Optimization Toolbox eşleşmesiyle çözülür. Türev hesaplanamadığı için ga veya particleswarm tercih edilir; tek bir koşu birkaç dakika ile birkaç saat arasında sürebilir, paralelleştirme (parpool) süre kazandırır. Mühendislik tarafında bu yaklaşımı sahaya indirmek isteyenler için uygulamalı matlab eğitimi sürecinde Simulink modeli ile optimizasyon döngüsünün birlikte kurulması, sentetik veri yerine gerçek senaryolarla pekiştirilir.

İKİ SAHA SENARYOSU

Modellemenin somutluğu örneklerde berraklaşır:

  • Lojistik dağıtım planlaması: Bir gıda dağıtım firmasının dört deposu ve on iki bayisi var. Karar değişkenleri her depo-bayi çiftinde gönderilen ton miktarı; amaç toplam km maliyetini minimize etmek. Kısıtlar: her bayinin talebi karşılanmalı (eşitlik), her deponun stoğu aşılmamalı (eşitsizlik), her gönderim non-negatif (sınır). Klasik ulaştırma problemi; linprog dakikalar içinde çözer. Kamyon kapasitesi ayrık ise (1, 2, 3 kamyon dolusu) intlinprog devreye girer.
  • Yapısal optimizasyon — kafes ağırlığı: On dokuz çubuktan oluşan bir çelik kafeste her çubuğun kesit alanı karar değişkeni; amaç toplam ağırlığı minimize etmek. Kısıtlar: her düğüm noktasında deplasman sınırı (doğrusal değil), her çubukta gerilme sınırı (doğrusal değil), kesit alanları minimum 100 mm² (sınır kısıtı). fmincon ile çözülür; başlangıç noktası eşit kesitli bir tasarımdan alınır. Türk mühendislik fakültelerinin yapı laboratuvarlarında lisansüstü tez konusu olarak yaygındır; SAP2000 veya ANSYS çıktıları MATLAB'e aktarılıp optimizasyon döngüsü kurulur.
MATLAB optimizasyon sonuçları kontur grafiği üzerinde optimum noktası ve kısıt sınırlarının çizilmiş görünümü

MODEL KURULUM KONTROL LİSTESİ

Bir optimizasyon dosyasını çözücüye göndermeden önce şu yedi soru cevaplanmalıdır:

  1. Karar değişkenleri tam olarak ne? Sayısı, birimi, sürekli mi tamsayı mı net mi?
  2. Amaç fonksiyonu maksimizasyon mu minimizasyon mu, sınıfı LP/QP/NLP'den hangisi?
  3. Kısıtların tipi doğru ayrıştırılmış mı (eşitsizlik / eşitlik / sınır / doğrusal olmayan)?
  4. Alt-üst sınırlar fiziksel anlamlı mı (negatif kesit, negatif üretim gibi anlamsızlıklar yok mu)?
  5. Başlangıç noktası x0 fizibıl mi, birden fazla başlangıç denenecek mi?
  6. Solver seçimi problem sınıfına uygun mu, optimoptions ayarlandı mı?
  7. exitflag ve output nasıl yorumlanacak, başarısız yakınsamada hangi B planı?

Bu yedi soruya kâğıt üzerinde cevap veremeyen bir model genellikle çözücüde de cevap vermez. MATLAB'in sertliği matematiğin sertliğidir; vektör boyutu uyuşmazlığı ya da fizibıl olmayan başlangıç noktası ilk satırda hata fırlatır. Bu sertlik başlangıçta yorucu görünür, model yerleştikten sonra koruyucu bir disiplin haline döner — sahaya gönderilen bir parametre setinin neden o seçildiği, hangi kısıtla bağlandığı ve gevşetilirse ne kadar kâr getireceği aynı oturumda raporlanabilir hale gelir.

 CADSAY