<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://program.sonsuz.us/feed.xml" rel="self" type="application/atom+xml" /><link href="https://program.sonsuz.us/" rel="alternate" type="text/html" /><updated>2026-11-03T12:06:00+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">Akıllı Sözleşmeler Nasıl Çalışır? Blok Zincirde Koşullu Ödemelerin Kodla Yönetimi</title><link href="https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi/" rel="alternate" type="text/html" title="Akıllı Sözleşmeler Nasıl Çalışır? Blok Zincirde Koşullu Ödemelerin Kodla Yönetimi" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi/"><![CDATA[<p>Bir alışverişte paranın yalnızca teslimat onaylandıktan sonra satıcıya gönderildiğini düşünün. Normalde bu süreci bir aracı yönetir. Akıllı sözleşmelerde ise kurallar kodla tanımlanır, para sözleşmenin adresinde tutulur ve uygun işlem geldiğinde ödeme gerçekleştirilir. Ancak bu dijital kasanın neyi gerçekten bildiğini anlamak, en az kilidini tasarlamak kadar önemlidir.</p>

<p>``</p>

<h2 id="temel-fikir-paylaşılan-bir-durum-makinesi">Temel fikir: Paylaşılan bir durum makinesi</h2>

<p>Akıllı sözleşme, blok zincire yerleştirilmiş programdır. Ethereum gibi ağlarda kod, Ethereum Sanal Makinesi üzerinde yürütülür. Sözleşmenin bakiyesi, yetkili adresleri ve ödeme durumu kalıcı veriler olarak saklanır.</p>

<p>Bunu bir durum makinesi gibi düşünebiliriz: Sözleşme başlangıçta <strong>ödeme bekliyor</strong>, ardından <strong>fonlandı</strong>, son olarak <strong>ödendi</strong> durumuna geçer. Her geçişin koşulları vardır. Yetkisiz bir kullanıcı düğmeye bassa bile programın kontrollerini geçemez. Güven, tarafların iyi niyetinden çok, kodun doğruluğuna ve ağın güvenlik varsayımlarına dayanır.</p>

<h2 id="otomatik-ödeme-hangi-adımlarla-gerçekleşir">“Otomatik” ödeme hangi adımlarla gerçekleşir?</h2>

<ol>
  <li><strong>İşlem oluşturulur:</strong> Kullanıcı, sözleşmenin bir fonksiyonunu çağıran işlemi özel anahtarıyla imzalar.</li>
  <li><strong>Kod yürütülür:</strong> İşlemi işleyen düğümler, ilgili blok bağlamında aynı kuralları uygulayarak sonucu hesaplar.</li>
  <li><strong>Durum güncellenir:</strong> Koşullar sağlanırsa bakiye ve kayıtlar değişir. Bir kontrol başarısız olursa işlem geri alınır; harcanan işlem ücretleri genellikle yine ödenir.</li>
</ol>

<p>Buradaki kritik ayrıntı şudur: Sözleşmeler kendiliğinden uyanıp çalışmaz. Bir işlemle tetiklenmeleri gerekir. Zamanlanmış işler için harici otomasyon hizmetleri kullanılabilir; bunlar da sonuçta zincire işlem gönderir.</p>

<p>Ödeme kuralını şöyle özetleyebiliriz:</p>

\[T = B \cdot \mathbf{1}_{A \land \neg K}\]

<p>Burada $B$ emanetteki tutar, $A$ yetkili alıcının onayı, $K$ ise sözleşmenin kapanmış olmasıdır. Gösterge fonksiyonu, koşul doğruysa bir, yanlışsa sıfır üretir. Yani onay yoksa veya ödeme zaten yapıldıysa transfer gerçekleşmez.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Merkezi ödeme sistemi</th>
      <th>Akıllı sözleşme</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kurallar</td>
      <td>Sunucu uygulamasında</td>
      <td>Zincirdeki kodda</td>
    </tr>
    <tr>
      <td>İşlemi yürütme</td>
      <td>İşletmeci altyapısı</td>
      <td>Ağın işlem yürütme mekanizması</td>
    </tr>
    <tr>
      <td>Değişiklik</td>
      <td>İşletmeci güncelleyebilir</td>
      <td>Tasarıma bağlı, çoğunlukla sınırlı</td>
    </tr>
    <tr>
      <td>Dış dünya bilgisi</td>
      <td>API ve kurum kayıtları</td>
      <td>Oracle veya taraf beyanı</td>
    </tr>
  </tbody>
</table>

<h2 id="solidity-ile-küçük-bir-emanet-kasası">Solidity ile küçük bir emanet kasası</h2>

<p>Aşağıdaki örnek, alıcının sözleşmeyi oluştururken yatırdığı ETH’yi saklar. Yalnızca aynı alıcı onay verdiğinde satıcıya ödeme yapar.</p>

<pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Emanet {
    address public immutable alici;
    address payable public immutable satici;
    uint256 public immutable tutar;
    bool public kapandi;

    constructor(address payable _satici) payable {
        require(msg.value &gt; 0, "Bos emanet");
        require(_satici != address(0), "Gecersiz satici");
        alici = msg.sender;
        satici = _satici;
        tutar = msg.value;
    }

    function teslimatiOnayla() external {
        require(msg.sender == alici, "Yetkisiz kullanici");
        require(!kapandi, "Zaten odendi");

        kapandi = true;
        (bool basarili, ) = satici.call{value: tutar}("");
        require(basarili, "Transfer basarisiz");
    }
}
</code></pre>

<p><code class="language-plaintext highlighter-rouge">payable</code>, oluşturma sırasında ETH kabul edilmesini sağlar. <code class="language-plaintext highlighter-rouge">msg.sender</code> çağıranın adresidir; <code class="language-plaintext highlighter-rouge">msg.value</code> gönderilen tutarı belirtir. <code class="language-plaintext highlighter-rouge">immutable</code> alanlar oluşturulduktan sonra değiştirilemez. <code class="language-plaintext highlighter-rouge">require</code> ifadeleri ise geçersiz işlemleri durdurur.</p>

<p>Önemli güvenlik ayrıntısı, <code class="language-plaintext highlighter-rouge">kapandi</code> değişkeninin dış adrese para gönderilmeden önce güncellenmesidir. Bu, <strong>kontroller–etkiler–etkileşimler</strong> düzenidir: Önce koşulları denetle, sonra iç durumu değiştir, en son dış çağrı yap. Transfer başarısızsa <code class="language-plaintext highlighter-rouge">require</code> tüm bu durum değişikliklerini geri alır.</p>

<h2 id="blok-zincir-kargonun-geldiğini-nereden-bilir">Blok zincir kargonun geldiğini nereden bilir?</h2>

<p>Bilmez! Örnekte “teslimat”, alıcının onayı anlamına gelir; fiziksel teslimatın bağımsız kanıtı değildir. Kargo şirketinden bilgi alınacaksa oracle gerekir. Oracle, dış veriyi zincire taşıyan bir mekanizmadır ve sisteme yeni güven varsayımları ekler.</p>

<p>Bu yüzden “kod aracıları tamamen kaldırır” sözü her senaryoda doğru değildir. Özellikle fiyat, hava durumu veya teslimat gibi verilerde kaynağın doğruluğu, güncelliği ve manipülasyona dayanıklılığı ayrıca değerlendirilmelidir.</p>

<h2 id="gerçek-kullanımda-eksik-parçalar">Gerçek kullanımda eksik parçalar</h2>

<p>Bu örnekte alıcı hiç onay vermezse para kilitli kalır. Üretim tasarımında süreli iade, anlaşmazlık çözümü, olay kayıtları ve kapsamlı testler düşünülmelidir. Yeniden giriş saldırıları, erişim yetkileri ve yükseltme mekanizmaları ayrıca incelenmelidir.</p>

<p>İşlem ücretleri küçük ödemeleri pahalılaştırabilir; blokta görünmek de her ağda aynı kesinlik düzeyini sağlamaz. Akıllı sözleşme sihirli noter değildir: Açıkça tanımlanmış koşulları uygular. Başarılı tasarımın sırrı, yalnızca mutlu ödeme yolunu değil, herkesin fikrini değiştirdiği ve sistemlerin aksadığı günleri de kodlamaktır.</p>

