Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🎯 optim - Optimizasyon Algoritmaları

Root Finding, Gradient Descent, BFGS, Nelder-Mead

68
Fonksiyon
897
Satır
26.6 KB
Boyut

🚀 Hızlı Başlangıç

içe_aktar optim

// f(x) = x² - 4 = 0 denkleminin kökünü bul
fonksiyon f(x: ondalık): ondalık yap
    dön x * x - 4.0
son

// Bisection metodu
değişken kök = optim_bisection(f, 0.0, 3.0, 0.001, 100)
yazdır("Kök: " + kök)  // ≈ 2.0

// Newton-Raphson (türev gerekli)
fonksiyon df(x: ondalık): ondalık yap
    dön 2.0 * x
son

değişken kök2 = optim_newton_raphson(f, df, 1.0, 0.001, 100)

Tek Değişkenli Minimum

// f(x) = x² - 4x + 4 fonksiyonunun minimumunu bul
fonksiyon parabola(x: ondalık): ondalık yap
    dön x * x - 4.0 * x + 4.0
son

// Golden section search
değişken min = optim_golden_section(parabola, 0.0, 5.0, 0.001)
yazdır("Minimum: x = " + min)  // ≈ 2.0

Gradient Descent

kullan optim
kullan linalg

// f(x,y) = x² + y² fonksiyonunun minimumunu bul
fonksiyon gradyan(pos: [ondalık], n: tam_sayı): [ondalık] yap
    dön [2.0 * pos[0], 2.0 * pos[1]]
son

değişken başlangıç = [5.0, 3.0]
değişken minimum = optim_gradient_descent(gradyan, başlangıç, 2, 0.1, 100, 0.001)
yazdır("Minimum: (" + minimum[0] + ", " + minimum[1] + ")")  // ≈ (0, 0)

📚 API Kategorileri

1. Kök Bulma (Root Finding)

  • optim_bisection - İkiye bölme metodu
  • optim_newton_raphson - Newton-Raphson metodu
  • optim_secant - Secant metodu
  • optim_fixed_point - Sabit nokta iterasyonu

2. Line Search (Tek Değişkenli)

  • optim_golden_section - Altın oran araması
  • optim_brent - Brent metodu
  • optim_armijo_line_search - Armijo koşulu

3. Gradient-Based Optimization

  • optim_gradient_descent - Temel gradyan inişi
  • optim_gradient_descent_momentum - Momentum ile GD
  • optim_adam - Adam optimizer
  • optim_bfgs_simple - BFGS quasi-Newton

4. Gradient-Free Optimization

  • optim_nelder_mead_2d - Nelder-Mead simplex
  • optim_coordinate_descent - Koordinat inişi

5. Constrained Optimization

  • optim_penalty_method - Penalty metodu
  • optim_augmented_lagrangian - Augmented Lagrangian
  • optim_gradient_projection - Gradient projection

6. Least Squares

  • optim_least_squares - Doğrusal en küçük kareler
  • optim_gauss_newton - Gauss-Newton metodu
  • optim_levenberg_marquardt - LM algoritması

7. Metaheuristics

  • optim_simulated_annealing - Benzetilmiş tavlama
  • optim_genetic_algorithm_1d - Genetik algoritma

8. Utilities

  • optim_numerical_gradient - Sayısal gradyan
  • optim_numerical_hessian - Sayısal Hessian

🔬 Detaylı Örnekler

Örnek 1: Makine Öğrenmesi - Logistic Regression

kullan optim

// Logistic loss için gradient
fonksiyon logistic_gradient(w: [ondalık], X: [ondalık], y: [ondalık], n: tam_sayı): [ondalık] yap
    // Gradient hesaplama
    // ∇L = X^T (σ(Xw) - y)
    // Basitleştirilmiş implementasyon
    dön grad
son

// Adam optimizer ile optimize et
değişken w_init = [0.0, 0.0]
değişken w_opt = optim_adam(logistic_gradient, w_init, 2, 0.01, 0.9, 0.999, 1e-8, 1000)

Örnek 2: Mühendislik - Yapısal Optimizasyon

// Kiriş optimizasyonu: minimum ağırlık, maksimum dayanım
fonksiyon beam_cost(dimensions: [ondalık], n: tam_sayı): ondalık yap
    değişken width = dimensions[0]
    değişken height = dimensions[1]
    
    // Maliyet = malzeme × alan
    değişken cost = width * height
    
    // Kısıt: moment of inertia > I_min
    değişken I = (width * height * height * height) / 12.0
    değişken penalty = 0.0
    eğer (I < 1000.0) ise yap
        penalty = 1000.0 * (1000.0 - I)
    son
    
    dön cost + penalty
son

değişken initial = [10.0, 20.0]
değişken optimal = optim_simulated_annealing(beam_cost, initial, 2, 100.0, 0.95, 1000, 42)

Örnek 3: Eğri Uydurma (Curve Fitting)

// y = a*exp(-b*x) + c modeline fit et
fonksiyon exponential_model(params: [ondalık], x: ondalık): ondalık yap
    değişken a = params[0]
    değişken b = params[1]
    değişken c = params[2]
    dön a * math_exp(-b * x) + c
son

fonksiyon residual(params: [ondalık], X: [ondalık], y: [ondalık], n: tam_sayı): [ondalık] yap
    değişken r = yeni_dizi(n)
    değişken i = 0
    iken (i < n) yap
        r[i] = y[i] - exponential_model(params, X[i])
        i = i + 1
    son
    dön r
son

// Levenberg-Marquardt ile optimize et
değişken initial_guess = [1.0, 0.1, 0.0]
değişken fitted = optim_levenberg_marquardt(residual, jacobian, initial_guess, 3, n_data, 0.01, 100)

⚡ Algoritmalar ve Kompleksiteler

AlgoritmaKompleksiteGradyan GerekliKullanım
BisectionO(log(1/ε))HayırKök bulma
Newton-RaphsonO(n)Evet (1. ve 2. türev)Hızlı yakınsama
Golden SectionO(log(1/ε))Hayır1D minimum
Gradient DescentO(nk)EvetGenel optimizasyon
BFGSO(n²k)EvetQuasi-Newton
Nelder-MeadO(n²k)HayırDerivative-free
Simulated AnnealingO(T)HayırGlobal optimum

Notlar:

  • n: Boyut
  • k: İterasyon sayısı
  • ε: Tolerans
  • T: Sıcaklık programı

🎓 Optimizasyon Stratejileri

Problem Türüne Göre Algoritma Seçimi

  1. Smooth, Convex Problem:

    • Gradyan var mı? → BFGS veya Gradient Descent
    • Hessian var mı? → Newton metodu
  2. Non-smooth, Non-convex:

    • Simulated Annealing
    • Genetic Algorithm
  3. Kısıtlı Problem:

    • Penalty Method
    • Augmented Lagrangian
  4. Büyük Ölçekli Problem:

    • Stochastic Gradient Descent
    • Coordinate Descent
  5. Least Squares:

    • Gauss-Newton
    • Levenberg-Marquardt

🔗 İlgili Modüller

  • linalg - Matris işlemleri
  • stats - İstatistiksel optimizasyon
  • math - Matematik fonksiyonları

📖 Daha Fazla Bilgi


İleri okuma: Makine Öğrenmesi örnekleri