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

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

MATLAB'de optimizasyon, bir problemi karar değişkeni, amaç fonksiyonu ve kısıt seti olarak doğru kurup uygun çözücüye teslim etmektir; iskelet doğru yazıldığında sonuç saniyeler içinde gelir. Burada LP, QP, MILP ve NLP problem sınıflarını ve hangisinde hangi solver'ın (linprog, quadprog, intlinprog, fmincon, ga) seçileceğini, solver-based ile problem-based yazım farkını, amaç fonksiyonu ve kısıt yazım disiplinini, başlangıç noktası ve optimoptions ayarlarını, Simulink entegrasyonunu ve model kurulum kontrol listesini bulacaksınız.

1. 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ıfların ve solver'ların resmi referansı için Optimization Toolbox dokümantasyonu birinci başvuru kaynağıdı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.

2. 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.

3. 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ü

4. 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.

5. 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.

7. 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.

8. İ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ü

9. 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.

Sıkça Sorulan Sorular

linprog, quadprog, intlinprog ve fmincon arasındaki seçim mantığı nedir?

Doğrusal amaç + doğrusal kısıt ise linprog hızlı ve kesin sonuç verir, global optimum garantilidir. Karesel amaç + doğrusal kısıt ise quadprog. Tamsayılı değişken varsa intlinprog. Amaç veya kısıt doğrusal değilse fmincon devreye girer ancak yerel optimum bulur, başlangıç noktasına duyarlıdır. Türev hesaplanamıyorsa ga veya particleswarm tercih edilir.

Problem-based ve solver-based yaklaşımın farkı nerede ortaya çıkar?

Solver-based yaklaşım karar değişkenlerini tek vektörde toplar, kısıtları A*x <= b matris formunda yazar. Problem-based yaklaşım optimvar ile isimlendirilmiş değişkenler ve optimproblem nesnesi üzerinden matematiksel ifade gibi yazılır. Büyük ve karmaşık kısıt setlerinde problem-based okunabilirlik kazandırır; matris düşünmeye yatkın ekip solver-based ile hızlı kalır.

fmincon hangi algoritma seçeneği ne zaman tercih edilir?

Varsayılan interior-point büyük ve karmaşık problemlerde iyi ölçeklenir. sqp orta ölçekli problemlerde kararlı yakınsama verir. trust-region-reflective sınır ve eşitlik kısıtlı problemlere uygundur ancak gradyan vermek zorunludur. active-set eski stil küçük problemler için. Algoritma optimoptions üzerinden Algorithm parametresiyle değiştirilir.

Optimizasyon başlangıç noktası x0 nasıl belirlenir?

Mümkünse tüm kısıtları sağlayan fizibıl bir nokta seçilir; fmincon fizibıl olmayan başlangıçtan fizibıl bölgeye atlama denemesi yapar ve yanıltıcı yollara girebilir. Doğrusal olmayan problemlerde yerel optimum riski için MultiStart veya GlobalSearch ile çoklu başlangıç koşturulur. Ölçekli ve makul büyüklükteki değerler yakınsamayı hızlandırır.

Lagrange çarpanları (lambda) çıktısı raporda nasıl kullanılır?

Çözücüden dönen lambda yapısı her kısıta karşılık duyarlılık verir. Bir kısıt aktifse çarpanı sıfırdan farklıdır; o kısıtı bir birim gevşetmek amaç fonksiyonunu çarpan kadar değiştirir. Hammadde 100 kg arttırılırsa kâr artışı lambda.ineqlin değerinin 100 ile çarpımı kadardır. Yöneticiye sunulan duyarlılık raporunun temelini bu çarpanlar oluşturur.

exitflag değeri 0 dönerse ne yapılır?

exitflag 0 iterasyon ya da fonksiyon değerlendirme limitinin dolduğunu, çözücünün yakınsamadığını gösterir. optimoptions ile MaxIterations ve MaxFunctionEvaluations arttırılır. Ölçekleme sorunu varsa karar değişkenleri ve kısıt katsayıları birim dönüşümüyle birbirine yakın büyüklüklere getirilir. Sorun devam ederse algoritma değiştirilir (örneğin interior-point yerine sqp denenir).

Simulink modeline bağlı parametre optimizasyonu nasıl kurulur?

MATLAB script'inde bir maliyet fonksiyonu yazılır: parametre vektörünü alır, sim komutuyla Simulink modelini çalıştırır, çıkış sinyalinden performans metriği (yerleşim zamanı, RMS hata) hesaplar ve döndürür. fmincon veya ga bu fonksiyonu minimize edecek parametre setini bulur. Türev hesaplanamadığı için ga ve particleswarm sık tercih edilir; parpool ile paralelleştirilir.

Maksimizasyon problemi linprog ile nasıl çözülür?

linprog sadece minimizasyon yapar. Maksimizasyon istendiğinde amaç katsayı vektörünün başına eksi konur; -f'*x minimize edildiğinde f'*x maksimize edilmiş olur. Sonuç değeri (fval) eksi işaretiyle döndüğü için raporda işaret düzeltilir. Problem-based yaklaşımda bu adım gerekmez; optimproblem oluştururken ObjectiveSense maximize verilir.

 CADSAY