<p><img src="/img/akilli-sozlesmeler-nasil-98.svg" alt="akilli-sozlesmeler-nasil-98" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="blok zincir" /><category term="akıllı sözleşmeler" /><category term="solidity" /><category term="ethereum" /><category term="finans" /><category term="otomasyon" /><summary type="html"><![CDATA[Bir alışverişte paranın yalnızca teslimat onaylandıktan sonra satıcıya gönderildiğini düşünün. Normalde bu süreci bir aracı yönetir. Akıllı sözleşmelerde ise kurallar kodla tanımlanır, para sözleşmenin adresinde tutulur ve uygun işlem geldiğinde ödeme gerçekleştirilir. Ancak bu dijital kasanın neyi gerçekten bildiğini anlamak, en az kilidini tasarlamak kadar önemlidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-sozlesmeler-nasil-98.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-sozlesmeler-nasil-98.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bir Sunucu Düştü, Sistem Ayakta: Dayanıklı Mimari ve Yedeklilik Stratejileri</title><link href="https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri/" rel="alternate" type="text/html" title="Bir Sunucu Düştü, Sistem Ayakta: Dayanıklı Mimari ve Yedeklilik Stratejileri" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri</id><content type="html" xml:base="https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri/"><![CDATA[<p>Bir ödeme sistemi düşünün: Kampanya başladı, trafik yükseldi ve veritabanı sunucusu aniden sustu. Kullanıcılar alışverişe devam edebilecek mi? Dayanıklı yazılım mimarisi, bu soruyu arıza yaşanmadan cevaplama sanatıdır. Amaç, hiçbir parçanın bozulmaması değil; parçalar bozulurken sistemin temel görevini güvenilir biçimde sürdürebilmesidir.</p>

<p>``</p>

<h2 id="dayanıklılık-sadece-fazladan-sunucu-değildir">Dayanıklılık, Sadece Fazladan Sunucu Değildir</h2>

<p><strong>Yedeklilik</strong>, aynı görevi yapabilecek alternatif kaynakların bulunmasıdır. <strong>Dayanıklılık</strong> ise arızayı algılama, etkisini sınırlama, alternatif kaynağa geçme ve toparlanma yeteneğidir. Garajda yedek lastik bulunması güzeldir; fakat lastiği değiştiremiyorsanız yolculuk yine durur!</p>

<p>Kullanılabilirlik, basitleştirilmiş bir modelde şöyle ifade edilir:</p>

\[A = \frac{MTBF}{MTBF + MTTR}\]

<p>Burada MTBF arızalar arasındaki ortalama çalışma süresi, MTTR ise ortalama hizmeti geri getirme süresidir. Dolayısıyla yalnızca arızaları azaltmak değil, toparlanmayı hızlandırmak da kullanılabilirliği yükseltir.</p>

<p>Bağımsız iki bileşenden herhangi birinin hizmet vermesi yeterliyse, kusursuz geçiş varsayımı altında:</p>

\[A_{toplam} = 1 - (1-A)^2\]

<p>Her bileşen yüzde 99,9 kullanılabilir olduğunda teorik sonuç yüzde 99,9999 olur. Ancak ortak elektrik, ağ veya yazılım hataları bu hesabın bağımsızlık varsayımını bozar.</p>

<h2 id="yedekliliğin-farklı-lezzetleri">Yedekliliğin Farklı Lezzetleri</h2>

<table>
  <thead>
    <tr>
      <th>Strateji</th>
      <th>Çalışma biçimi</th>
      <th>Temel bedel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Aktif-pasif</td>
      <td>Yedek, ana bileşenin yerine geçer</td>
      <td>Geçiş süresi</td>
    </tr>
    <tr>
      <td>Aktif-aktif</td>
      <td>Birden fazla bileşen trafik işler</td>
      <td>Koordinasyon karmaşıklığı</td>
    </tr>
    <tr>
      <td>N+1</td>
      <td>Gereken kapasiteye bir yedek eklenir</td>
      <td>Sınırlı arıza toleransı</td>
    </tr>
    <tr>
      <td>Çok bölgeli</td>
      <td>Kaynaklar ayrı coğrafi bölgelerde çalışır</td>
      <td>Gecikme ve maliyet</td>
    </tr>
  </tbody>
</table>

<p>İki sunucuyu aynı fiziksel makinede çalıştırmak, iki şemsiyeyi aynı delik çantaya koymaya benzer. Gerçek yedeklilik, <strong>arıza alanlarını</strong> ayırır: farklı makineler, erişilebilirlik alanları veya bölgeler. Yük dengeleyici, DNS, kimlik servisi ve bağlantı altyapısı da tek hata noktası bakımından incelenmelidir.</p>

<p>Aktif-pasif tasarımda yedeğin güncel veriye erişmesi gerekir. Aktif-aktif yaklaşımda ise eşzamanlı güncellemeler, veri çatışmaları ve oturum yönetimi özellikle önem kazanır.</p>

<h2 id="i̇ki-lider-bir-büyük-sorun">İki Lider, Bir Büyük Sorun</h2>

<p>Ağ bölünmesi sırasında iki düğüm kendisini lider sanabilir. <strong>Split-brain</strong> denen bu durum, aynı siparişin farklı biçimlerde işlenmesine neden olabilir. Çözüm yalnızca daha fazla kopya değildir; lider seçimi ve yazma yetkisinin sınırlandırılması gerekir.</p>

<p>Çoğunluk gerektiren bir karar için:</p>

\[q = \left\lfloor \frac{N}{2} \right\rfloor + 1\]

<p>Üç oy veren düğümde çoğunluk ikidir. Bu yapı, uygun bir konsensüs protokolüyle bir düğüm kaybına dayanabilir. Eski liderin yazmasını engellemek için hedef kaynağın doğruladığı <strong>fencing token</strong> kullanılabilir. Ağ bölünmesinde tutarlılığı korumak bazen bazı isteklere hizmet verememeyi gerektirir.</p>

<h2 id="kurtarma-hedeflerini-sayıya-dökün">Kurtarma Hedeflerini Sayıya Dökün</h2>

<ul>
  <li><strong>RTO:</strong> Hizmeti geri getirmek için hedeflenen azami süre.</li>
  <li><strong>RPO:</strong> Kabul edilebilir veri kaybının zaman karşılığı.</li>
</ul>

<p>Örneğin RTO iki dakika, RPO otuz saniye olabilir. Asenkron replikasyon veri kaybı riski taşırken senkron replikasyon gecikmeyi artırabilir. Yedekleme ise ayrı bir ihtiyaçtır: Replikasyon, yanlışlıkla silinen veriyi de kopyalayabilir. Bu yüzden geri yükleme testleri şarttır.</p>

<h2 id="yeniden-deneyin-ama-sonsuza-kadar-değil">Yeniden Deneyin, Ama Sonsuza Kadar Değil</h2>

<p>Geçici bağlantı sorunlarında sınırlı tekrar yararlıdır. Aşağıdaki Python 3.11+ örneği, asenkron bir okuma işlemini toplam süre bütçesi içinde yeniden dener:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">asyncio</span>
<span class="kn">import</span> <span class="n">random</span>

<span class="k">async</span> <span class="k">def</span> <span class="nf">resilient_read</span><span class="p">(</span><span class="n">fetch</span><span class="p">):</span>
    <span class="k">async</span> <span class="k">with</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">2.0</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">attempt</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">wait_for</span><span class="p">(</span>
                    <span class="nf">fetch</span><span class="p">(),</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.5</span>
                <span class="p">)</span>
            <span class="nf">except </span><span class="p">(</span><span class="nb">TimeoutError</span><span class="p">,</span> <span class="nb">ConnectionError</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">attempt</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
                    <span class="k">raise</span>
                <span class="n">delay</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">uniform</span><span class="p">(</span>
                    <span class="mi">0</span><span class="p">,</span> <span class="mf">0.1</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">**</span> <span class="n">attempt</span>
                <span class="p">)</span>
                <span class="k">await</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">fetch</code>, gerçek ağ çağrısını yapan asenkron fonksiyondur. Her denemenin zaman aşımı vardır; toplam bütçe iki saniyedir. Rastgele bekleme, yani <strong>jitter</strong>, istemcilerin aynı anda tekrar saldırmasını azaltır. Yazma işlemlerinde tekrar kullanacaksanız idempotency anahtarıyla yinelenen işlemleri önlemelisiniz.</p>

<p>Sürekli başarısız olan bağımlılıklarda <strong>circuit breaker</strong>, yeni çağrıları geçici olarak keser. <strong>Bulkhead</strong> yaklaşımı ise bağlantı ve işçi havuzlarını ayırarak bir servisin kaynakları tüketip diğerlerini sürüklemesini önler.</p>

<h2 id="dayanıklılığı-test-etmeden-i̇nanmayın">Dayanıklılığı Test Etmeden İnanmayın</h2>

<p>Gecikme, hata oranı, replikasyon gecikmesi ve geçiş süresi izlenmelidir. Önce izole ortamda düğüm kaybı ve ağ kesintisi deneyleri yapın; üretim deneylerini dar kapsam ve durdurma koşullarıyla yürütün. Kapasiteyi de sınayın: Yedek sistem bütün trafiği taşıyamıyorsa yalnızca dekoratif bir yedektir.</p>

<p>Son olarak, kritik işlevleri önceliklendirin. Öneri servisi kapanabilir; ödeme doğruluğu kapanamaz. Doğru sonuç üretilemiyorsa güvenli biçimde durmak, hatalı işleme devam etmekten iyidir. Dayanıklılık, daha çok sunucu değil, arıza anında daha doğru karar demektir.</p>

<p><img src="/img/bir-sunucu-dustu-67.svg" alt="bir-sunucu-dustu-67" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yazılım-mimarisi" /><category term="dayanıklılık" /><category term="yedeklilik" /><category term="dağıtık-sistemler" /><category term="hata-toleransı" /><category term="resilient" /><summary type="html"><![CDATA[Bir ödeme sistemi düşünün: Kampanya başladı, trafik yükseldi ve veritabanı sunucusu aniden sustu. Kullanıcılar alışverişe devam edebilecek mi? Dayanıklı yazılım mimarisi, bu soruyu arıza yaşanmadan cevaplama sanatıdır. Amaç, hiçbir parçanın bozulmaması değil; parçalar bozulurken sistemin temel görevini güvenilir biçimde sürdürebilmesidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/bir-sunucu-dustu-67.png" /><media:content medium="image" url="https://program.sonsuz.us/img/bir-sunucu-dustu-67.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dalgalara Rağmen Doğru Rota: İnsansız Deniz Araçlarında Otonom Navigasyon</title><link href="https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon/" rel="alternate" type="text/html" title="Dalgalara Rağmen Doğru Rota: İnsansız Deniz Araçlarında Otonom Navigasyon" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon</id><content type="html" xml:base="https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon/"><![CDATA[<p>Karada çizdiğiniz rota genellikle yerinde durur; denizde ise yolun kendisi sizi yana doğru taşır! İnsansız bir deniz aracının hedefe ulaşması, yalnızca pusulayı doğru yöne çevirmek değildir. Dalga, akıntı ve rüzgâr altında konumunu anlaması, sapmayı hesaplaması ve fiziksel sınırlarına uygun düzeltmeler yapması gerekir.</p>

<p><img src="/img/dalgalara-ragmen-dogru-90.svg" alt="dalgalara-ragmen-dogru-90" /></p>

<p>``</p>

<h2 id="navigasyonun-üç-katmanı">Navigasyonun üç katmanı</h2>

<p>Otonom navigasyonu üç çalışanı olan küçük bir köprüüstü gibi düşünün: durum kestirici nerede olduğunuzu söyler, rota planlayıcı güvenli yolu seçer, kontrolcü ise dümen ve itkiyi yönetir. Bu görevleri ayırmak, hem yazılımı test etmeyi hem de arızaların kaynağını bulmayı kolaylaştırır.</p>

<p>GNSS konumu ve yer üzerindeki hızı sağlar. IMU ivme ve açısal hareketleri ölçer; pusula baş açısına yardımcı olur. Ancak hiçbiri kusursuz değildir. GNSS kesilebilir, pusula manyetik etkilerden sapabilir, IMU hataları zamanla birikebilir. Genişletilmiş Kalman filtresi gibi yöntemler, hareket modeliyle ölçümleri birleştirerek daha tutarlı bir durum tahmini üretir. Zaman damgalarının uyumu da en az sensör seçimi kadar önemlidir.</p>

<table>
  <thead>
    <tr>
      <th>Kaynak</th>
      <th>Güçlü tarafı</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>GNSS</td>
      <td>Mutlak konum</td>
      <td>Kesinti ve ölçüm sıçraması</td>
    </tr>
    <tr>
      <td>IMU</td>
      <td>Hızlı hareket takibi</td>
      <td>Biriken hata</td>
    </tr>
    <tr>
      <td>Pusula</td>
      <td>Baş açısı desteği</td>
      <td>Manyetik bozulma</td>
    </tr>
    <tr>
      <td>Hareket modeli</td>
      <td>Ölçümler arasında tahmin</td>
      <td>Parametre belirsizliği</td>
    </tr>
  </tbody>
</table>

<h2 id="baş-açısı-ile-rota-açısı-aynı-değildir">Baş açısı ile rota açısı aynı değildir</h2>

<p>Aracın burnunun baktığı yön, baş açısı $ψ$; yer üzerindeki hareket yönü ise rota açısı $χ$ olsun. Akıntı varsa bu iki açı farklı olabilir. Burnunu kuzeye çevirmiş bir araç, doğuya akan su nedeniyle kuzeydoğuya ilerleyebilir.</p>

<p>Basitleştirilmiş yatay düzlem modeli şöyledir:</p>

\[\mathbf{v}_g=R(ψ)\mathbf{v}_b+\mathbf{v}_c\]

<p>Burada $\mathbf{v}<em>b$ suya göre hızı, $\mathbf{v}_c$ akıntıyı, $R(ψ)$ gövde koordinatlarından dünya koordinatlarına dönüşümü temsil eder. Yer hızından $χ=\operatorname{atan2}(v</em>{g,y},v_{g,x})$ hesaplanır. Dolayısıyla yalnızca baş açısını sabitlemek, çizilen rotayı korumaya yetmez.</p>

<h2 id="rotayı-kovalamak-yerine-önüne-bakmak">Rotayı kovalamak yerine önüne bakmak</h2>

<p>Yaygın çözümlerden biri, görüş hattı anlamına gelen LOS yönlendirmesidir. Sistem, rota üzerinde ileride bulunan hayali bir noktaya yönelir. Böylece küçük sapmalarda sert dönüşler yerine yumuşak yaklaşmalar üretir.</p>

<p>Düz bir rota parçasında yanal hata $e$, rota yönü $γ$ ve ileri bakış mesafesi $Δ$ için:</p>

\[χ_d=γ-\arctan(e/Δ),\qquad ψ_d=χ_d-β\]

<p>Buradaki $β$, süzülmüş $χ-ψ$ farkıyla yaklaşık olarak kestirilebilen sürüklenme açısıdır. Küçük $Δ$ daha çevik fakat daha salınımlı davranış yaratabilir. Büyük $Δ$ ise dönüşleri yumuşatırken rotaya dönüşü yavaşlatır. Çok düşük hızlarda rota açısı güvenilir olmadığından sürüklenme kestirimi sınırlandırılmalıdır.</p>

<h2 id="python-ile-yönlendirme-ve-dümen-kontrolü">Python ile yönlendirme ve dümen kontrolü</h2>

<p>Aşağıdaki örnek, LOS hedefini hesaplar ve baş açısı hatasını PI kontrolcüyle dümen komutuna dönüştürür. Koordinatlar metre cinsinden yerel düzlemde, açılar radyan cinsindedir. İntegral terimi kalıcı sapmayı azaltırken koşullu güncelleme, dümen doygunluğunda gereksiz birikimi önler.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>


<span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">angle</span><span class="p">):</span>
    <span class="nf">return </span><span class="p">(</span><span class="n">angle</span> <span class="o">+</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span> <span class="o">-</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span>


<span class="k">def</span> <span class="nf">los_heading</span><span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">beta</span><span class="p">,</span> <span class="n">lookahead</span><span class="o">=</span><span class="mf">15.0</span><span class="p">):</span>
    <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">end</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">end</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
    <span class="n">length</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">hypot</span><span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">length</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">lookahead</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Geçersiz rota veya bakış mesafesi</span><span class="sh">"</span><span class="p">)</span>
    <span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="o">=</span> <span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
    <span class="n">error</span> <span class="o">=</span> <span class="p">(</span><span class="n">dx</span> <span class="o">*</span> <span class="n">py</span> <span class="o">-</span> <span class="n">dy</span> <span class="o">*</span> <span class="n">px</span><span class="p">)</span> <span class="o">/</span> <span class="n">length</span>
    <span class="n">course</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">atan2</span><span class="p">(</span><span class="n">dy</span><span class="p">,</span> <span class="n">dx</span><span class="p">)</span> <span class="o">-</span> <span class="n">math</span><span class="p">.</span><span class="nf">atan2</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="n">lookahead</span><span class="p">)</span>
    <span class="k">return</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">course</span> <span class="o">-</span> <span class="n">beta</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">steering</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">heading</span><span class="p">,</span> <span class="n">integral</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">dt</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">dt pozitif olmalı</span><span class="sh">"</span><span class="p">)</span>
    <span class="n">error</span> <span class="o">=</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">target</span> <span class="o">-</span> <span class="n">heading</span><span class="p">)</span>
    <span class="n">raw</span> <span class="o">=</span> <span class="mf">1.2</span> <span class="o">*</span> <span class="n">error</span> <span class="o">+</span> <span class="mf">0.04</span> <span class="o">*</span> <span class="n">integral</span>
    <span class="n">command</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="o">-</span><span class="mf">0.6</span><span class="p">,</span> <span class="nf">min</span><span class="p">(</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">raw</span><span class="p">))</span>
    <span class="k">if</span> <span class="nf">abs</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.6</span> <span class="ow">or</span> <span class="n">raw</span> <span class="o">*</span> <span class="n">error</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
        <span class="n">integral</span> <span class="o">+=</span> <span class="n">error</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">integral</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">wrap</code>, açı sınırında yanlışlıkla tam tur dönülmesini engeller. İntegral değeri kontrol döngüleri arasında korunmalıdır. Katsayılar yalnızca örnektir; gerçek araçta hız, gövde dinamiği ve dümen sınırlarına göre ayarlanır. Ayrıca dümen işaretinin modelle uyumu doğrulanmalıdır. Bu kod, waypoint geçişlerini veya engelden kaçınmayı kapsamaz.</p>

<h2 id="her-dalgayla-kavga-etmeyin">Her dalgayla kavga etmeyin</h2>

<p>Dalga kaynaklı hızlı salınımları sürekli dümenle düzeltmek enerji tüketir ve mekanizmayı yorar. Uygun filtreleme ve kontrol bant genişliği, yavaş rota sapmalarını hızlı yalpalamadan ayırmaya yardımcı olur. Ancak aşırı filtreleme gecikme yaratır; bu yüzden kontrolcü, sensör ve gövde birlikte değerlendirilmelidir.</p>

<p>İtki kontrolü de önemlidir: birçok dümenli araç düşük hızda yönlendirme otoritesini kaybeder. Akıntı aracın kapasitesini aşıyorsa hiçbir yazılım istenen rotayı garanti edemez. Sistem güvenli bekleme, alternatif rota veya operatöre devretme davranışına geçmelidir. Trafikte ise çarpışma riski ve uygulanabilir COLREG kuralları ayrıca ele alınmalıdır.</p>

<p>Başarılı otonomi, denizi yenmek değil, etkilerini ölçüp yönetmektir. Önce simülasyonda akıntı, sensör kesintisi ve aktüatör sınırlarını deneyin; ardından kontrollü deniz testlerinde yanal hata, enerji tüketimi ve güvenlik davranışlarını karşılaştırın.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="otonom navigasyon" /><category term="insansız deniz araçları" /><category term="kontrol teorisi" /><category term="robotik" /><category term="sensör füzyonu" /><category term="python" /><summary type="html"><![CDATA[Karada çizdiğiniz rota genellikle yerinde durur; denizde ise yolun kendisi sizi yana doğru taşır! İnsansız bir deniz aracının hedefe ulaşması, yalnızca pusulayı doğru yöne çevirmek değildir. Dalga, akıntı ve rüzgâr altında konumunu anlaması, sapmayı hesaplaması ve fiziksel sınırlarına uygun düzeltmeler yapması gerekir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dalgalara-ragmen-dogru-90.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dalgalara-ragmen-dogru-90.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Elektrikli Araç Şarjında Yük Dengeleme: Herkese Enerji, Şebekeye Nefes</title><link href="https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes/" rel="alternate" type="text/html" title="Elektrikli Araç Şarjında Yük Dengeleme: Herkese Enerji, Şebekeye Nefes" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes</id><content type="html" xml:base="https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes/"><![CDATA[<p>Bir otoparkta sekiz elektrikli aracın aynı anda prize bağlandığını düşünün. Her sürücü hızlı şarj ister; bina ise asansörleri, klimaları ve aydınlatmasıyla zaten enerji tüketmektedir. İşte yük dengeleme, bu elektrikli açık büfede herkesin tabağını doldururken mutfağın sigortasını attırmamayı sağlar. Üstelik mesele yalnızca gücü kısmak değil, mevcut kapasiteyi akıllıca paylaşmaktır.</p>

<p>``</p>

<h2 id="önce-temel-mantık-güç-bütçesi">Önce temel mantık: Güç bütçesi</h2>

<p>Şarj istasyonlarının etiket güçlerini toplamak, altyapının gerçek ihtiyacını anlamak için yeterli değildir. Önemli olan, tesisin bağlantı kapasitesiyle o anda tüketilen diğer yükler arasındaki farktır. Dinamik yük dengeleme, ölçüm cihazlarından aldığı verilerle bu farkı düzenli olarak hesaplar ve araçlara ayrılabilecek toplam gücü günceller.</p>

<p>Basitleştirilmiş aktif güç modeli şöyledir:</p>

\[P_{EV}(t)=\max(0, P_{tesis}-P_{diger}(t)-P_{pay})\]

<p>Burada $P_{pay}$ güvenlik rezervidir. Her aracın aldığı güç için de şu sınırlar geçerlidir:</p>

\[\sum_i p_i(t) \le P_{EV}(t), \qquad 0 \le p_i(t) \le P_{i,max}\]

<p>Örneğin tesis sınırı 120 kW, diğer tüketimler 45 kW ve rezerv 10 kW ise araçlara 65 kW kalır. Sekiz aracın her biri 11 kW isterse toplam talep 88 kW olur. Eşit paylaşımda araç başına yaklaşık 8,125 kW ayrılır; böylece toplam tüketim rezerv dahil belirlenen sınırı aşmaz.</p>

<h2 id="statik-mi-dinamik-mi-öngörülü-mü">Statik mi, dinamik mi, öngörülü mü?</h2>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Nasıl çalışır?</th>
      <th>Güçlü yanı</th>
      <th>Sınırlaması</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Statik</td>
      <td>Şarja sabit bir üst sınır koyar</td>
      <td>Basit ve öngörülebilir</td>
      <td>Boş kapasiteyi kullanamayabilir</td>
    </tr>
    <tr>
      <td>Dinamik</td>
      <td>Anlık bina tüketimine göre bütçeyi değiştirir</td>
      <td>Kapasiteyi daha verimli kullanır</td>
      <td>Güvenilir ölçüm ve iletişim ister</td>
    </tr>
    <tr>
      <td>Öngörülü</td>
      <td>Tüketim, tarife ve ayrılış tahminleriyle planlar</td>
      <td>Maliyet ve zaman hedeflerini birlikte yönetir</td>
      <td>Tahmin hatalarından etkilenir</td>
    </tr>
  </tbody>
</table>

<p>Statik sistem, restoranın her akşam aynı sayıda masa açmasına benzer. Dinamik sistem müşteri yoğunluğunu izler; öngörülü sistem ise rezervasyon defterini de okur. Ancak hiçbir yöntem fiziksel bağlantı sınırını sihirli biçimde büyütmez.</p>

<h2 id="gücü-adil-dağıtmak-ağırlıklı-paylaşım">Gücü adil dağıtmak: Ağırlıklı paylaşım</h2>

<p>Eşit paylaşım anlaşılırdır, fakat ihtiyaçlar eşit olmayabilir. Yarım saat sonra ayrılacak servis aracı, gece boyunca park edecek araçtan daha yüksek öncelik alabilir. Ağırlıklı paylaşımda öncelikler sayısallaştırılır; araçların kabul edebileceği güç sınırları da korunur.</p>

<p>Aşağıdaki Python fonksiyonu bütçeyi ağırlıklara göre dağıtır. Sınırına ulaşan aracın kullanamadığı pay, sonraki turda diğerlerine aktarılır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">paylastir</span><span class="p">(</span><span class="n">butce</span><span class="p">,</span> <span class="n">araclar</span><span class="p">):</span>
    <span class="k">if</span> <span class="nf">any</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">araclar</span><span class="p">):</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">'</span><span class="s">Güç negatif, ağırlık sıfır veya negatif olamaz.</span><span class="sh">'</span><span class="p">)</span>

    <span class="n">kalan</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">butce</span><span class="p">)</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">]</span> <span class="o">*</span> <span class="nf">len</span><span class="p">(</span><span class="n">araclar</span><span class="p">)</span>
    <span class="n">aktif</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">a</span> <span class="ow">in</span> <span class="nf">enumerate</span><span class="p">(</span><span class="n">araclar</span><span class="p">)</span> <span class="k">if</span> <span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]</span>

    <span class="k">while</span> <span class="n">aktif</span> <span class="ow">and</span> <span class="n">kalan</span> <span class="o">&gt;</span> <span class="mf">1e-6</span><span class="p">:</span>
        <span class="n">toplam_agirlik</span> <span class="o">=</span> <span class="nf">sum</span><span class="p">(</span><span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span><span class="p">)</span>
        <span class="n">tur_butcesi</span> <span class="o">=</span> <span class="n">kalan</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span><span class="p">:</span>
            <span class="n">arac</span> <span class="o">=</span> <span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            <span class="n">pay</span> <span class="o">=</span> <span class="n">tur_butcesi</span> <span class="o">*</span> <span class="n">arac</span><span class="p">[</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="o">/</span> <span class="n">toplam_agirlik</span>
            <span class="n">ek</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">pay</span><span class="p">,</span> <span class="n">arac</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">-</span> <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">ek</span>
            <span class="n">kalan</span> <span class="o">-=</span> <span class="n">ek</span>

        <span class="n">aktif</span> <span class="o">=</span> <span class="p">[</span>
            <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span>
            <span class="k">if</span> <span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">-</span> <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mf">1e-6</span>
        <span class="p">]</span>

    <span class="k">return</span> <span class="n">sonuc</span>

<span class="n">araclar</span> <span class="o">=</span> <span class="p">[{</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">:</span> <span class="mf">11.0</span><span class="p">,</span> <span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">}</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)]</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">paylastir</span><span class="p">(</span><span class="mf">65.0</span><span class="p">,</span> <span class="n">araclar</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu örnek sekiz araç için yaklaşık 8,125 kW üretir. <code class="language-plaintext highlighter-rouge">max_kw</code>, yalnızca istasyonun etiketini değil, aracın ve bağlantının güncel sınırını temsil etmelidir. Fonksiyon sürekli güç paylaşımını gösterir; üretim sistemindeki haberleşme, hata yönetimi ve minimum akım koşullarını uygulamaz.</p>

<h2 id="sahada-matematiğin-yanına-mühendislik-koyun">Sahada matematiğin yanına mühendislik koyun</h2>

<p>Gerçek tesislerde toplam kW sınırı tek başına yeterli değildir. Özellikle tek fazlı araçlar, toplam kapasite uygun görünürken bir fazı aşırı yükleyebilir. Bu nedenle faz akımları, kablo sınırları, koruma elemanları ve gerektiğinde görünür güç de izlenmelidir. Yazılım, elektriksel korumanın yerine geçmez.</p>

<p>AC şarjda izin verilen minimum akımın altında kesintisiz paylaşım mümkün olmayabilir. Böyle durumlarda bazı oturumları sırayla bekletmek gerekir. Ölçüm gecikmesine karşı rezerv bırakmak, komut değişimlerini yumuşatmak ve iletişim kesildiğinde güvenli sınırlara dönmek de önemlidir.</p>

<h2 id="optimizasyonun-gerçek-hedefi">Optimizasyonun gerçek hedefi</h2>

<p>Güç, anlık hızdır; enerji ise zaman boyunca biriken miktardır. Sabit güçte bataryaya aktarılan yaklaşık enerji $E=\eta P\Delta t$ ile hesaplanır. Burada $\eta$ verim, $\Delta t$ saat cinsinden süredir. Ayrılış zamanına kadar gereken enerjiyi tamamlamak, her aracı sürekli maksimum güçte tutmaktan daha anlamlıdır.</p>

<p>Ucuz saatlere kaydırma, güneş üretimini değerlendirme ve tesisin tepe talebini azaltma aynı planın parçaları olabilir. Fakat düşük öncelikli araçların sürekli beklememesi için bekleme süresi de hesaba katılmalıdır. Başarılı yük dengeleme, en yüksek anlık gücü değil; güvenli, adil ve zamanında tamamlanan şarjı hedefler.</p>

<p><img src="/img/elektrikli-arac-sarjinda-28.svg" alt="elektrikli-arac-sarjinda-28" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="elektrikli araç" /><category term="yük dengeleme" /><category term="şarj altyapısı" /><category term="akıllı şebeke" /><category term="python" /><category term="enerji yönetimi" /><summary type="html"><![CDATA[Bir otoparkta sekiz elektrikli aracın aynı anda prize bağlandığını düşünün. Her sürücü hızlı şarj ister; bina ise asansörleri, klimaları ve aydınlatmasıyla zaten enerji tüketmektedir. İşte yük dengeleme, bu elektrikli açık büfede herkesin tabağını doldururken mutfağın sigortasını attırmamayı sağlar. Üstelik mesele yalnızca gücü kısmak değil, mevcut kapasiteyi akıllıca paylaşmaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/elektrikli-arac-sarjinda-28.png" /><media:content medium="image" url="https://program.sonsuz.us/img/elektrikli-arac-sarjinda-28.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Güneş Panelleri Şebekenin Ritmini Nasıl Yakalar? Dağıtık Enerjide Senkronizasyon</title><link href="https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon/" rel="alternate" type="text/html" title="Güneş Panelleri Şebekenin Ritmini Nasıl Yakalar? Dağıtık Enerjide Senkronizasyon" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon</id><content type="html" xml:base="https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon/"><![CDATA[<p><img src="/img/gunes-panelleri-sebekenin-56.svg" alt="gunes-panelleri-sebekenin-56" /></p>

<p>Çatınızdaki güneş panelleri öğle vakti elektrik üretirken şehir şebekesi kendi ritminde çalışmaya devam eder. Peki bu iki kaynak birbirine bağlandığında neden elektriksel bir kakofoni oluşmaz? Çünkü arada, enerjiyi dönüştürmenin yanında şebekenin temposunu izleyen bir inverter bulunur. Bu yazıda küçük üreticilerin dev elektrik orkestrasına nasıl katıldığını, kontrol teorisi ve küçük bir Python deneyiyle keşfedeceğiz.
``</p>

<h2 id="önce-aynı-dili-konuşmak-gerekir">Önce aynı dili konuşmak gerekir</h2>

<p>Güneş paneli doğru akım, yani DC üretir. Şebeke ise Türkiye’de nominal olarak 50 Hz alternatif akımla çalışır. İnverter, DC enerjiyi anahtarlama elemanlarıyla AC’ye dönüştürür; filtreler de anahtarlamanın yüksek frekanslı bileşenlerini azaltır. Ancak yalnızca sinüs benzeri bir dalga üretmek yetmez: bağlantı noktasındaki gerilim, frekans ve faz ilişkisi kontrol edilmelidir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Güneş paneli tarafı</th>
      <th>Şebeke tarafı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Elektrik biçimi</td>
      <td>DC</td>
      <td>AC</td>
    </tr>
    <tr>
      <td>Gerilim davranışı</td>
      <td>Işınım ve yüke bağlı</td>
      <td>Şebeke koşullarına bağlı</td>
    </tr>
    <tr>
      <td>Temel kontrol</td>
      <td>Çalışma noktasını seçmek</td>
      <td>Uyumlu akım enjekte etmek</td>
    </tr>
    <tr>
      <td>Aradaki köprü</td>
      <td>DC bağlantı devresi</td>
      <td>İnverter ve filtre</td>
    </tr>
  </tbody>
</table>

<p>Önemli ayrıntı şudur: Yaygın şebeke takip eden inverterler, güçlü şebekeye kendi gerilimlerini zorla dayatmaz. Şebeke gerilimini referans alarak verecekleri akımı düzenler. Kalabalıkta yürüyüş temposunu tutturmak gibi düşünün; herkesi kendi adımınıza uydurmaya çalışmazsınız.</p>

<h2 id="faz-neden-bu-kadar-önemli">Faz neden bu kadar önemli?</h2>

<p>İki AC büyüklüğünün faz farkı, enerjinin nasıl aktarıldığını belirler. Tek fazlı, sinüzoidal temel bileşen için aktif ve reaktif güç ilişkileri şöyledir:</p>

\[P=VI\cos\varphi, \qquad Q=VI\sin\varphi\]

<p>Burada $V$ ve $I$ etkin değerler, $\varphi$ ise gerilim ile akım arasındaki faz farkıdır. Aktif güç $P$, işe dönüşen enerji akışını temsil eder. Reaktif güç $Q$ ise elektrik ve manyetik alanlarla ilişkili alışveriştir; uygun kontrol edildiğinde yerel gerilim yönetimine yardımcı olabilir.</p>

<p>Birçok inverter, aktif güç aktarırken akımı gerilimle aynı fazda tutmaya çalışır. Gerektiğinde reaktif güç de sağlar. Ancak bu görevler bağımsız sınırsız düğmeler değildir: inverterin akım ve görünür güç kapasitesi paylaşılır. Daha fazla reaktif destek, bazı koşullarda aktarılabilecek aktif gücü azaltabilir.</p>

<h2 id="pll-elektronik-bir-ritim-dedektifi">PLL: Elektronik bir ritim dedektifi</h2>

<p>Faz kilitlemeli döngü, yani <strong>PLL</strong>, ölçülen şebeke geriliminden faz açısını tahmin eder. Yaygın yaklaşım, gerilim bileşenlerini dönen bir koordinat sistemine taşımaktır. Tahmin doğruysa uygun eksendeki hata yaklaşık sıfıra iner. PI denetleyici bu hatadan frekans düzeltmesi üretir:</p>

\[\hat{\omega}=\omega_0+K_p e+K_i\int e\,dt, \qquad \frac{d\hat{\theta}}{dt}=\hat{\omega}\]

<p>Aşağıdaki örnek, ideal ve normalize edilmiş iki dik gerilim bileşeniyle çalışan basitleştirilmiş bir PLL simülasyonudur. Gerçek donanıma komut göndermez.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>

<span class="n">dt</span> <span class="o">=</span> <span class="mf">0.0005</span>
<span class="n">theta</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">integral</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">omega_ref</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="mi">50</span>
<span class="n">kp</span><span class="p">,</span> <span class="n">ki</span> <span class="o">=</span> <span class="mf">80.0</span><span class="p">,</span> <span class="mf">1600.0</span>

<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">3000</span><span class="p">):</span>
    <span class="n">t</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="n">grid_phase</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="mf">50.1</span> <span class="o">*</span> <span class="n">t</span> <span class="o">+</span> <span class="mf">0.4</span>
    <span class="n">alpha</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">grid_phase</span><span class="p">)</span>
    <span class="n">beta</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">grid_phase</span><span class="p">)</span>

    <span class="n">error</span> <span class="o">=</span> <span class="n">beta</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">alpha</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
    <span class="n">integral</span> <span class="o">+=</span> <span class="n">error</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="n">omega</span> <span class="o">=</span> <span class="n">omega_ref</span> <span class="o">+</span> <span class="n">kp</span> <span class="o">*</span> <span class="n">error</span> <span class="o">+</span> <span class="n">ki</span> <span class="o">*</span> <span class="n">integral</span>
    <span class="n">theta</span> <span class="o">=</span> <span class="p">(</span><span class="n">theta</span> <span class="o">+</span> <span class="n">omega</span> <span class="o">*</span> <span class="n">dt</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">k</span> <span class="o">%</span> <span class="mi">1000</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
        <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">t=</span><span class="si">{</span><span class="n">t</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s">s, tahmin=</span><span class="si">{</span><span class="n">omega</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">f</span><span class="si">}</span><span class="s">Hz</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">error</code>, gerçek faz ile tahmin arasındaki farkın sinüsüdür. İntegral terimi kalıcı frekans sapmasını giderir; <code class="language-plaintext highlighter-rouge">theta</code> ise tahmin edilen açıyı ilerletir. Tahmin, bu ideal koşullarda 50,1 Hz’e yaklaşır. Kazançlar örnektir: gerçek tasarımda gürültü, harmonikler, gecikme ve sınırlandırmalar değerlendirilir. Tek fazlı uygulamalarda dik bileşenin ayrıca oluşturulması gerekir.</p>

<h2 id="senkronizasyon-yalnızca-başlangıçtır">Senkronizasyon yalnızca başlangıçtır</h2>

<p>Panel tarafındaki MPPT algoritması en verimli çalışma noktasını ararken, DC bağlantı gerilimi kontrolü enerji dengesini yönetir. Daha hızlı akım döngüsü de şebekeye verilen akımı referansa uydurur. Bu katmanların bant genişlikleri uyumlu seçilmezse kontrolcüler birbirinin işine karışabilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Ana referans</th>
      <th>Tipik rol</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Şebeke takip eden</td>
      <td>Ölçülen şebeke gerilimi</td>
      <td>Mevcut şebekeye güç vermek</td>
    </tr>
    <tr>
      <td>Şebeke oluşturan</td>
      <td>İç gerilim ve frekans referansı</td>
      <td>Özellikle zayıf şebeke veya ada işletimini desteklemek</td>
    </tr>
  </tbody>
</table>

<p>Şebeke oluşturan kontrol de sınırsız güç üretmez; enerji kaynağı ve akım sınırları hâlâ belirleyicidir. Özellikle çok sayıda inverter bağlandığında, şebekenin empedansı ve kontrol döngülerinin etkileşimi kararlılık analizinin merkezine yerleşir.</p>

<h2 id="güvenli-bağlantı-iyi-ritimden-fazlasıdır">Güvenli bağlantı, iyi ritimden fazlasıdır</h2>

<p>Şebeke kesildiğinde üretimin kontrolsüz biçimde hattı beslememesi için adalanma koruması gerekir. Gerilim ve frekans korumaları, topraklama, bağlantı izinleri ve yerel şebeke kuralları da entegrasyonun parçasıdır. Gerçek bağlantı sertifikalı ekipman ve yetkin uzmanlarla yapılmalıdır. Kısacası başarılı entegrasyon; ritmi yakalamak, doğru miktarda enerji aktarmak ve gerektiğinde güvenle sahneden çekilmektir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="dağıtık enerji" /><category term="güneş enerjisi" /><category term="şebeke entegrasyonu" /><category term="inverter" /><category term="pll" /><category term="python" /><summary type="html"><![CDATA[Çatınızdaki güneş panelleri öğle vakti elektrik üretirken şehir şebekesi kendi ritminde çalışmaya devam eder. Peki bu iki kaynak birbirine bağlandığında neden elektriksel bir kakofoni oluşmaz? Çünkü arada, enerjiyi dönüştürmenin yanında şebekenin temposunu izleyen bir inverter bulunur. Bu yazıda küçük üreticilerin dev elektrik orkestrasına nasıl katıldığını, kontrol teorisi ve küçük bir Python deneyiyle keşfedeceğiz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/gunes-panelleri-sebekenin-56.png" /><media:content medium="image" url="https://program.sonsuz.us/img/gunes-panelleri-sebekenin-56.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">İnsansız Araçlarda Pil Yönetimi: Görev Süresini Algoritmalarla Uzatmak</title><link href="https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak/" rel="alternate" type="text/html" title="İnsansız Araçlarda Pil Yönetimi: Görev Süresini Algoritmalarla Uzatmak" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak</id><content type="html" xml:base="https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak/"><![CDATA[<p><img src="/img/insansiz-araclarda-pil-28.svg" alt="insansiz-araclarda-pil-28" /></p>

<p>Bir insansız aracın başarılı olması, yalnızca hedefe ulaşmasına değil, geri dönecek enerjiyi de saklamasına bağlıdır. Pil göstergesi yüzde yirmiyi gösterirken son bir fotoğraf çekmek cazip gelebilir; ancak algoritmanın romantizme değil, enerji bütçesine ihtiyacı vardır. Peki görev değeri, uçuş süresi ve güvenlik nasıl birlikte optimize edilir?
``</p>

<h2 id="önce-enerjinin-muhasebesini-tutalım">Önce enerjinin muhasebesini tutalım</h2>

<p>Pil kapasitesi, görev boyunca kullanılabilecek enerjiyle aynı şey değildir. Sıcaklık, yaşlanma, yüksek akım çekişi ve gerilim düşümü gerçek kapasiteyi etkiler. Bu nedenle yalnızca nominal amper-saat değerine bakmak yanıltıcıdır. Enerji yaklaşık olarak gerilim ve kapasitenin çarpımıyla hesaplanabilir; ancak planlama sırasında ölçümlerle güncellenen bir tahmin kullanmak daha güvenilirdir.</p>

<p>Anlık güç tüketimi $P(t)=V(t)I(t)$ şeklindedir. Güç watt, zaman saniye olduğunda tüketilen enerji:</p>

\[E_{\mathrm{Wh}}=\frac{1}{3600}\int_0^{T_{\mathrm{s}}}P(t)\,dt\]

<p>Buradaki önemli ayrım şudur: güç, tüketim hızıdır; enerji ise toplam harcamadır. Daha güçlü çalışan bir motor, görevi yeterince hızlı bitirirse toplamda daha az enerji tüketebilir. Tersine, yavaş ilerlemek elektroniklerin daha uzun süre açık kalmasına neden olabilir.</p>

<table>
  <thead>
    <tr>
      <th>Etken</th>
      <th>Enerjiye etkisi</th>
      <th>Planlamadaki karşılığı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hız</td>
      <td>Süreyi ve hareket gücünü değiştirir</td>
      <td>Ekonomik hız seçimi</td>
    </tr>
    <tr>
      <td>Rüzgâr veya eğim</td>
      <td>Güzergâha bağlı maliyet oluşturur</td>
      <td>Yön duyarlı rota</td>
    </tr>
    <tr>
      <td>Sensör kullanımı</td>
      <td>Ek güç tüketir</td>
      <td>Gerektiğinde etkinleştirme</td>
    </tr>
    <tr>
      <td>Pil sıcaklığı</td>
      <td>Kullanılabilir kapasiteyi etkiler</td>
      <td>Dinamik kapasite tahmini</td>
    </tr>
  </tbody>
</table>

<p>Örneğin bir kara aracında aerodinamik güç, uygun koşullarda hızın yaklaşık küpüyle büyür. Drone içinse askıda kalma, ileri uçuş ve tırmanış farklı modeller gerektirir. Tek bir “kilometre başına tüketim” sabiti her platforma uymaz.</p>

<h2 id="görevi-bir-optimizasyon-problemine-çevirmek">Görevi bir optimizasyon problemine çevirmek</h2>

<p>Her alt göreve bir ödül $r_i$, enerji maliyeti $e_i$ ve süre $t_i$ atayalım. Seçim değişkeni $x_i\in{0,1}$ olsun. Amaç, toplam görev değerini artırmaktır:</p>

\[\max \sum_i r_i x_i\]

<p>Enerji kısıtı ise şöyledir:</p>

\[\sum_i e_i x_i \le E_{\text{tahmini}}-E_{\text{dönüş}}-E_{\text{rezerv}}\]

<p>Benzer biçimde toplam süre, dönüş süresi çıkarılmış zaman bütçesini aşmamalıdır. Dönüş enerjisi planlı dönüş içindir; rezerv ise tahmin hataları ve beklenmeyen koşullar için ayrı tutulur.</p>

<p>Bu sade model, iki kısıtlı sırt çantası problemidir. Görev sırası ve aralarındaki mesafeler de karar değişkeniyse rota optimizasyonu devreye girer. Dolayısıyla en kısa yol, en değerli veya en güvenli görev planı olmayabilir.</p>

<h2 id="python-ile-enerji-ve-süre-bütçelemesi">Python ile enerji ve süre bütçelemesi</h2>

<p>Aşağıdaki dinamik programlama örneği, bağımsız görevlerden en değerli birleşimi seçer. Maliyetler hareket ve sensör tüketimini içeren önceden hesaplanmış değerlerdir. Görevler arası geçiş maliyetinin seçim sırasına bağlı olduğu gerçek rotalar için bu varsayım yeterli değildir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">math</span> <span class="kn">import</span> <span class="n">ceil</span><span class="p">,</span> <span class="n">floor</span>

<span class="n">gorevler</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">harita</span><span class="sh">"</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">6</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">ornek</span><span class="sh">"</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">tarama</span><span class="sh">"</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">12</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">fotograf</span><span class="sh">"</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
<span class="p">]</span>

<span class="n">adim</span> <span class="o">=</span> <span class="mf">0.5</span>  <span class="c1"># Wh
</span><span class="n">enerji_limiti</span> <span class="o">=</span> <span class="nf">floor</span><span class="p">((</span><span class="mi">80</span> <span class="o">-</span> <span class="mi">12</span> <span class="o">-</span> <span class="mi">8</span><span class="p">)</span> <span class="o">/</span> <span class="n">adim</span><span class="p">)</span>
<span class="n">sure_limiti</span> <span class="o">=</span> <span class="mi">30</span> <span class="o">-</span> <span class="mi">5</span>  <span class="c1"># dakika; dönüş hariç
# Anahtar: (enerji dilimi, dakika)
# Değer: (toplam ödül, seçilen görevler)
</span><span class="n">dp</span> <span class="o">=</span> <span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">[])}</span>

<span class="k">for</span> <span class="n">ad</span><span class="p">,</span> <span class="n">enerji</span><span class="p">,</span> <span class="n">sure</span><span class="p">,</span> <span class="n">odul</span> <span class="ow">in</span> <span class="n">gorevler</span><span class="p">:</span>
    <span class="n">yeni</span> <span class="o">=</span> <span class="nf">dict</span><span class="p">(</span><span class="n">dp</span><span class="p">)</span>
    <span class="nf">for </span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">),</span> <span class="p">(</span><span class="n">puan</span><span class="p">,</span> <span class="n">secim</span><span class="p">)</span> <span class="ow">in</span> <span class="n">dp</span><span class="p">.</span><span class="nf">items</span><span class="p">():</span>
        <span class="n">ne</span> <span class="o">=</span> <span class="n">e</span> <span class="o">+</span> <span class="nf">ceil</span><span class="p">(</span><span class="n">enerji</span> <span class="o">/</span> <span class="n">adim</span><span class="p">)</span>
        <span class="n">nt</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="n">sure</span>
        <span class="k">if</span> <span class="n">ne</span> <span class="o">&lt;=</span> <span class="n">enerji_limiti</span> <span class="ow">and</span> <span class="n">nt</span> <span class="o">&lt;=</span> <span class="n">sure_limiti</span><span class="p">:</span>
            <span class="n">aday</span> <span class="o">=</span> <span class="p">(</span><span class="n">puan</span> <span class="o">+</span> <span class="n">odul</span><span class="p">,</span> <span class="n">secim</span> <span class="o">+</span> <span class="p">[</span><span class="n">ad</span><span class="p">])</span>
            <span class="k">if</span> <span class="n">aday</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">yeni</span><span class="p">.</span><span class="nf">get</span><span class="p">((</span><span class="n">ne</span><span class="p">,</span> <span class="n">nt</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">[]))[</span><span class="mi">0</span><span class="p">]:</span>
                <span class="n">yeni</span><span class="p">[(</span><span class="n">ne</span><span class="p">,</span> <span class="n">nt</span><span class="p">)]</span> <span class="o">=</span> <span class="n">aday</span>
    <span class="n">dp</span> <span class="o">=</span> <span class="n">yeni</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">max</span><span class="p">(</span><span class="n">dp</span><span class="p">.</span><span class="nf">values</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">sonuc</span><span class="p">:</span> <span class="n">sonuc</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
</code></pre></div></div>

<p>Algoritma enerji maliyetlerini yukarı, bütçeyi aşağı yuvarlayarak enerji açısından ihtiyatlı davranır. Süreler burada tam dakika kabul edilmiştir. Sonuç, 19 puanlık harita, örnek ve fotoğraf birleşimidir. Bütçenin tamamını tüketmek zorunlu değildir; amaç pili boşaltmak değil, kısıtlar altında en yüksek değeri üretmektir.</p>

<h2 id="planı-sahada-yeniden-hesaplamak">Planı sahada yeniden hesaplamak</h2>

<p>Başlangıçta kusursuz görünen plan, karşı rüzgârla birkaç dakika içinde eskir. Model öngörülü kontrol yaklaşımında araç belirli aralıklarla kalan enerjiyi tahmin eder, kısa bir planlama ufkunu optimize eder ve yalnızca ilk kararı uygular. Ardından ölçümlerle yeniden planlar.</p>

<p>Pil doluluk tahmini için akım entegrasyonu, gerilim modeliyle birleştirilebilir; Kalman filtresi bu birleşimin yaygın yöntemlerinden biridir. Planlayıcı ayrıca dönüş maliyetini mevcut konuma göre güncellemelidir. Beklenen tüketim yerine ihtiyatlı senaryolarla hesaplanan tüketim kullanmak, özellikle rüzgârlı görevlerde güvenliği artırır.</p>

<p>En iyi sistem üç metriği birlikte izler: tamamlanan görev değeri, enerji tahmin hatası ve dönüşte kalan rezerv. Böylece optimizasyon, yalnızca simülasyonda güzel görünen bir sayı olmaktan çıkar; ölçülebilir ve güvenli bir operasyon politikasına dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="pil yönetimi" /><category term="insansız araçlar" /><category term="enerji optimizasyonu" /><category term="görev planlama" /><category term="dinamik programlama" /><category term="robotik" /><summary type="html"><![CDATA[Bir insansız aracın başarılı olması, yalnızca hedefe ulaşmasına değil, geri dönecek enerjiyi de saklamasına bağlıdır. Pil göstergesi yüzde yirmiyi gösterirken son bir fotoğraf çekmek cazip gelebilir; ancak algoritmanın romantizme değil, enerji bütçesine ihtiyacı vardır. Peki görev değeri, uçuş süresi ve güvenlik nasıl birlikte optimize edilir?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/insansiz-araclarda-pil-28.png" /><media:content medium="image" url="https://program.sonsuz.us/img/insansiz-araclarda-pil-28.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kripto Borsalarının Kalbi: Emir Eşleştirme Motoru Nasıl Çalışır?</title><link href="https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir/" rel="alternate" type="text/html" title="Kripto Borsalarının Kalbi: Emir Eşleştirme Motoru Nasıl Çalışır?" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir</id><content type="html" xml:base="https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir/"><![CDATA[<p>Bir kripto borsasında “Al” düğmesine bastığınızda, arka planda dijital bir müzayede başlar. Ancak tokmak tutan bir görevli yoktur: Binlerce emri sıralayan, uygun karşı tarafı bulan ve işlemleri kaydeden bir eşleştirme motoru vardır. Bu motorun sırrı yalnızca hız değil, herkes için aynı kuralları uygulamasıdır.
``</p>

<h2 id="önce-mantık-emir-defteri-nedir">Önce Mantık: Emir Defteri Nedir?</h2>

<p>Emir defteri, gerçekleşmeyi bekleyen alış ve satış emirlerini tutar. Alış tarafındaki en yüksek fiyat <strong>en iyi alış</strong>, satış tarafındaki en düşük fiyat ise <strong>en iyi satış</strong> olarak adlandırılır. Aralarındaki fark, yani spread:</p>

\[s = P_{satış} - P_{alış}\]

<p>Bir limit alış emri, ödemeye razı olduğunuz azami fiyatı belirtir. Limit satış emri ise kabul edeceğiniz asgari fiyatı söyler. Alıcının limiti satıcının fiyatına eşit veya yüksekse eşleşme mümkündür. Piyasa emri fiyat sınırı koymadan mevcut likiditeyi tüketir; büyük emirlerde bu nedenle kayma oluşabilir.</p>

<p>Örneğin satış defterinde 100 USDT’den iki, 101 USDT’den üç token bulunsun. Dört tokenlık, 101 USDT limitli alış emri önce iki tokenı 100’den, sonra iki tokenı 101’den alır. İşlem fiyatı, bu modelde defterde bekleyen emrin fiyatıdır.</p>

<h2 id="kim-önce-i̇şlem-görür">Kim Önce İşlem Görür?</h2>

<p>Yaygın yaklaşım <strong>fiyat-zaman önceliğidir</strong>: Daha iyi fiyat önce gelir; aynı fiyatta daha önce kabul edilen emir önceliklidir. Bu yüzden her fiyat seviyesinde bir FIFO kuyruğu tutulabilir.</p>

<table>
  <thead>
    <tr>
      <th>Veri yapısı</th>
      <th>Seviye ekleme/silme</th>
      <th>Temel karşılık</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sıralı dizi</td>
      <td>$O(L)$</td>
      <td>Basit yapı, kaydırma maliyeti</td>
    </tr>
    <tr>
      <td>Dengeli arama ağacı</td>
      <td>$O(\log L)$</td>
      <td>Dinamik fiyat seviyelerinde verimlilik</td>
    </tr>
    <tr>
      <td>Sırasız sözlük</td>
      <td>Ortalama $O(1)$</td>
      <td>En iyi fiyatı ayrıca bulmak gerekir</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/kripto-borsalarinin-kalbi-33.svg" alt="kripto-borsalarinin-kalbi-33" /></p>

<p>Burada $L$, fiyat seviyesi sayısıdır. Ağaç kullanılan bir tasarımda en iyi seviyeye işaretçi tutulabilir; seviyenin içindeki kuyruk başını kaldırmak ise $O(1)$ maliyetlidir.</p>

<p>Fiyat ve miktarlar genellikle kayan noktalı sayılar yerine tam sayı olarak saklanır:</p>

\[P = p \times tick, \qquad Q = q \times lot\]

<p>Böylece yuvarlama sürprizleri yerine açık fiyat adımları ve miktar kuralları kullanılır.</p>

<h2 id="milisaniyelik-i̇şlem-hattı">Milisaniyelik İşlem Hattı</h2>

<p>Tipik akış şu istasyonlardan geçer:</p>

<ol>
  <li><strong>Ağ geçidi:</strong> Kimlik doğrulama, mesaj biçimi ve hız sınırları kontrol edilir.</li>
  <li><strong>Risk kontrolü:</strong> Bakiye, minimum miktar ve fiyat adımı doğrulanır; gerekli varlık rezerve edilir.</li>
  <li><strong>Sıralayıcı:</strong> Kabul edilen emir ve iptal komutlarına kesin bir sıra numarası atanır.</li>
  <li><strong>Motor:</strong> Komutlar bu sırayla uygulanır; gerçekleşmeler ve defter değişiklikleri üretilir.</li>
</ol>

<p>Aynı defteri birçok iş parçacığının gelişigüzel değiştirmesi yarış koşulları yaratır. Yaygın çözüm, her defter için tek yazarlı deterministik işlemektir. Ölçekleme farklı işlem çiftlerine dağıtılarak yapılabilir; birden fazla defter aynı süreçte de çalışabilir.</p>

<p>Önceliğin hakemi istemci saati değil, sunucunun kabul sırasıdır. Aksi hâlde bilgisayarının saatini değiştiren kullanıcı sırada öne geçmeye çalışabilir!</p>

<h2 id="küçük-bir-eşleştirme-prototipi">Küçük Bir Eşleştirme Prototipi</h2>

<p>Aşağıdaki Python kodu, önceden doğrulanmış bir limit alış emrini satış kuyruklarıyla eşleştirir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="kn">from</span> <span class="n">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span>

<span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">Order</span><span class="p">:</span>
    <span class="n">oid</span><span class="p">:</span> <span class="nb">int</span>
    <span class="n">price</span><span class="p">:</span> <span class="nb">int</span>
    <span class="n">qty</span><span class="p">:</span> <span class="nb">int</span>

<span class="k">def</span> <span class="nf">match_buy</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">qty</span><span class="p">,</span> <span class="n">asks</span><span class="p">):</span>
    <span class="n">trades</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">while</span> <span class="n">qty</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">asks</span><span class="p">:</span>
        <span class="n">price</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">asks</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">price</span> <span class="o">&gt;</span> <span class="n">limit</span><span class="p">:</span>
            <span class="k">break</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">asks</span><span class="p">[</span><span class="n">price</span><span class="p">]</span>
        <span class="n">maker</span> <span class="o">=</span> <span class="n">queue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">filled</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">qty</span><span class="p">,</span> <span class="n">maker</span><span class="p">.</span><span class="n">qty</span><span class="p">)</span>
        <span class="n">trades</span><span class="p">.</span><span class="nf">append</span><span class="p">((</span><span class="n">maker</span><span class="p">.</span><span class="n">oid</span><span class="p">,</span> <span class="n">price</span><span class="p">,</span> <span class="n">filled</span><span class="p">))</span>
        <span class="n">qty</span> <span class="o">-=</span> <span class="n">filled</span>
        <span class="n">maker</span><span class="p">.</span><span class="n">qty</span> <span class="o">-=</span> <span class="n">filled</span>
        <span class="k">if</span> <span class="n">maker</span><span class="p">.</span><span class="n">qty</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">queue</span><span class="p">.</span><span class="nf">popleft</span><span class="p">()</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">queue</span><span class="p">:</span>
            <span class="k">del</span> <span class="n">asks</span><span class="p">[</span><span class="n">price</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">trades</span><span class="p">,</span> <span class="n">qty</span>

<span class="n">asks</span> <span class="o">=</span> <span class="p">{</span>
    <span class="mi">10000</span><span class="p">:</span> <span class="nf">deque</span><span class="p">([</span><span class="nc">Order</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10000</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]),</span>
    <span class="mi">10100</span><span class="p">:</span> <span class="nf">deque</span><span class="p">([</span><span class="nc">Order</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">10100</span><span class="p">,</span> <span class="mi">3</span><span class="p">)]),</span>
<span class="p">}</span>
<span class="n">trades</span><span class="p">,</span> <span class="n">remaining</span> <span class="o">=</span> <span class="nf">match_buy</span><span class="p">(</span><span class="mi">10100</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="n">asks</span><span class="p">)</span>
</code></pre></div></div>

<p>Fiyat adımı 0,01 USDT kabul edilirse <code class="language-plaintext highlighter-rouge">10000</code>, 100 USDT’yi temsil eder. Kod kısmi gerçekleşmeleri işler ve boş seviyeleri kaldırır. Ancak <code class="language-plaintext highlighter-rouge">min(asks)</code> her turda seviyeleri tarar: Bu bir öğretim örneğidir, üretim motoru değildir. Eşleşmeyen miktar, GTC limit emrinde alış defterine eklenir; IOC emrinde iptal edilir.</p>

<h2 id="hız-yetmez-çökünce-ne-olacak">Hız Yetmez: Çökünce Ne Olacak?</h2>

<p>Motorun bellekte çalışması, kayıtların unutulabileceği anlamına gelmez. Komut günlüğü ve periyodik snapshot kullanılarak durum yeniden oluşturulur. Dışarıya kesin kabul veya işlem sonucu bildirilmeden önce gereken kalıcılık garantisi sağlanmalıdır. Günlük senkronizasyonu ve çoğaltma tercihleri gecikmeyi etkiler.</p>

<p>Yeniden oynatma aynı komutlardan aynı sonucu üretmelidir. Emir kimlikleriyle yinelenen istekler ayıklanır; piyasa verisi sıra numaralarıyla yayınlanır, kayıp mesajlar snapshot üzerinden tamamlanır. Bakiye muhasebesi de gerçekleşme olaylarını güvenilir biçimde işlemelidir.</p>

<p>Son olarak yalnızca ortalama gecikmeyi ölçmeyin: <strong>p99 gecikmesi</strong>, yoğunluk altında kuyruk büyümesi ve iptal performansı da önemlidir. İyi motor, hızlı bir çöpçatan olduğu kadar, sırası şaşmayan titiz bir muhasebecidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="kripto" /><category term="emir-eşleştirme" /><category term="sistem-mimarisi" /><category term="algoritmalar" /><category term="düşük-gecikme" /><summary type="html"><![CDATA[Bir kripto borsasında “Al” düğmesine bastığınızda, arka planda dijital bir müzayede başlar. Ancak tokmak tutan bir görevli yoktur: Binlerce emri sıralayan, uygun karşı tarafı bulan ve işlemleri kaydeden bir eşleştirme motoru vardır. Bu motorun sırrı yalnızca hız değil, herkes için aynı kuralları uygulamasıdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/kripto-borsalarinin-kalbi-33.png" /><media:content medium="image" url="https://program.sonsuz.us/img/kripto-borsalarinin-kalbi-33.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mikro Öğrenmenin Zamanlama Motoru: Doğru İçerik, Doğru An</title><link href="https://program.sonsuz.us/posts/mikro-ogrenmenin-zamanlama-motoru-dogru-icerik-dogru-an/" rel="alternate" type="text/html" title="Mikro Öğrenmenin Zamanlama Motoru: Doğru İçerik, Doğru An" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/mikro-ogrenmenin-zamanlama-motoru-dogru-icerik-dogru-an</id><content type="html" xml:base="https://program.sonsuz.us/posts/mikro-ogrenmenin-zamanlama-motoru-dogru-icerik-dogru-an/"><![CDATA[<p><img src="/img/mikro-ogrenmenin-zamanlama-29.svg" alt="mikro-ogrenmenin-zamanlama-29" /></p>

<p>Telefonunuza gelen üç dakikalık bir ders, rastgele seçilmiş küçük bir bilgi paketi olmak zorunda değil. İyi bir mikro öğrenme platformu, neyi bildiğinizi ve neyi unutmak üzere olduğunuzu tahmin ederek içerik dağıtır. İşin sırrı yalnızca dersleri küçültmek değil, onları zihninizin ritmine göre zamanlamaktır.
``</p>

<h2 id="kısa-içerik-neden-tek-başına-yeterli-değil">Kısa içerik neden tek başına yeterli değil?</h2>

<p>Mikro öğrenme, bir öğrenme hedefini kısa ve odaklı etkinliklere böler. Ancak kısa olmak, otomatik olarak öğretici olmak anlamına gelmez. Bir dakikalık videoyu izlemekle aynı bilgiyi yardım almadan hatırlamak farklı şeylerdir.</p>

<p>Burada iki eğriyi ayırmak gerekir: <strong>Öğrenme eğrisi</strong>, pratik arttıkça performansın nasıl geliştiğini; <strong>unutma eğrisi</strong>, tekrar yapılmadığında hatırlamanın zamanla nasıl azaldığını gösterir. Dağıtım algoritması ikisini birlikte değerlendirmelidir.</p>

<p>Örneğin kullanıcı döngü sorularını hızla çözüyorsa daha zor bir uygulamaya geçebilir. Aynı kullanıcı önceki sözdizimini unutuyorsa yeni konu yerine kısa bir hatırlama sorusu daha faydalı olabilir. Hedef, sürekli yeni içerik sunmak değil, kullanılabilir bilgiyi büyütmektir.</p>

<h2 id="hafızayı-basit-bir-modelle-temsil-etmek">Hafızayı basit bir modelle temsil etmek</h2>

<p>Başlangıç için hatırlama olasılığını şu yaklaşık modelle düşünebiliriz:</p>

\[P(t)=e^{-t/S}\]

<p>Burada $t$, son tekrardan beri geçen süre; $S$ ise bilginin hafızadaki dayanıklılığıdır. İkisi aynı zaman birimini kullanmalıdır. Büyük $S$, daha yavaş unutma anlamına gelir. Gerçek hafıza bundan karmaşıktır; bu denklem evrensel yasa değil, anlaşılır bir mühendislik yaklaşımıdır.</p>

<p>Tekrarı hedef olasılık $p_*$ seviyesinde yapmak istersek:</p>

\[t_*=-S\ln(p_*)\]

<p>Örneğin $S=6$ gün ve $p_*=0.85$ için tekrar yaklaşık $0.98$ gün sonra planlanır. Hedef olasılık yükseldikçe tekrarlar sıklaşır; öğrenme yükü de artar. Yani algoritmanın elinde bedava bir hafıza sihirbazı yoktur!</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Zamanlama mantığı</th>
      <th>Temel sınır</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit takvim</td>
      <td>Her gün aynı aralık</td>
      <td>Bireysel farkları kaçırır</td>
    </tr>
    <tr>
      <td>Aralıklı tekrar</td>
      <td>Hatırlama tahminine göre</td>
      <td>İyi ölçüm gerektirir</td>
    </tr>
    <tr>
      <td>Uyarlanabilir akış</td>
      <td>Hafıza, zorluk ve bütçe birlikte</td>
      <td>Daha karmaşıktır</td>
    </tr>
  </tbody>
</table>

<h2 id="dağıtım-algoritmasının-karar-zinciri">Dağıtım algoritmasının karar zinciri</h2>

<p>Platform, yalnızca içerik değil, <strong>kullanıcı–beceri–içerik ilişkisi</strong> tutmalıdır. Aynı kullanıcı iki konuda farklı dayanıklılığa sahip olabilir.</p>

<ol>
  <li><strong>Ölç:</strong> İzleme tamamlanmasını değil, kısa bir geri çağırma sorusunu değerlendir.</li>
  <li><strong>Güncelle:</strong> Doğruluk, önceki tekrarlar ve geçen süreyle hafıza tahminini yenile.</li>
  <li><strong>Filtrele:</strong> Ön koşulları karşılanmamış veya erişilebilir olmayan içerikleri çıkar.</li>
  <li><strong>Sırala:</strong> Tekrarı gelen kartları, öğrenme hedeflerini ve beklenen kazanımı birlikte değerlendir.</li>
  <li><strong>Paketle:</strong> Seçimi günlük süre bütçesine sığdır; örneğin sekiz dakikaya.</li>
</ol>

<p>Tepki süresi yardımcı sinyaldir, fakat tek başına başarı ölçüsü değildir. Yavaş okuyan kullanıcıyı bilgisiz saymak, algoritmanın kendi sınavından kalmasıdır.</p>

<h2 id="python-ile-küçük-bir-zamanlama-motoru">Python ile küçük bir zamanlama motoru</h2>

<p>Aşağıdaki fonksiyon, soru sonucundan sonra dayanıklılığı günceller ve sonraki tekrar zamanını üretir. <code class="language-plaintext highlighter-rouge">kart</code>, gün cinsinden <code class="language-plaintext highlighter-rouge">S</code> değerini içeren bir sözlüktür; <code class="language-plaintext highlighter-rouge">simdi</code> ise bir <code class="language-plaintext highlighter-rouge">datetime</code> nesnesidir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>
<span class="kn">from</span> <span class="n">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span>


<span class="k">def</span> <span class="nf">tekrar_planla</span><span class="p">(</span><span class="n">kart</span><span class="p">,</span> <span class="n">dogru</span><span class="p">,</span> <span class="n">simdi</span><span class="p">,</span> <span class="n">hedef</span><span class="o">=</span><span class="mf">0.85</span><span class="p">):</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="mi">0</span> <span class="o">&lt;</span> <span class="n">hedef</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Hedef 0 ile 1 arasında olmalı</span><span class="sh">"</span><span class="p">)</span>

    <span class="n">katsayi</span> <span class="o">=</span> <span class="mf">1.35</span> <span class="k">if</span> <span class="n">dogru</span> <span class="k">else</span> <span class="mf">0.60</span>
    <span class="n">yeni_s</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="mf">180.0</span><span class="p">,</span> <span class="nf">max</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">kart</span><span class="p">[</span><span class="sh">"</span><span class="s">S</span><span class="sh">"</span><span class="p">]</span> <span class="o">*</span> <span class="n">katsayi</span><span class="p">))</span>
    <span class="n">aralik</span> <span class="o">=</span> <span class="o">-</span><span class="n">yeni_s</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="n">hedef</span><span class="p">)</span>

    <span class="k">return</span> <span class="p">{</span>
        <span class="o">**</span><span class="n">kart</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">S</span><span class="sh">"</span><span class="p">:</span> <span class="n">yeni_s</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">son_tekrar</span><span class="sh">"</span><span class="p">:</span> <span class="n">simdi</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">sonraki_tekrar</span><span class="sh">"</span><span class="p">:</span> <span class="n">simdi</span> <span class="o">+</span> <span class="nf">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">aralik</span><span class="p">),</span>
    <span class="p">}</span>
</code></pre></div></div>

<p>Doğru cevap aralığı büyütür; yanlış cevap küçültür. Alt ve üst sınırlar aşırı değerleri engeller. Ancak katsayılar <strong>örnek sezgisellerdir</strong>; bilimsel olarak doğrulanmış kişisel parametreler değildir. Üretimde geçmiş denemelerle kalibre edilmelidir. Yanlış cevaptan sonra açıklayıcı geri bildirim hemen verilmeli, sonraki kalıcı tekrar ayrıca planlanmalıdır.</p>

<h2 id="başarıyı-tıklamayla-karıştırmayın">Başarıyı tıklamayla karıştırmayın</h2>

<p>Zamanı gelen bütün kartları aynı anda göndermek kullanıcıyı bildirim yağmuruna tutar. Bu nedenle zamanlayıcı, tekrar ihtiyacını belirlerken dağıtım katmanı sessiz saatleri, günlük bütçeyi ve konu çeşitliliğini gözetmelidir. Geciken içerikler kuyrukta önceliklendirilebilir; hatırlama tahmini geçen süreyle yeniden hesaplanır.</p>

<p>Başarı ölçümü de uzun vadeli olmalıdır: Bir hafta sonraki hatırlama, yeni sorulara transfer, tamamlanan hedefler ve kullanıcı yükü birlikte izlenebilir. A/B testlerinde yalnızca tıklama oranına bakmak, eğlenceli ama öğretmeyen içerikleri ödüllendirebilir. Kullanıcı verilerini gereğinden fazla toplamak da kişiselleştirmenin zorunlu bedeli değildir.</p>

<p>Kısacası iyi mikro öğrenme, bilgiyi küçük lokmalara bölmekten fazlasıdır: Her lokmayı doğru zamanda sunar, gerçekten sindirilip sindirilmediğini ölçer ve menüyü buna göre değiştirir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="mikro öğrenme" /><category term="algoritmalar" /><category term="aralıklı tekrar" /><category term="python" /><category term="kişiselleştirme" /><category term="eğitim teknolojileri" /><summary type="html"><![CDATA[Telefonunuza gelen üç dakikalık bir ders, rastgele seçilmiş küçük bir bilgi paketi olmak zorunda değil. İyi bir mikro öğrenme platformu, neyi bildiğinizi ve neyi unutmak üzere olduğunuzu tahmin ederek içerik dağıtır. İşin sırrı yalnızca dersleri küçültmek değil, onları zihninizin ritmine göre zamanlamaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/mikro-ogrenmenin-zamanlama-29.png" /><media:content medium="image" url="https://program.sonsuz.us/img/mikro-ogrenmenin-zamanlama-29.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Şebekenin Nabzını Tutmak: Sınırlı Sensörlerle Gerçek Zamanlı Durum Tahmini</title><link href="https://program.sonsuz.us/posts/sebekenin-nabzini-tutmak-sinirli-sensorlerle-gercek-zamanli-durum-tahmini/" rel="alternate" type="text/html" title="Şebekenin Nabzını Tutmak: Sınırlı Sensörlerle Gerçek Zamanlı Durum Tahmini" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/sebekenin-nabzini-tutmak-sinirli-sensorlerle-gercek-zamanli-durum-tahmini</id><content type="html" xml:base="https://program.sonsuz.us/posts/sebekenin-nabzini-tutmak-sinirli-sensorlerle-gercek-zamanli-durum-tahmini/"><![CDATA[<p><img src="/img/sebekenin-nabzini-tutmak-32.svg" alt="sebekenin-nabzini-tutmak-32" /></p>

<p>Bir elektrik şebekesindeki her noktaya sensör yerleştirmek pahalıdır; üstelik sensörler bile bazen yanlış konuşur! Buna rağmen operatörlerin gerilimleri, güç akışlarını ve kritik bölgeleri anlık olarak görmesi gerekir. Durum tahmini, sınırlı ölçümleri şebekenin fiziksel modeliyle birleştirerek bu resmi tamamlar. Ancak yaptığı şey sihirli bir veri doldurma işlemi değil, belirsizlik altında tutarlı bir durum bulmaktır.</p>

<p>``</p>

<h2 id="şebekenin-durumu-tam-olarak-nedir">Şebekenin “durumu” tam olarak nedir?</h2>

<p>Alternatif akım şebekelerinde temel durum değişkenleri, baraların gerilim büyüklükleri ve faz açılarıdır. Bir baranın açısını referans olarak sıfır seçersek, $n$ baralı sistemde genellikle $2n-1$ bilinmeyen kalır:</p>

\[x=[\theta_2,\ldots,\theta_n,v_1,\ldots,v_n]^\top\]

<p>Hat empedansları, trafo özellikleri ve bağlantı durumları kullanılarak admitans matrisi $Y$ oluşturulur. Karmaşık gerilim vektörü $U$ için bara güç enjeksiyonları şu fiziksel ilişkiye uyar:</p>

\[S_i=U_i\overline{(YU)_i}\]

<p>Buradaki $S_i=P_i+jQ_i$, aktif ve reaktif gücü birlikte temsil eder. Böylece ölçülmeyen büyüklükler de tahmin edilen gerilimlerden hesaplanabilir. Model, sensörler arasındaki fiziksel bağdır: Bir baradaki değişiklik komşularından tamamen bağımsız davranamaz.</p>

<h2 id="ölçümleri-aynı-masaya-oturtmak">Ölçümleri aynı masaya oturtmak</h2>

<p>Ölçüm modeli $z=h(x)+e$ biçimindedir. $z$ sensör verilerini, $h$ fiziksel modeli, $e$ ise ölçüm hatalarını gösterir. Bağımsız, sıfır ortalamalı hatalar varsayılırsa ağırlıklı en küçük kareler problemi şöyledir:</p>

\[\hat{x}=\arg\min_x\sum_i\left(\frac{z_i-h_i(x)}{\sigma_i}\right)^2\]

<p>Küçük standart sapmalı ölçüm daha fazla ağırlık alır. Yani hassas sensörün sesi daha yüksek çıkar; ama diğerleri tamamen susturulmaz. Hatalar ilişkiliyse yalnızca standart sapmalar yerine tam kovaryans matrisi kullanılmalıdır.</p>

<table>
  <thead>
    <tr>
      <th>Veri kaynağı</th>
      <th>Güçlü tarafı</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>SCADA</td>
      <td>Yaygın güç ve gerilim ölçümleri</td>
      <td>Güncelleme hızı ve zaman uyumu</td>
    </tr>
    <tr>
      <td>PMU</td>
      <td>Zaman eşlenmiş fazörler</td>
      <td>İletişim gecikmesi ve kapsama</td>
    </tr>
    <tr>
      <td>Sözde ölçüm</td>
      <td>Eksik bölgeler için yaklaşık bilgi</td>
      <td>Yüksek belirsizlik ve olası yanlılık</td>
    </tr>
  </tbody>
</table>

<p>Ölçüm sayısının bilinmeyen sayısını aşması tek başına yeterli değildir. Ölçüm Jacobianının sütunları bağımsız olmalıdır. Buna yerel gözlemlenebilirlik denir. Aynı bölgeye yığılmış çok sayıda sensör, başka bir bölgenin karanlıkta kalmasını engellemeyebilir. Sözde ölçümler boşlukları doldurabilir, fakat sonucu varsayımlara bağımlı hâle getirir.</p>

<h2 id="python-ile-küçük-bir-şebeke-dedektifi">Python ile küçük bir şebeke dedektifi</h2>

<p>Aşağıdaki örnek, kayıpsız ve eşit hatlı üç baralı bir şebekede beş durum değişkenini yedi gürültülü ölçümden tahmin eder. İki gerilim, iki aktif güç ve üç reaktif güç ölçülür. Büyüklükler ortak bazlara göre per-unit cinsindedir; gerçek veri yerine kontrollü sentetik veri kullanıyoruz.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">from</span> <span class="n">scipy.optimize</span> <span class="kn">import</span> <span class="n">least_squares</span>

<span class="n">Y</span> <span class="o">=</span> <span class="mf">1j</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span>
    <span class="p">[</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">]</span>
<span class="p">])</span>

<span class="k">def</span> <span class="nf">measurement_model</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="n">angles</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">r_</span><span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">x</span><span class="p">[:</span><span class="mi">2</span><span class="p">]]</span>
    <span class="n">magnitudes</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
    <span class="n">voltage</span> <span class="o">=</span> <span class="n">magnitudes</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">exp</span><span class="p">(</span><span class="mf">1j</span> <span class="o">*</span> <span class="n">angles</span><span class="p">)</span>
    <span class="n">power</span> <span class="o">=</span> <span class="n">voltage</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">conj</span><span class="p">(</span><span class="n">Y</span> <span class="o">@</span> <span class="n">voltage</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">np</span><span class="p">.</span><span class="n">r_</span><span class="p">[</span><span class="n">magnitudes</span><span class="p">[:</span><span class="mi">2</span><span class="p">],</span> <span class="n">power</span><span class="p">[</span><span class="mi">1</span><span class="p">:].</span><span class="n">real</span><span class="p">,</span> <span class="n">power</span><span class="p">.</span><span class="n">imag</span><span class="p">]</span>

<span class="n">truth</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="o">-</span><span class="mf">0.04</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.07</span><span class="p">,</span> <span class="mf">1.02</span><span class="p">,</span> <span class="mf">0.99</span><span class="p">,</span> <span class="mf">0.98</span><span class="p">])</span>
<span class="n">sigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mf">0.005</span><span class="p">,</span> <span class="mf">0.005</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">])</span>
<span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="nf">default_rng</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
<span class="n">z</span> <span class="o">=</span> <span class="nf">measurement_model</span><span class="p">(</span><span class="n">truth</span><span class="p">)</span> <span class="o">+</span> <span class="n">rng</span><span class="p">.</span><span class="nf">normal</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">sigma</span><span class="p">)</span>

<span class="n">result</span> <span class="o">=</span> <span class="nf">least_squares</span><span class="p">(</span>
    <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">(</span><span class="nf">measurement_model</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-</span> <span class="n">z</span><span class="p">)</span> <span class="o">/</span> <span class="n">sigma</span><span class="p">,</span>
    <span class="n">x0</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span>
    <span class="n">bounds</span><span class="o">=</span><span class="p">([</span><span class="o">-</span><span class="n">np</span><span class="p">.</span><span class="n">pi</span><span class="p">,</span> <span class="o">-</span><span class="n">np</span><span class="p">.</span><span class="n">pi</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">],</span>
            <span class="p">[</span><span class="n">np</span><span class="p">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="n">pi</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">])</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">.</span><span class="n">success</span><span class="p">:</span>
    <span class="k">raise</span> <span class="nc">RuntimeError</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">message</span><span class="p">)</span>
<span class="k">if</span> <span class="n">np</span><span class="p">.</span><span class="n">linalg</span><span class="p">.</span><span class="nf">matrix_rank</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">jac</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">:</span>
    <span class="k">raise</span> <span class="nc">RuntimeError</span><span class="p">(</span><span class="sh">"</span><span class="s">Yerel gözlemlenebilirlik yetersiz</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Tahmin edilen durum:</span><span class="sh">"</span><span class="p">,</span> <span class="n">result</span><span class="p">.</span><span class="n">x</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">measurement_model</code>, aday gerilimleri sensörlerin göreceği değerlere dönüştürür. Çözücü, standart sapmalarla ölçeklenmiş artıkların karelerini küçültür. Başlangıç noktası düz gerilim profilidir; sınırlar bu oyuncak örnekteki çalışma aralığını tanımlar. Jacobian kontrolü ise çözüm çevresinde ölçümlerin beş bilinmeyeni ayırt edip edemediğini sınar. Tam rank, iyi sayısal koşullanmayı veya küresel tekliği garanti etmez.</p>

<h2 id="gerçek-zamanlı-olmak-geleceği-bilmek-değildir">Gerçek zamanlı olmak, geleceği bilmek değildir</h2>

<p>Üretimde her döngüde zaman damgaları hizalanır, kesici durumları güncellenir ve önceki çözüm başlangıç olarak kullanılır. Büyük ölçüm artıkları bozuk sensörü düşündürebilir; ancak yanlış topoloji de benzer belirtiler üretir. Bu nedenle veriyi körlemesine silmek yerine normalize artık testleri ve model kontrolleri birlikte uygulanır.</p>

<p>Klasik yaklaşım, her zaman diliminde yaklaşık durağan bir fotoğraf çeker. Hızlı geçici olaylarda dinamik modeller ve Kalman filtresi ailesi gerekebilir. Durum tahmini tek başına kararlılığı garanti etmez: Gerilim kararlılığı değerlendirmesine, güvenlik analizlerine ve kontrol kararlarına güvenilir başlangıç verisi sağlar. İyi bir tahminci yalnızca “şebeke böyle” demez; “bu sonuca şu belirsizlikle güveniyorum” da diyebilmelidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="durum tahmini" /><category term="elektrik şebekesi" /><category term="gerçek zamanlı sistemler" /><category term="python" /><category term="sayısal optimizasyon" /><summary type="html"><![CDATA[Bir elektrik şebekesindeki her noktaya sensör yerleştirmek pahalıdır; üstelik sensörler bile bazen yanlış konuşur! Buna rağmen operatörlerin gerilimleri, güç akışlarını ve kritik bölgeleri anlık olarak görmesi gerekir. Durum tahmini, sınırlı ölçümleri şebekenin fiziksel modeliyle birleştirerek bu resmi tamamlar. Ancak yaptığı şey sihirli bir veri doldurma işlemi değil, belirsizlik altında tutarlı bir durum bulmaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/sebekenin-nabzini-tutmak-32.png" /><media:content medium="image" url="https://program.sonsuz.us/img/sebekenin-nabzini-tutmak-32.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Taş Tabletlerden Sinir Ağlarına: Yapay Zeka Antik Yazıları Nasıl Okuyor?</title><link href="https://program.sonsuz.us/posts/tas-tabletlerden-sinir-aglarina-yapay-zeka-antik-yazilari-nasil-okuyor/" rel="alternate" type="text/html" title="Taş Tabletlerden Sinir Ağlarına: Yapay Zeka Antik Yazıları Nasıl Okuyor?" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/tas-tabletlerden-sinir-aglarina-yapay-zeka-antik-yazilari-nasil-okuyor</id><content type="html" xml:base="https://program.sonsuz.us/posts/tas-tabletlerden-sinir-aglarina-yapay-zeka-antik-yazilari-nasil-okuyor/"><![CDATA[<p>Bir müzedeki kil tableti düşünün: çatlaklar, silinmiş köşeler ve birbirine benzeyen onlarca işaret… Yanında da bir Mısır yazıtı: kuşlar, gözler, kıvrımlı çizgiler. İnsan gözü için büyüleyici, bilgisayar için oldukça çetin bir bulmaca! Derin öğrenme, bu görüntüleri işaret dizilerine, ardından dilsel yorumlara dönüştürmeye yardımcı oluyor. Ancak antik metinleri okumak, telefondaki fotoğrafı otomatik çevirmek kadar kolay değil.</p>

<p><img src="/img/tas-tabletlerden-sinir-82.svg" alt="tas-tabletlerden-sinir-82" /></p>

<p>``</p>

<h2 id="önce-üç-farklı-işi-ayıralım">Önce üç farklı işi ayıralım</h2>

<p>“Çözümleme” sözcüğü, aslında farklı görevleri aynı torbaya dolduruyor. <strong>Tanıma</strong>, görüntüdeki işareti belirler; <strong>transliterasyon</strong>, işaretleri bilimsel bir gösterime aktarır; <strong>çeviri</strong> ise anlamı başka bir dilde ifade eder. Bunları birbirine karıştırırsak, bir kuş çizimini tanıyan modeli firavunun özel tercümanı sanabiliriz.</p>

<table>
  <thead>
    <tr>
      <th>Aşama</th>
      <th>Girdi</th>
      <th>Beklenen çıktı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>İşaret tanıma</td>
      <td>Tablet veya yazıt görüntüsü</td>
      <td>İşaret kimlikleri</td>
    </tr>
    <tr>
      <td>Transliterasyon</td>
      <td>İşaret dizisi</td>
      <td>Latin harfli bilimsel gösterim</td>
    </tr>
    <tr>
      <td>Çeviri</td>
      <td>Dilsel olarak yorumlanan metin</td>
      <td>Türkçe gibi hedef dilde anlam</td>
    </tr>
  </tbody>
</table>

<p>Üstelik çivi yazısı bir dil değildir; Sümerce ve Akadca gibi farklı dillerin yazımında kullanılmıştır. Mısır hiyeroglifleri de yalnızca resimlerden oluşmaz: sesleri, sözcükleri ve anlam kategorilerini belirten işaretler birlikte çalışır.</p>

<h2 id="görüntüden-işarete-dijital-kazı-başlıyor">Görüntüden işarete: Dijital kazı başlıyor</h2>

<p>İlk adım, kaliteli görüntü ve uzman etiketleri toplamaktır. Fotoğraflar, üç boyutlu yüzey taramaları veya farklı ışıklandırmalar, aşınmış izleri görünür kılabilir. Ardından yazı alanları ve işaret grupları belirlenir.</p>

<p>CNN modelleri yerel kenar ve biçimleri öğrenirken, Vision Transformer modelleri görüntünün daha geniş bağlamını değerlendirebilir. Komşu işaretler, tek başına belirsiz görünen bir şeklin tanınmasına yardımcı olur.</p>

<p>Ancak sayfa düzeni önemlidir: hiyeroglifler yatay bir metin satırı gibi davranmayabilir; okuma yönü ve işaret grupları ayrıca çözülmelidir. Veri artırmada rastgele yansıtma yapmak da yön bilgisini veya etiketlerin geçerliliğini bozabilir. Antik yazıt, gelişigüzel çevrilecek bir kedi fotoğrafı değildir!</p>

<h2 id="i̇şaretleri-anlamla-buluşturmak">İşaretleri anlamla buluşturmak</h2>

<p>Görsel tanımadan sonra sıra dil modeline gelir. Aynı çivi yazısı işareti farklı bağlamlarda farklı ses veya sözcük değerleri taşıyabilir. Hiyerogliflerdeki belirleyiciler ise okunacak bir ses eklemeden anlam sınıfını daraltabilir.</p>

<p>Transformer tabanlı modeller, transliterasyon ile çeviri arasında eşleştirilmiş örneklerden öğrenebilir. Temel hedef, kaynak dizi $s$ verildiğinde hedef çeviri $t$ için $P(t\mid s)$ olasılığını modellemektir. Fakat eğitim verileri çoğunlukla sınırlı, dönemlere göre değişken ve uzman yorumlarına bağımlıdır.</p>

<p>Bu nedenle eksik bir bölümün tamamlanması, doğrudan okunmuş metinle aynı şey değildir. Modelin tahmini, yayında açıkça tahmin olarak işaretlenmelidir.</p>

<h2 id="küçük-bir-pytorch-deneyi">Küçük bir PyTorch deneyi</h2>

<p>Aşağıdaki örnek, önceden satırlara ayrılmış görüntüler için basitleştirilmiş bir tanıyıcıdır. Veri yükleyicisinin <code class="language-plaintext highlighter-rouge">images</code>, birleştirilmiş işaret etiketleri <code class="language-plaintext highlighter-rouge">targets</code>, etiket uzunlukları <code class="language-plaintext highlighter-rouge">target_lengths</code> ve sınıf sayısı <code class="language-plaintext highlighter-rouge">vocab_size</code> sağladığını varsayar. Sıfır numaralı sınıf, CTC için ayrılmıştır.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">torch</span>
<span class="kn">from</span> <span class="n">torch</span> <span class="kn">import</span> <span class="n">nn</span>

<span class="n">cnn</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Sequential</span><span class="p">(</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">Conv2d</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">ReLU</span><span class="p">(),</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">MaxPool2d</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">rnn</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">LSTM</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="n">bidirectional</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="n">head</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Linear</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">vocab_size</span><span class="p">)</span>

<span class="c1"># images boyutu: [parti, kanal, yükseklik, genişlik]
</span><span class="n">features</span> <span class="o">=</span> <span class="nf">cnn</span><span class="p">(</span><span class="n">images</span><span class="p">).</span><span class="nf">mean</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">2</span><span class="p">).</span><span class="nf">permute</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">sequence</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="nf">rnn</span><span class="p">(</span><span class="n">features</span><span class="p">)</span>
<span class="n">log_probs</span> <span class="o">=</span> <span class="nf">head</span><span class="p">(</span><span class="n">sequence</span><span class="p">).</span><span class="nf">log_softmax</span><span class="p">(</span><span class="n">dim</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">input_lengths</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">full</span><span class="p">(</span>
    <span class="p">(</span><span class="n">images</span><span class="p">.</span><span class="nf">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),),</span> <span class="n">log_probs</span><span class="p">.</span><span class="nf">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="p">.</span><span class="nb">long</span>
<span class="p">)</span>
<span class="n">loss</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">CTCLoss</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="mi">0</span><span class="p">)(</span>
    <span class="n">log_probs</span><span class="p">,</span> <span class="n">targets</span><span class="p">,</span> <span class="n">input_lengths</span><span class="p">,</span> <span class="n">target_lengths</span>
<span class="p">)</span>
<span class="n">loss</span><span class="p">.</span><span class="nf">backward</span><span class="p">()</span>
</code></pre></div></div>

<p>CNN görsel özellikleri çıkarır; çift yönlü LSTM komşuluk ilişkilerini işler. CTC, her işaretin görüntüdeki kesin konumu etiketlenmeden dizi öğrenmeyi sağlar. Buradaki boş sembol, sözcükler arasındaki boşluk değildir. Kod kaybı ve gradyanları hesaplar; tam eğitim için optimizasyon döngüsü gerekir.</p>

<h2 id="başarıyı-nasıl-ölçeriz">Başarıyı nasıl ölçeriz?</h2>

<p>İşaret tanımada $SER=\frac{S+D+I}{N}$ kullanılabilir. Burada $S$ değiştirme, $D$ silme, $I$ ekleme hatalarıdır; $N$ referanstaki işaret sayısıdır. Çeviride otomatik puanlar yararlıdır, fakat tarihsel anlam doğruluğunu tek başına ölçmez.</p>

<table>
  <thead>
    <tr>
      <th>Risk</th>
      <th>Daha güvenilir yaklaşım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Aynı tabletin parçalarının iki kümeye dağılması</td>
      <td>Eser bazında eğitim/test ayrımı</td>
    </tr>
    <tr>
      <td>Nadir işaretlerde başarısızlık</td>
      <td>İşaret bazında hata analizi</td>
    </tr>
    <tr>
      <td>Akıcı ama yanlış çeviri</td>
      <td>Filolojik uzman incelemesi</td>
    </tr>
  </tbody>
</table>

<p>Farklı dönem ve koleksiyonlarda test yapmak da modelin gerçekten genelleme yapıp yapmadığını gösterir. Belirsiz okumalar, alternatifler ve kaynak görüntüler birlikte sunulmalıdır.</p>

<p>Sonuçta yapay zeka, henüz çözülememiş her dili kendiliğinden açan sihirli bir anahtar değildir. En güçlü rolü, uzmanların işaretleri daha hızlı karşılaştırmasını ve olası okumaları araştırmasını sağlamaktır. Sinir ağı önerir; tarihsel bağlam ve filolojik kanıt son sözü söyler.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yapay zeka" /><category term="derin öğrenme" /><category term="çivi yazısı" /><category term="hiyeroglif" /><category term="doğal dil işleme" /><category term="kültürel miras" /><summary type="html"><![CDATA[Bir müzedeki kil tableti düşünün: çatlaklar, silinmiş köşeler ve birbirine benzeyen onlarca işaret… Yanında da bir Mısır yazıtı: kuşlar, gözler, kıvrımlı çizgiler. İnsan gözü için büyüleyici, bilgisayar için oldukça çetin bir bulmaca! Derin öğrenme, bu görüntüleri işaret dizilerine, ardından dilsel yorumlara dönüştürmeye yardımcı oluyor. Ancak antik metinleri okumak, telefondaki fotoğrafı otomatik çevirmek kadar kolay değil.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/tas-tabletlerden-sinir-82.png" /><media:content medium="image" url="https://program.sonsuz.us/img/tas-tabletlerden-sinir-82.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>