4 puan yazan GN⁺ 2025-01-19 | 1 yorum | WhatsApp'ta paylaş
  • Kalman filtresi, gürültü içeren sensör ölçümleri ile kusurlu dinamik modeli birlikte kullanarak mevcut durumu ve bir sonraki durumun belirsizliğini de tahmin eden bir algoritmadır
  • Eğitim, uçak radar takibi örneğinde uzaklık (r) ve hız (v) değerlerini durum vektörü olarak alıp, tahmin ile ölçümü birleştirme sürecini sayısal olarak adım adım izler
  • İlk ölçüm değerleri (10,000m), (200m/s) ve örnekleme aralığı (5s) kullanıldığında, sabit hız modelinde bir sonraki konum (11,000m) olarak tahmin edilir; ölçüm gürültüsü (R) ve süreç gürültüsü (Q) kovaryansa yansıtılır
  • İkinci ölçüm (11,020m), (202m/s) daha belirsizdir, ancak Kalman kazancı (K) tahmin ile ölçümü ağırlıklı olarak birleştirerek güncellenmiş durumu (11,009.37m), (201.43m/s) olarak hesaplar
  • Başlatmanın ardından tahmin-güncelleme döngüsü tekrarlanır; gerçek uygulamalarda Joseph formu gibi kararlı kovaryans güncelleme denklemleri ve aykırı ölçüm işleme de dikkate alınmalıdır

Kalman filtresinin çözdüğü tahmin problemi

  • Kalman filtresi, belirsizliğin olduğu ortamlarda bir sistemin durumunu tahmin eden ve öngören bir algoritmadır
    • Ölçüm gürültüsü içeren sensör verileri
    • Bilinmeyen dış etkenler
    • Dinamik model ile gerçek hareket arasındaki fark
  • Nesne takibi, navigasyon, robotik, kontrol, finansal piyasa analizi ve hava tahmini gibi alanlarda kullanılır
  • Bilgisayar faresinin iz tahminine uygulanırsa gürültüyü azaltıp el titremesini telafi ederek daha kararlı bir hareket yolu oluşturabilir
  • Eğitim, karmaşık matematiksel açıklamalardan çok sayısal örnekler ve sezgisel açıklamalarla Kalman filtresini anlamaya odaklanır
  • Yanlış tasarlanmış bir durumda Kalman filtresinin nesneyi düzgün takip edemediği örnekler ve bunun nasıl düzeltilebileceği de yer alır

Öğrenme yolu

  • Bu proje, Kalman filtresini üç farklı derinlikte öğrenebilecek şekilde yapılandırılmıştır
    • Tek sayfalık genel bakış: Temel fikirleri ve gerekli denklemleri türetim yapmadan açıklar; temel istatistik ve lineer cebir bilgisi varsayar
    • Ücretsiz örnek tabanlı web eğitimi: Sayısal örneklerle sezgi oluşturur ve Kalman filtresi denklemlerinin türetimine kadar adım adım ilerler; ön bilgi gerekmediğini belirtir
    • Kalman Filter from the Ground Up: 14 adet tam çözümlü sayısal örnek, performans grafikleri ve tabloları, Extended Kalman Filter, Unscented Kalman Filter, sensör füzyonu ve uygulama yönergeleri içerir

Radar takibi örneğiyle tahmin gereksinimi

  • Bir uçağı takip eden radarda uçak sistem, tahmin edilmesi gereken konum ise sistem durumudur
  • Radar dar bir huzmeyi uçağın yönüne çevirdiğinden, bir sonraki huzmenin nereye gönderileceğine karar vermek için gelecekteki konumun tahmin edilmesi gerekir
    • Tahmin başarısız olursa huzme yanlış yöne bakabilir ve takip kaybedilebilir
    • Sistemin zamana göre hareketini gösteren bir dinamik model gerekir
  • Basitleştirilmiş 1 boyutlu örnekte uçağın radara doğru ya da radardan uzaklaşarak doğrusal hareket ettiği varsayılır
    • Radar, darbe gönderme-alma süresinden uzaklığı (r) hesaplar
    • Doppler etkisiyle hız (v) de ölçülebilir
  • (t_0) anında uzaklık (10,000m), hız (200m/s) çok doğru ölçülmüşse, örnekleme aralığı (\Delta t=5s) ise ve hızın sabit olduğu varsayılırsa bir sonraki konum (11,000m) olur
    • (\Delta r = v \cdot \Delta t)
    • (r_{t_1}=10,000+200\cdot5=11,000m)

