MATLAB'DE OPTİMİZASYON PROBLEMLERİNİ MODELLEMEK
Ü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ıf | Amaç | Kısıt | Solver |
|---|---|---|---|
| LP (doğrusal) | Doğrusal | Doğrusal | linprog |
| QP (karesel) | Karesel | Doğrusal | quadprog |
| MILP (tamsayılı doğrusal) | Doğrusal | Doğrusal + tamsayı | intlinprog |
| NLP (doğrusal olmayan) | Doğrusal değil | Doğrusal/değil | fmincon |
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 <= bveAeq*x = beqmatris 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
optimvarile isimlendirilir, kısıtlar matematiksel ifade gibi yazılır, problem nesnesioptimproblemile kurulur vesolveile ç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örprob = optimproblem('ObjectiveSense', 'maximize')— kâr maksimize edilecekprob.Objective = 18*uretim(1) + 24*uretim(2) + 31*uretim(3)— birim kârlarprob.Constraints.iscilik = 2*uretim(1) + 3*uretim(2) + 4*uretim(3) <= 480— günlük adam-saatprob.Constraints.hammadde = 5*uretim(1) + 2*uretim(2) + 6*uretim(3) <= 600— kg cinsinden hammaddesol = 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:
- 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. - M-file fonksiyonu: Ayrı bir
amac.mdosyası. İlk satırfunction y = amac(x), gövde, kapanışend. Yorum satırlarıyla belgelenir,help amacile geri okunur. - 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.

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;Amatrisi içine yazmak yerine ayrı argüman olarak vermek hem hızlı hem okunaklı. - Doğrusal olmayan kısıt:
nonlconargümanı ile geçirilen ayrı bir fonksiyon. İki vektör döner: eşitsizlikc(x) <= 0ve eşitlikceq(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ıç:
x0tüm kısıtları sağlayan bir nokta olmalıdır. Aksi haldefminconönce fizibıl bölgeye atlama denemesi yapar ve bazen yanıltıcı yollar izler. - Çoklu başlangıç (multi-start): Farklı
x0noktalarından koşturulur, en iyi sonuç alınır. Global Optimization Toolbox'takiMultiStartnesnesi bu iş için tasarlanmıştır;GlobalSearchise akıllı örnekleme yapar.
Solver davranışı optimoptions ile ayarlanır. En kritik beş seçenek şunlardır:
Algorithm:fminconiçininterior-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).Display:off,final,iter. Model geliştirme sırasındaiterbilgilendirici; üretim koşusundaoff.MaxIterationsveMaxFunctionEvaluations: Büyük problemde varsayılan limitlere takılınca yakınsamamış sonuç döner;exitflag0 olur.OptimalityToleranceveConstraintTolerance: Varsayılan 1e-6. Mühendislik probleminde çoğunlukla yeterli; finansal optimizasyonda 1e-9'a indirilebilir.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:
- Simulink modeli oluşturulur; ayarlanacak parametreler değişken olarak Workspace'ten okunur.
- 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. fminconveyagabu maliyet fonksiyonunu minimize edecek parametre setini arar.- 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;
linprogdakikalar içinde çözer. Kamyon kapasitesi ayrık ise (1, 2, 3 kamyon dolusu)intlinprogdevreye 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ı).
fminconile çö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.

MODEL KURULUM KONTROL LİSTESİ
Bir optimizasyon dosyasını çözücüye göndermeden önce şu yedi soru cevaplanmalıdır:
- Karar değişkenleri tam olarak ne? Sayısı, birimi, sürekli mi tamsayı mı net mi?
- Amaç fonksiyonu maksimizasyon mu minimizasyon mu, sınıfı LP/QP/NLP'den hangisi?
- Kısıtların tipi doğru ayrıştırılmış mı (eşitsizlik / eşitlik / sınır / doğrusal olmayan)?
- Alt-üst sınırlar fiziksel anlamlı mı (negatif kesit, negatif üretim gibi anlamsızlıklar yok mu)?
- Başlangıç noktası
x0fizibıl mi, birden fazla başlangıç denenecek mi? - Solver seçimi problem sınıfına uygun mu,
optimoptionsayarlandı mı? exitflagveoutputnası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.



