C. elegans konnektomunun tarayıcıda çalışan, etkileşimli bir simülasyonu. Davranış taklidi değil: gerçek bağlantı şeması üzerinde akan kademeli potansiyellerin ürettiği yapay yaşam.
git clone https://github.com/efealibozkurt/worm-simulator.git
cd worm-simulator
# index.html'i tarayıcıda aç — hepsi bu. Derleme yok, sunucu yok.Caenorhabditis elegans'ın 302 nöronluk sinir sisteminden davranışsal olarak en belirleyici 41 nöron ve 98 sinapslık alt kümeyi, donanım gerektirmeden, tamamen tarayıcıda çalıştıran etkileşimli bir yapay yaşam simülasyonu.
Bu bir davranış taklidi değildir: görüntüdeki kurt, gerçek konnektom bağlantı şeması üzerinde akan kademeli potansiyellerin ürettiği çıktıyla hareket eder. Kodu açın, kurdun "kararlarını" nöron düzeyinde izleyin.
index.html → herhangi bir modern tarayıcıda açın (çift tıklama yeterli)
Backend, derleme adımı, paket kurulumu yoktur. Tüm dosyalar yereldir.
- Kemotaksi dönüşündeki doğrudan ASER/koku heuristikleri kaldırıldı; yön kararı
artık
ASE/AWC → AIY/AIB → AIZ/RIA → RMDL/RMDRağ zincirinden gelir. PLM → PVC → AVBarka dokunma yolu güçlendirildi; arka hafif dokunma görünür bir ileri kaçış üretir ve tekrarlandıkça sinaptik depresyonla alışır.- Açılışta her nöral ağ dinlenim durumuna oturtulur; yapay ilk-kare AVA sıçraması ortadan kaldırılır.
- Enerji ve tokluk bilgisi ASEL/RIM/RIS modülatörlerine geri bağlanır.
- Petride canlı karar yolu göstergesi bulunur:
KOŞU,PİRUET,DÖNÜŞ,DWELLING,UYKU. - T5 saf ağ sürüşü ve T6 iki yönlü dokunma refleksi testleri eklendi.
C. elegans nöronları spike üretmez (voltaj-kapılı Na⁺ kanalı yoktur); zar potansiyeliyle orantılı kademeli (graded) sinyal iletir. Bu yüzden modelde ateşleme yoktur — her nöron, her adımda:
v ← v + (I − v) · dt/τ pasif zar / leak entegrasyonu
çıkış = σ(v) = 1/(1+e^(−k·v)) yumuşak eşik (k: hücre tipine özgü diklik)
I = G · Σ (± w · depresyon · çıkış_pre) + duyusal girdi + bias − yorgunluk
v: zar potansiyeli ·τ: hücre tipine özgü zaman sabiti ·G: sinaptik kazanç (tablodaki her "sinaps" gerçekte bir NMJ demetini temsil eder)- Sinapslar uyarıcı (+) veya baskılayıcı (−) olabilir; ağırlıklar WormAtlas /
White et al. (1986) ve Cook et al. (2019) topolojisinden normalize edilmiştir
(
js/connectome.js, 98 bağlantının her biri biyolojik yorumuyla birlikte). - Kararlılık: σ sınırlı olduğundan girdiler sınırlıdır; v ayrıca [−6, 6] aralığına kenetlenir → sayısal patlama matematiksel olarak imkânsızdır.
| Devre | Nöronlar | Biyolojik temel |
|---|---|---|
| Dokunma-kaçış | ALM/AVM/PLM (yumuşak), PVD (zararlı) → AVD/AVE/PVC → AVA/AVB | Chalfie & White 1985: ön dokunma → geri, arka dokunma → ileri kaçış |
| Kemotaksi | ASE (temporal gradyan), AWC (OFF-hücresi) → AIY/AIB → AIZ → RIA → RMD | Bargmann: piruet modeli + weathervane yönlendirmesi |
| Lokomotor osilatör | DB/DD ↔ VB/VD çapraz inhibisyon + adaptasyon | White'ın motor devresi; relaksasyon osilatörü = gövde dalgası |
| Modülatörler | RIS (lethargus/uyku), RIM | Turek & Bringmann: RIS uyku-benzeri durumun anahtarı |
Kapalı döngü: koku, her adımda kurdun o anki burun konumundan örneklenir (Gauss bulutu). Kurt hareket edince algısı (dC/dt → ASE) değişir, algı davranışı, davranış konumu değiştirir. Açık döngüde yönelim davranışı tanım gereği oluşamaz — bu ayrım kodda da vurgulanmıştır.
Karar rekabetleri (diyagramda beyaz halkalı düğümler):
- AIBL ↔ AIBR: koku azalırken hangi tarafa dönüleceği (karşılıklı inhibisyon)
- AVA ↔ AVB: ileri/geri yön seçimi (premotor komut rekabeti)
- Alışma (habituation): her yumuşak dokunuş, birinci basamak dokunma sinapslarında sinaptik depresyon biriktirir (ağırlık ×0.62, τ≈15 sn ile toparlanır). PVD nosiseptif sinapsları asla alışmaz.
- Nöral yorgunluk: AVA'daki aktivite-bağımlı adaptasyon + davranışsal yorgunluk sayacı; ardışık kaçışların eşiği yükselir, genliği düşer.
- Metabolizma: enerji bazal + hareket maliyetiyle azalır; besin üzerinde yenilenir. Açlık (<25) hızı artırır (foraging).
- Lethargus: toklukta (≥92) RIS devreye girer, komut devresini GABAerjik olarak baskılar → kurt durur (uyku-benzeri dönem), sonra uyanır.
- Roaming ↔ Dwelling: besin öbeğine ulaşan kurt yavaşlar, dönüşlerini kısıtlar ve öbekte kalıp beslenir — gerçek kurtçuğun iki durumlu davranışı.
Her kurdun kendi 41 nöronluk ağı vardır. Kurtlar yaşlanır, büyür
(ölçek 0.55→1.0), enerji tüketir; olgun ve tokken yumurta bırakır
(yeni nesil), açlıktan (6 sn enerjisizlik) veya yaşlılıktan (~13 dk) ölür.
Besin sonludur: öbekler yenildikçe tükenir ve geri gelmez; yeni kaynak
yalnızca kullanıcıdan veya ölen kurtların karkasından gelir — gerçek bir
kaynak baskısı altında ekosistem (nüfus üst sınırı 8). Bitkin kurt sürünür,
yaşlı kurt yavaşlar. Doğrulama testleri yaşam döngüsü kapalı kipte
(ecology:false) koşar.
Arayüzde açık/koyu tema geçişi, petride tıklayınca birincil kurt seçimi (ağ diyagramı seçili bireyin beynini gösterir) ve "Kurt bırak" modu vardır.
Kurtçuğun yön davranışı kokuya göre yazılmış bir oyun kuralı değildir. Kapalı döngü akışı şöyledir:
Kurdun hareketi → burnundaki koku değişimi (dC/dt)
→ ASEL/ASER ve AWCL/AWCR
→ AIY/AIB → AIZ/RIA
→ RMDL/RMDR baş motorları
→ dönüş momenti → yeni konum
İleri/geri hareket AVB/AVA rekabetinden, dokunma kaçışı ALM/AVM/PLM/PVD
→ AVD/PVC → AVA/AVB zincirinden, gövde dalgası ise DB/DD↔VB/VD motor
havuzlarından gelir. worm.js graded nöron çıkışlarını fiziksel harekete
çeviren motor katmanıdır; ASER'i okuyup doğrudan rastgele dönüş üreten bir
kemotaksi heuristiği yoktur. Küçük iletişim değişkenliği network.js içindeki
kimyasal sinapslarda modellenir.
Besin üzerindeki yavaşlama, yön kararı değil, beslenmeye ait motor düzeyi
dwelling durumudur. Dokunma bu yavaşlamayı geçici olarak keser; bu nedenle
arka dokunma, besin üzerindeki uykuda olmayan kurtta bile PLM→PVC→AVB
ileri kaçışı olarak gözlenebilir. Tokluk lethargus'u sırasında hafif dokunma
bastırılır ve arayüzde UYKU · RIS olarak gösterilir.
Arayüzdeki karar çipi canlı olarak şu ağ durumlarından birini gösterir:
KOŞU · AIY→AVB, PİRUET · AIB→AVA, DÖNÜŞ · RIA→RMD,
İLERİ KAÇIŞ · PLM→PVC→AVB, DWELLING · beslenme veya UYKU · RIS.
| Kontrol | İşlev |
|---|---|
| Ön/Arka · yumuşak | ALM+AVM / PLM dokunma pulsu (kaçış yönü site'a bağlı) |
| Ön/Arka · ZARARLI | PVD nosiseptörü devrede — alışmış devrede bile kaçış |
| Alışma protokolü | 2 sn arayla 10 yumuşak dokunuş (Rankin & Broster protokolü) → eğri çizilir |
| Hız (1–10×) | Kare başına sabit-adım sayısı (simülasyon dt=30 ms sabittir) |
| Duraklat / Sıfırla / Rastgele konum | — |
| Besin ekle | AÇIK konumdayken petriye tıklayınca yeni koku kaynağı |
| Kurt bırak | AÇIK konumdayken petriye tıklayınca yeni birey (nüfus ≤ 8) |
| Petriye tıklama | Kurda yakınsa birincil yapar; değilse birincil kurdu taşır |
| Tema düğmesi | Açık/koyu tema (tercih saklanır) |
| Ağ diyagramında hover | Nöronun biyolojik rolü + canlı v/çıkış değerleri |
Açılışta otomatik koşar; F12 konsolunda raporlanır ve olay günlüğüne
özet düşer. "Doğrulama testlerini çalıştır" butonu yeniden koşturur.
Tarayıcısız koşu: node test/run-headless.js
| Test | Kriter | Tipik sonuç |
|---|---|---|
| T1 Kemotaksi | 12 başlangıç konumundan ≥11'inde besine ulaşma (≤8 dk) | Saf ağ sürüşüyle 12/12 |
| T2 Kararlılık | 300.000 adım (2.5 saat sim) sonunda max|v| ≤ 6 | ~2.6, patlama yok |
| T3 Alışma | son-3 tepki ort. / ilk-3 tepki ort. < 0.75 | ~0.5 (tipik alışma eğrisi) |
| T4 Nosisepsiyon | alışmış devrede zararlı pik > max(0.28, 1.6×son yumuşak pik) | ~0.40 vs ~0.12 |
| T5 Saf ağ sürüşü | Koku azalması ASER→RIA→RMD üzerinden baş dönüşü üretmeli | ASER≈0.85, RMD farkı≈0.07, dönüş≈2 rad |
| T6 Dokunma refleksleri | Ön ALM/AVM kaçışı ve arka PLM/PVC ileri yanıtı | AVA≈0.42, AVB≈0.43→0.60 |
Testler görünür simülasyondan bağımsız Simulation örneklerinde koşar
(js/tests.js).
index.html arayüz iskeleti
style.css koyu bilim teması
js/connectome.js 41 nöron + 98 sinaps — her bağlantı biyolojik yorumlu
js/network.js kademeli-potansiyel ağ modeli (spike yok!), depresyon, adaptasyon
js/world.js petri kabı + Gauss koku alanı (kapalı döngü algısı)
js/worm.js graded çıkışları fiziksel harekete çeviren motor katmanı
js/simulation.js orkestrasyon: algı→ağ→hareket→metabolizma→lethargus
js/tests.js T1–T6 kabul testleri (tarayıcı VE Node uyumlu)
js/ui.js petri/konnektom/grafik çizimleri, ipuçları
js/main.js ana döngü (sabit adımlı sim + ayrık render), kontroller
test/run-headless.js Node'da tarayıcısız doğrulama koşucusu
Konnektom tablosunu genişletmek (yeni nöron/sinaps eklemek) için yalnızca
js/connectome.js'teki listelere satır ekleyin — ağ, testler ve arayüz
otomatik uyum sağlar. PR'lar ve bilimsel düzeltmeler memnuniyetle karşılanır.
Bağlantı topolojisi ve nöron model sınıfı (kademeli, spike'sız) literatüre sadıktır; sinaps ağırlıkları ise ölçülmüş değerler bilinmediğinden davranışa kalibre edilmiştir. Ayrıntılar kod içi yorumlarda.
Worm Simulator v1.1 is an interactive, browser-only simulation of a
behaviorally critical C. elegans connectome subset (41 neurons, 98 synapses,
topology after White et al. 1986 / Cook et al. 2019). Neurons use graded
potentials (no spikes), matching nematode physiology. Implemented circuits:
touch-escape reflex (Chalfie & White), chemotaxis (Bargmann; AWC OFF-response,
ASE temporal-gradient sensing, network-driven RIA/RMD turning) and a locomotor
relaxation oscillator (DB/DD↔VB/VD cross-inhibition). Adaptive mechanisms:
synaptic-depression habituation (the PVD nociceptive pathway never habituates),
neural fatigue, metabolism, finite food, growth, reproduction, starvation/age
death, and RIS-driven lethargus. The UI exposes the active neural decision path
and both touch directions are verified through the ALM/AVD/AVA and PLM/PVC/AVB
pathways. Acceptance tests (12-position chemotaxis, 300k-step stability, pure
network steering, two-way touch response, habituation curve, noxious reliability)
run headlessly via node test/run-headless.js. Zero dependencies, zero build
steps — open index.html.
MIT — ayrıntılar LICENSE dosyasında.