Ölçüm gürültüsü ve süreç gürültüsü

  • Gerçek radar ölçümleri kusursuz derecede hassas değildir; aynı anda birden fazla radar ölçüm yapsa bile birbirinden biraz farklı değerler üretebilir
    • Bu değişim ölçüm gürültüsü olarak ifade edilir
    • Yalnızca durum tahminini değil, bu tahminin ne kadar güvenilir olduğunu da hesaplamak gerekir
  • Dinamik model de kusursuz değildir
    • Uçağın sabit hızla hareket ettiği varsayılsa bile rüzgar gibi dış etkenler nedeniyle gerçek hareket farklı olabilir
    • Bu tür öngörülemeyen etkiler süreç gürültüsüdür
  • Kalman filtresi, mevcut durum tahminini, gelecekteki durum tahminini ve bunların her birine ilişkin belirsizliği birlikte sağlar
  • Sistem ve gürültünün model varsayımlarına uyduğu koşullarda durum tahmini belirsizliğini en aza indiren optimal bir algoritmadır

Durum vektörü ve başlatma

  • Örnekteki sistem durumu, uçağın uzaklığı (r) ve hızı (v) bileşenlerinden oluşur

[ \boldsymbol{x}= \begin{bmatrix} r\ v \end{bmatrix} ]

  • İlk ölçüm değeri (t_0) anında şöyledir

[ \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]

  • Ölçüm değerleri belirsizlik içerdiğinden, her ölçüme varyans biçiminde bir ölçüm belirsizliği eşlik eder
    • Uzaklık ölçümü standart sapması: (4m)
    • Hız ölçümü standart sapması: (0.5m/s)
    • Varyans, standart sapmanın karesidir

[ \boldsymbol{R}_0= \begin{bmatrix} 16 & 0\ 0 & 0.25 \end{bmatrix} ]

  • Bu örnekte uzaklık ve hız ölçüm hatalarının birbiriyle ilişkili olmadığı varsayıldığından, kovaryans matrisinin diyagonal dışı elemanları 0 alınır
  • Başlatma adımında ölçüm değeri ile sistem durumu aynı fiziksel nicelikleri, yani (r) ve (v)'yi temsil ettiğinden ilk ölçüm ilk durum tahmini olarak kullanılabilir

[ \hat{\boldsymbol{x}}_{0,0}= \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]

  • Bu yaklaşım yalnızca başlatma adımında kullanılabilir

Tahmin adımı: durum ve kovaryansın yayılımı

  • Tahmin, mevcut durum ile durum geçiş matrisi (\boldsymbol{F}) kullanılarak bir sonraki andaki durumu hesaplar
  • Sabit hız modelinde şu denklemler kullanılır

[ v_1=v_0=v ]

[ r_1=r_0+v_0\Delta t ]

  • Matris biçimindeki durum tahmin denklemi şöyledir

[ \hat{\boldsymbol{x}}_{n+1,n}

\boldsymbol{F} \hat{\boldsymbol{x}}_{n,n} + \boldsymbol{G}\boldsymbol{u}_n ]

  • (\boldsymbol{u}_n): giriş değişkeni
  • (\boldsymbol{G}): giriş geçiş matrisi
  • Bu basit örnekte giriş olmadığından (\boldsymbol{u}_n=0)
  • (\Delta t=5s) olduğunda durum geçiş matrisi aşağıdaki gibidir ve tahmin sonucu (11,000m), (200m/s) olur

[ \boldsymbol{F}= \begin{bmatrix} 1 & 5\ 0 & 1 \end{bmatrix} ]

[ \hat{\boldsymbol{x}}_{1,0}

\begin{bmatrix} 11{,}000\ 200 \end{bmatrix} ]

  • Kovaryans tahmini yalnızca (\boldsymbol{F}\boldsymbol{P}) ile değil, (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T) ile yapılır

[ \boldsymbol{P}_{n+1,n}

\boldsymbol{F} \boldsymbol{P}_{n,n} \boldsymbol{F}^T + \boldsymbol{Q} ]

  • Süreç gürültüsü hariç tutulduğunda tahmin kovaryansı şöyledir

[ \boldsymbol{P}_{1,0}

\begin{bmatrix} 22.25 & 1.25\ 1.25 & 0.25 \end{bmatrix} ]

  • Hız varyansı, sabit hız modeli nedeniyle (0.25) olarak kalır
  • Uzaklık varyansı, hız belirsizliği zamanla uzaklık belirsizliğini büyüttüğü için (16)'dan (22.25)'e çıkar

Süreç gürültüsünün hesaba katılması

  • Gerçek uçak hızı, rüzgar gibi öngörülemeyen dış etkenlerden etkilenebileceği için süreç gürültüsü (\boldsymbol{Q}) kovaryans tahminine eklenir
  • Örnekte rastgele ivmenin standart sapmasının (\sigma_a=0.2m/s^2) olduğu varsayılır
    • Varyans (\sigma_a^2=0.04m^2/s^4) olur
  • (\Delta t=5s) iken süreç gürültüsü matrisi şöyledir

[ \boldsymbol{Q}

\begin{bmatrix} 6.25 & 2.5\ 2.5 & 1 \end{bmatrix} ]

  • Süreç gürültüsü eklendiğinde tahmin kovaryansı aşağıdaki gibi olur

[ \boldsymbol{P}_{1,0}

\begin{bmatrix} 28.5 & 3.75\ 3.75 & 1.25 \end{bmatrix} ]

Güncelleme adımı: tahmin ile ölçümün ağırlıklı birleşimi

  • (t_1) anındaki ikinci ölçüm değeri şöyledir

[ \boldsymbol{z}_1= \begin{bmatrix} 11{,}020\ 202 \end{bmatrix} ]

  • Bu ölçümde güçlü bir gürültü sıçraması nedeniyle sinyal-gürültü oranının düşük olduğu ve ilk ölçüme göre belirsizliğin daha yüksek olduğu varsayılır
    • Uzaklık standart sapması: (6m)
    • Hız standart sapması: (1.5m/s)

[ \boldsymbol{R}_1= \begin{bmatrix} 36 & 0\ 0 & 2.25 \end{bmatrix} ]

  • Tahmin kovaryansı (\boldsymbol{P}_{1,0})'ın diyagonal elemanları, ölçüm kovaryansı (\boldsymbol{R}_1)'inkilerden küçüktür; yani tahmin tarafının belirsizliği daha düşüktür
  • Kalman filtresi yalnızca tahmini ya da yalnızca ölçümü kullanmaz; belirsizliği daha düşük olana daha büyük ağırlık vererek ikisini birleştirir
  • 1 boyutlu biçimdeki ağırlıklı ortalama şöyledir

[ \hat{x}_{1,1}

K_1 z_1 + (1-K_1)\hat{x}_{1,0} ]

  • (\boldsymbol{K}), Kalman kazancıdır ve güncellenmiş tahminin belirsizliğini en aza indirecek şekilde ölçüm ile tahminin ağırlıklarını belirler

İnovasyon, gözlem matrisi ve Kalman kazancı

  • Durum güncelleme denklemi, tahmin değerine bir düzeltme terimi eklenmiş biçimde de yazılabilir

[ \hat{\boldsymbol{x}}_{1,1}

\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1 ( \boldsymbol{z}_1

\boldsymbol{H}\hat{\boldsymbol{x}}_{1,0} ) ]

  • (\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}), inovasyon (innovation) ya da artık (residual) olarak adlandırılır ve yeni ölçümün getirdiği bilgiyi temsil eder
  • (\boldsymbol{H}), gözlem matrisi ya da ölçüm matrisi olup durum değişkenlerini gerçekten ölçülen fiziksel niceliklere eşler
    • Bu örnekte hem durum hem ölçüm uzaklık ve hız olduğundan (\boldsymbol{H}=\boldsymbol{I})
    • Genel durumda, örneğin dijital termometrede olduğu gibi ölçüm ile durum farklı fiziksel alanlarda olabilir
  • Çok değişkenli Kalman kazancı şöyledir

[ \boldsymbol{K}_n

\boldsymbol{P}{n,n-1} \boldsymbol{H}^T ( \boldsymbol{H} \boldsymbol{P}{n,n-1} \boldsymbol{H}^T + \boldsymbol{R}_n )^{-1} ]

  • Örnekte hesaplanan Kalman kazancı aşağıdaki gibidir

[ \boldsymbol{K}_1= \begin{bmatrix} 0.4048 & 0.6377\ 0.0399 & 0.3144 \end{bmatrix} ]

  • Matris tersini hesaplamak için MATLAB'da inv(A) veya Python'da numpy.linalg.inv(A) kullanılabilir; ancak gerçek uygulamalarda açıkça ters almak yerine A\b ya da numpy.linalg.solve(A, b) gibi lineer sistemi doğrudan çözmek genellikle daha iyidir

Güncelleme sonucu ve kovaryansın azalması

  • Bu örnekte inovasyon şu şekildedir

[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}

\begin{bmatrix} 20\ 2 \end{bmatrix} ]

  • Kalman kazancıyla düzeltme terimi hesaplanırsa sonuç şöyledir

[ \boldsymbol{K}_1 \begin{bmatrix} 20\ 2 \end{bmatrix}

\begin{bmatrix} 9.37\ 1.43 \end{bmatrix} ]

  • Güncellenmiş durum tahmini şöyledir

[ \hat{\boldsymbol{x}}_{1,1}

\begin{bmatrix} 11{,}009.37\ 201.43 \end{bmatrix} ]

  • Çok değişkenli kovaryans güncellemesinde sayısal olarak daha kararlı olan Joseph formu yaygın biçimde kullanılır

[ \boldsymbol{P}_{n,n}

(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} (\boldsymbol{I}-\boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n \boldsymbol{R}_n \boldsymbol{K}_n^T ]

  • Basitleştirilmiş kovaryans güncelleme denklemi de literatürde sık görülür

[ \boldsymbol{P}_{n,n}

(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]

  • Kesin aritmetikte iki biçim aynı sonucu verir, ancak bilgisayar uygulamalarında Joseph formu genel olarak daha sayısal kararlılık sağlar
  • Örnekte basitleştirilmiş denklemle hesaplanan güncellenmiş kovaryans şöyledir

[ \boldsymbol{P}_{1,1}

\begin{bmatrix} 14.57 & 1.43\ 1.43 & 0.71 \end{bmatrix} ]

  • Güncellenmiş kovaryansın diyagonal elemanları, tahmin kovaryansı ((28.5, 1.25)) ile ölçüm kovaryansı ((36, 2.25)) değerlerinden daha düşüktür
  • Yeni bilgi, belirsizliği yüksek olsa bile tahmin belirsizliğini azaltır; teorik olarak yeni ölçüm göz ardı edilmemelidir
  • Gerçek uygulamalarda güvenilir olmayan ölçümlerin reddedilmesi gerekebilir; aykırı değer işleme yöntemleri kitabın Outlier Treatment bölümünde ele alınır

Sonraki tahmin ve tekrar eden döngü

  • Iteration 1'in tahmin adımı, başlangıç noktası güncellenmiş (\hat{\boldsymbol{x}}{1,1}) ve (\boldsymbol{P}{1,1}) olacak şekilde Iteration 0 ile aynıdır
  • Durum tahmini sonucu şöyledir

[ \hat{\boldsymbol{x}}_{2,1}

\boldsymbol{F} \hat{\boldsymbol{x}}_{1,1}

\begin{bmatrix} 12{,}016.5\ 201.43 \end{bmatrix} ]

  • Kovaryans tahmini sonucu şöyledir

[ \boldsymbol{P}_{2,1}

\begin{bmatrix} 52.86 & 7.47\ 7.47 & 1.71 \end{bmatrix} ]

  • Yeni ölçüm olmadan zaman geçtikçe belirsizlik doğal olarak artar; bu yüzden tahmin adımında varyans yeniden büyür
    • Hız belirsizliği, uzaklık belirsizliğini ek olarak artırır
    • Bu nedenle uzaklık varyansı, hız varyansından daha hızlı büyür
  • Örnek, Kalman filtresinin üç adımını gösterir
    • Başlatma: başlangıçta bir kez yapılır
    • Tahmin: dinamik modelle bir sonraki durum ve belirsizlik yayılır
    • Güncelleme: yeni ölçüm ile tahmin Kalman kazancı kullanılarak birleştirilir
  • Başlatmadan sonra Kalman filtresi sürekli tahmin-güncelleme döngüsü ile çalışır

1 yorum

 
GN⁺ 2025-01-19
Hacker News yorumları
  • Kalman filtresini tek başına öğrenmenin sırayı tersine çevirmek olduğunu, bu yüzden çevresindeki teorinin sağladığı büyük aydınlanmayı kaçırmanın kolay olduğunu hep söylerim
    Doğru anlamak için sırasıyla en küçük kareler yöntemine (doğrusal regresyon), özyinelemeli en küçük kareler yöntemine ve bilgi filtresine (KF’nin başka bir formülasyonu) bakmak iyi olur
    O zaman KF’nin, güncelleme adımının verimliliğini önceleyecek şekilde yeniden formüle edilmiş özyinelemeli en küçük kareler yönteminden ibaret olduğunu görürsünüz
    Bu PDF kısa bir genel bakış sunuyor: http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/...

    • Daha üst düzey kavramları anlamaya yardımcı olmaya çalışmanızı takdir ediyorum; ama geleneksel bir matematik/fizik altyapısı yoksa paylaştığınız PDF’nin ilk satırını bile anlamak zor, o bağlamı edinme sürecinin nasıl işlediği de pek belli değil
      Yine de entelektüel merakım var; bu merakı koruyarak adım adım anlayışa ilerleyecek bir yola ihtiyacım var
      The Six (Not So) Easy Pieces’ı yeniden okusam da anlamıyorum ama yine de değerli; Arnold’un kedisiyle oynarken de, sıkı bir bilimsel süreç olmadan, çıplak bir primat merakıyla normalde bağlam denen kapının ardında duran kavramı deneyimleyebiliyorsunuz
      http://gerdbreitenbach.de/arnold_cat/cat.html
    • En kolay yol, arka plan bilginize bağlı. Gauss dağılımının doğrusallığını ve Gauss’un Bayesçi sonsal dağılımını anlarsanız Kalman filtresi neredeyse kendiliğinden açık hâle gelir
      Tek boyutta, doğrusal tahmin X'1 = X0*a + b ile önsel dağılım elde edilir; mean(X'1) = mean(X0)*a + b, var(X'1) = var(X0)*a^2 olur; a ve b varsayılan dinamikleri temsil eder
      Gauss’un sonsal dağılımı, önsel dağılım ile gözlemin hassasiyet ağırlıklı ortalaması olduğundan X1 = (1 - K)X'1 + YK ve K = (1/var(X'1))/(1/var(X'1) + 1/var(Y)) olur; Y ise Gauss gözlemidir
      Bunu tekrarlarsanız Kalman filtresi elde edilir; çok boyutlu Gauss’un doğrusallığını biliyorsanız çok boyuta genellemek de sezgiseldir
      Ancak çok boyutlu Gauss’un doğrusallığı ve Gauss sonsal dağılımının kendisi kolay konular olmayabilir
    • Bunu söyleyip durabilirsiniz ama bu tür çetrefilli matematik, filtreyi fiilen uygulayan kişiler için çoğu zaman fazla kaçıyor
    • Kalman filtresini Bayesçi açıdan anlamamda şu makale çok yararlı olmuştu: Meinhold, Richard J., and Nozer D. Singpurwalla. 1983. "Understanding the Kalman Filter." American Statistician 37 (May): 123–27
    • Muhtemelen doğru, ama bu tavsiyeyi izleyen birçok kişinin yolda vazgeçip KF’ye ulaşamama ihtimali yüksek
  • Bu konu ne zaman açılsa bu kaynak da beraberinde gelir; tersi de geçerli: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...

    • Bu, Kalman filtresi kaynakları arasında en sevdiklerimden biri. Bayes ilkelerinden türetildiği için çok daha sezgisel; filtreyi ayarlamayı veya değiştirmeyi anlamak da kolaylaşıyor
      Jupyter notebook kullanması da çok iyi
  • Olasılık dağılımları için bir sembolik hesaplama aracı hâlâ yok gibi görünüyor
    Örneğin iki çok değişkenli Gauss olasılık yoğunluk fonksiyonunu çarpıp kovaryans matrisini elde eden ya da Kalman filtresinin tüm bileşenlerini (tahmin modeli ve gözlem süreci) tanımladığınızda gereken formülleri sympy’nin lambdify’ı gibi çıkaran bir araçtan söz ediyorum

  • Q ve R sabitse, ki genelde öyledir, kazanç hızla yakınsar ve Kalman filtresi tahmin adımı eklenmiş üstel filtreye neredeyse eşdeğer hâle gelir
    Birçok kişi için bu açıklama çok daha anlaşılır ve gerçek kullanım biçimiyle de iyi örtüşür
    Çünkü genellikle Q ve R elle ayarlanıp “iyi görününceye” kadar uydurulur ve sonra bir daha değiştirilmez
    Üstelik Q ve R gibi birden fazla değeri ayarlamak yerine yalnızca tek bir kazancı elle ayarlamak yeterli olur

    • Kalman filtresinde gerçekten anlayamadığım kısım tam olarak Q ve R’nin nasıl seçileceğiydi
      Sonuç makul görünene kadar sadece ayarlıyor muyuz? Öyleyse tamamen aşırı uyum olmayan durumlarda bile nasıl doğru çalıştığını anlamıyorum
      Örneğin videoda bir kuşu takip ediyorsanız bir Q seçebilirsiniz; ama gürültü istatistikleri günün saatine göre değişebilir. Böyle bir durumda ne yapmalı?
  • İlgili yazı: Kalman filter from the ground up - https://news.ycombinator.com/item?id=37879715 - Ekim 2023, 150 yorum
    Yukarıdaki başlığa koymak için en iyi yılın hangisi olduğunu da merak ediyorum

  • Kalman filtresi, daha genel bir konu olan David G. Luenberger’in Optimization by Vector Space Methods, John Wiley and Sons, Inc., New York, 1969 eserinde yer alıyor

  • Birden aklıma şu geldi. Yalnızca görgü tanığı ifadelerine dayanan olaylar da bir şekilde vektör olarak kodlanıp Kalman filtresi ile ele alınarak gözlemlerin kanıt değeri güçlendirilebilir mi?
    Yalanları ve yanlışlıkları hep “hata” olarak ele almak gibi
    Phoenix lights veya genel olarak UFO’lar, hayaletler, ölüme yakın deneyimler; daha gündelik olarak da tecavüz iddiaları gibi şeyleri düşünüyorum

    • Yalnızca bu tür şeyler için doğrusal bir model oluşturabildiğinizde mümkün olur
  • En iyi kaynak neredeyse her zaman şudur: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
    Python kullanmayanlar için bile harika; konunun genelini gerçekten iyi tarıyor

  • Bu konuyu öğrenirken papyonlu Michael van Biezem’in Kalman filtresi derslerini izleyen başka biri var mı?
    https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...

    • Sadece aritmetikle gerçekten çok çeşitli konu ve dersleri öğretme biçimini seviyorum. Hesaplanabilir tüm matematik aritmetiğe indirgenebilir
  • Gerçekten bilmeniz gereken tek cümle şu: “Bu filtre adını Rudolf E. Kálmán’dan (19 Mayıs 1930-2 Temmuz 2016) almıştır. 1960’ta Kálmán, ayrık veri doğrusal filtreleme problemine özyinelemeli bir çözüm açıklayan ünlü makalesini yayımladı”