CBP-Lab: Çift yıldız çevresindeki gezegen adaylarının zamanlama, astrometri ve dinamik ile sınanması
Tutulma zamanlamasıyla (O–C) önerilmiş gezegen ve kahverengi cüce adaylarını Gaia DR4 epoch astrometrisiyle birleştirip N-body kararlılık analiziyle eleyen, makine öğrenmesiyle hızlandırılmış bir analiz platformu.
§1Kapsam ve araştırma sorusu
Yazılımı değil, önce cevaplayacağı soruyu tanımlıyoruz. Her bileşen bu soruya hizmet ediyorsa kalır.
Araştırma sorusu. Tutulma zamanlamasıyla önerilmiş çift yıldız çevresi cisimler (NN Ser, Kepler-451, HW Vir, NY Vir…) Gaia DR4 astrometrisiyle tutarlı mı? Tutarlıysa gerçek kütleleri ve yörünge eğimleri nedir? Bu çözümler milyonlarca yıl dinamik olarak kararlı kalabiliyor mu?
Kapsam içi (MSc)
- Tutulma zamanlarını toplama, O–C diyagramı, LTT modeli fit etme
- Manyetik aktivite alternatifi: Applegate enerji testi
- Gaia DR3 (RUWE, yörünge çözümleri) ve DR4 epoch astrometrisini içe aktarma
- O–C + astrometri ortak Bayesçi fit: gerçek kütle ve eğim
- REBOUND ile N-body kararlılık: MEGNO, kararlılık haritaları
- ML kararlılık vekil modeli (surrogate) ve aktif öğrenme
- Enjeksiyon-geri kazanım testleri: DR4 öncesi hattı doğrulama
Kapsam dışı (şimdilik, doktora)
- Gezegen oluşumu, disk ve popülasyon sentezi
- Yıldız evrimi ve ortak zarf fazı modellemesi
- Atmosfer, iklim ve yaşanabilirlik
- Özel bir N-body motoru yazmak (REBOUND kullanılacak)
Mimari bunlara kapı bırakıyor. DynamicsBackend ve TimingModel arayüzleri eklenti mantığıyla genişletilebilir (§7, §14).
§2Aktörler
Sistemle etkileşen insanlar ve dış sistemler.
| Aktör | Tür | Sistemden beklentisi |
|---|---|---|
| Araştırmacı (sen) | Birincil, insan | Veri girer, fit ve simülasyon çalıştırır, sonuç ve figür üretir. |
| Danışman / Jüri | İkincil, insan | Raporu inceler, deneyi aynı config ile yeniden üretebilmek ister. |
| Gaia Arşivi (ESA TAP) | Dış sistem | DR3 kaynak ve yörünge tabloları, DR4 epoch astrometrisi. |
| MAST / TESS | Dış sistem | Işık eğrileri; yeni tutulma anları bunlardan ölçülür. |
| Literatür / Grup verisi | Dış kaynak | Yayınlanmış tutulma zamanları; bölümün kendi O–C gözlemleri. |
| Hesaplama altyapısı | Dış sistem | Yerel CPU/GPU havuzu; ileride TRUBA (TÜBİTAK ULAKBİM) kümesi. |
§3Use case diyagramı
16 use case, altı paket. Kesikli oklar «include» ilişkisi: ok yönündeki use case, çağıranın zorunlu parçasıdır.
%%{init: {"flowchart":{"curve":"basis","nodeSpacing":28,"rankSpacing":60}}}%%
flowchart LR
R["Araştırmacı"]:::actor
D["Danışman / Jüri"]:::actor
G["Gaia Arşivi"]:::ext
M["MAST / TESS"]:::ext
H["Hesaplama altyapısı"]:::ext
subgraph VERI["Veri"]
UC01(["UC-01 Hedef sistem kaydet"])
UC02(["UC-02 Tutulma zamanlarını içe aktar"])
UC03(["UC-03 TESS'ten tutulma anı ölç"])
end
subgraph ZAM["Zamanlama analizi"]
UC04(["UC-04 Efemeris ve O–C üret"])
UC05(["UC-05 LTT modeli fit et"])
UC06(["UC-06 Applegate testi"])
end
subgraph AST["Astrometri"]
UC07(["UC-07 Gaia verisi içe aktar"])
UC08(["UC-08 Tespit edilebilirlik hesapla"])
UC09(["UC-09 O–C + astrometri ortak fit"])
end
subgraph DIN["Dinamik"]
UC10(["UC-10 Tek N-body kararlılık koşusu"])
UC11(["UC-11 Kararlılık haritası üret"])
UC12(["UC-12 Posterioru dinamik olarak filtrele"])
end
subgraph ML["Makine öğrenmesi"]
UC13(["UC-13 Vekil modeli eğit"])
UC14(["UC-14 Enjeksiyon-geri kazanım testi"])
end
subgraph REP["Rapor ve tekrar üretim"]
UC15(["UC-15 Figür ve rapor üret"])
UC16(["UC-16 Deneyi yeniden üret"])
end
R --- UC01 & UC02 & UC03 & UC05 & UC06 & UC08 & UC09 & UC11 & UC12 & UC13 & UC14 & UC15
D --- UC15 & UC16
M --- UC03
G --- UC07
H --- UC10
UC03 -.->|include| UC02
UC05 -.->|include| UC04
UC06 -.->|include| UC05
UC09 -.->|include| UC05
UC09 -.->|include| UC07
UC08 -.->|include| UC07
UC11 -.->|include| UC10
UC12 -.->|include| UC10
UC12 -.->|include| UC13
UC13 -.->|include| UC11
UC14 -.->|include| UC09
classDef actor fill:#E3ECF4,stroke:#2C5E8C,color:#18212B,font-weight:bold
classDef ext fill:#F7EBD9,stroke:#9A5A10,color:#18212B
Şekil 1. Mavi: insan aktörler. Turuncu: dış sistemler. Tezin omurgası UC-05 → UC-09 → UC-12 zinciridir.
| ID | Use case | Öncelik | Kısa açıklama |
|---|---|---|---|
| UC-01 | Hedef sistem kaydet | çekirdek | Çiftin kütleleri, periyodu, Gaia source_id'si, uzaklığı. |
| UC-02 | Tutulma zamanlarını içe aktar | çekirdek | Literatür tabloları ve grup verisi; hepsi BJD_TDB'ye çevrilir. |
| UC-03 | TESS'ten tutulma anı ölç | ikincil | Işık eğrisinden orta-tutulma anı ve hatası (Kwee–van Woerden veya model fit). |
| UC-04 | Efemeris ve O–C üret | çekirdek | Doğrusal/kuadratik efemeris, döngü sayısı E, kalanlar. |
| UC-05 | LTT modeli fit et | çekirdek | 1–3 cisimli ışık-yolu modeli; BIC ve kanıt (evidence) ile model seçimi. |
| UC-06 | Applegate testi | çekirdek | Sinyali yıldız manyetik döngüsü açıklayabilir mi? Enerji bütçesi. |
| UC-07 | Gaia verisi içe aktar | DR4 | DR3 RUWE ve NSS çözümleri; 2 Aralık'tan sonra DR4 epoch verisi. |
| UC-08 | Tespit edilebilirlik hesapla | çekirdek | Her aday için α (μas) ve Gaia hassasiyetiyle karşılaştırma. Hedef seçimini belirler. |
| UC-09 | O–C + astrometri ortak fit | DR4 | Tezin ana katkısı: sin i kırılır, gerçek kütle çıkar. |
| UC-10 | Tek N-body kararlılık koşusu | çekirdek | REBOUND, IAS15/WHFast, MEGNO, çarpışma ve fırlatılma tespiti. |
| UC-11 | Kararlılık haritası üret | çekirdek | a–e ızgarası üzerinde binlerce koşu; paralel çalışır. |
| UC-12 | Posterioru dinamik olarak filtrele | çekirdek | Fit posteriorundaki çözümlerin yüzde kaçı kararlı? |
| UC-13 | Vekil modeli eğit | ML | p(kararlı | θ) sınıflandırıcısı. Önce SPOCK taban çizgisi, sonra sisteme özel model. |
| UC-14 | Enjeksiyon-geri kazanım testi | çekirdek | Sahte DR4 verisine bilinen cisim ekle, hat onu geri buluyor mu? |
| UC-15 | Figür ve rapor üret | ikincil | Makale kalitesinde O–C, köşe (corner) ve kararlılık haritası figürleri. |
| UC-16 | Deneyi yeniden üret | çekirdek | Config hash + git SHA + seed ile birebir aynı sonuç. |
§4Use case senaryoları
En kritik dört use case için tam senaryo: ön koşul, ana akış, alternatif akış ve son koşul.
UC-05 LTT modeli fit et
- Aktör
- Araştırmacı
- Ön koşul
- Sistem kayıtlı (UC-01), en az 30 tutulma zamanı var, hepsi BJD_TDB.
- Ana akış
- Araştırmacı modeli seçer:
ltt1,ltt2,ltt2+quad… - Sistem efemerisi çıkarır ve O–C'yi hesaplar (UC-04).
- Önceki dağılımlar (prior) config'ten okunur.
- Önce optimizasyonla başlangıç noktası, ardından MCMC veya nested sampling.
- Posterior, BIC ve log Z kaydedilir; kalan (residual) grafiği üretilir.
- Araştırmacı modeli seçer:
- Alternatif
- 3a. Zincirler yakınsamazsa (R̂ > 1.01) sistem uyarır, örnek sayısını artırmayı önerir.
3b. Kalanlarda anlamlı periyodiklik kalırsa bir cisim daha eklemeyi önerir. - Son koşul
Posteriornesnesi deney kaydına bağlanır.
UC-09 O–C + astrometri ortak fit
- Aktör
- Araştırmacı, Gaia Arşivi
- Ön koşul
- UC-05 posterioru var, UC-08'e göre α ≥ 3σGaia, DR4 verisi indirilmiş.
- Ana akış
- Ortak parametre vektörü kurulur: P, e, ω, Tp paylaşılır; i ve Ω yalnızca astrometriden gelir.
- Zamanlama ve astrometri log-olabilirlikleri toplanır.
- Nested sampling ile posterior ve kanıt hesaplanır.
- Gerçek kütle m = m sin i / sin i türetilir.
- Alternatif
- 2a. Astrometri sinyal görmezse (α uyumsuz) kütleye üst limit raporlanır. Bu da geçerli bir bilimsel sonuçtur.
2b. O–C ve astrometri çelişirse gerilim metriği raporlanır: aday cisim sorgulanır. - Son koşul
- Tez tablosunun bir satırı: sistem, m, i, sonuç tipi.
UC-11 Kararlılık haritası üret
- Aktör
- Araştırmacı, Hesaplama altyapısı
- Ön koşul
- En iyi çözüm (best-fit) ve ızgara tanımı: örneğin ac × ec, 200 × 200.
- Ana akış
- Izgara, bağımsız
SimulationJob'lara bölünür. - İş havuzu (~20 çekirdek) işleri paralel çalıştırır.
- Her iş ⟨Y⟩ (MEGNO), fırlatılma ve yakın geçiş bayraklarını döndürür.
- Sonuçlar Parquet'e yazılır, harita çizilir.
- Izgara, bağımsız
- Alternatif
- 2a. Süre sınırı aşılırsa iş
TIMEOUTolarak işaretlenir ve harita üzerinde ayrı renkte gösterilir.
2b. Yarıda kalan harita kaldığı yerden devam eder (idempotent işler). - Son koşul
- Harita ve etiketli veri. Etiketler UC-13'ün eğitim verisidir.
UC-14 Enjeksiyon-geri kazanım testi
- Aktör
- Araştırmacı
- Ön koşul
- Gaia tarama zamanları ve tarama açıları: DR4 öncesi Gaia GOST aracından ya da simüle edilerek.
- Ana akış
- Bilinen (m, i, P, e) değerleriyle sahte astrometri ve O–C verisi üretilir, gerçekçi gürültü eklenir.
- UC-09 bu veriye körlemesine çalıştırılır.
- Geri kazanılan parametreler enjekte edilenlerle karşılaştırılır.
- Yüzlerce tekrarla sapma (bias) ve kapsama (coverage) ölçülür.
- Neden kritik
- 2 Aralık'ta gerçek veri geldiğinde hattın doğru çalıştığı zaten kanıtlanmış olur. Jüri karşısında en güçlü savunma budur.
§5Fonksiyonel olmayan gereksinimler
Bilimsel yazılımda asıl hatalar burada çıkar. Hepsi test edilebilir biçimde yazıldı.
| ID | Gereksinim | Ölçüt / test |
|---|---|---|
| NFR-01 | Zaman sistemi. İçeride tek zaman ölçeği kullanılır: BJD_TDB. HJD_UTC gibi eski kayıtlar girişte dönüştürülür ve dönüşüm loglanır. | Dönüşüm modülünün astropy referans değerleriyle birim testi. HJD ile BJD farkı yaklaşık 1 dk'ya çıkabilir, bu da O–C sinyaliyle aynı mertebededir. |
| NFR-02 | Birim güvenliği. Sınırlarda astropy Quantity, çekirdekte G = 1 (AU, M☉, yıl/2π) birimleri. | Her public fonksiyonda birim doğrulaması; birimsiz sayı kabul edilmez. |
| NFR-03 | Sayısal doğruluk. IAS15'te bağıl enerji hatası < 10⁻⁹. | İki cisim Kepler problemi analitik çözümle karşılaştırılır; CI'da çalışır. |
| NFR-04 | Tekrar üretilebilirlik. Her deney: config hash, git SHA, seed, paket sürümleri. | UC-16: aynı config iki kez çalıştırılınca posterior istatistikleri aynı çıkar. |
| NFR-05 | Performans. 200×200 kararlılık haritası (10⁶ yıl, 3–4 cisim) dizüstünde bir gecede biter. | Benchmark betiği; tek koşu süresi × iş sayısı / çekirdek sayısı. |
| NFR-06 | Veri kökeni (provenance). Her tutulma zamanı kaynağıyla (bibcode veya gözlem gecesi) saklanır. | Kaynağı boş satır içe aktarılmaz. |
| NFR-07 | Test kapsamı. Matematik çekirdeği (LTT, astrometri, efemeris) için %90 üstü. | pytest + coverage; yayınlanmış bir LTT çözümü regresyon testi olarak kullanılır. |
§6Matematik çekirdeği
Kodun cbplab.core paketinde yaşayacak denklemler. Bu kısmı birlikte türetip kodlayacağız.
Efemeris ve O–C
E tam sayı döngü numarasıdır. Görünmeyen bir cisim yoksa O–C düz bir çizgi etrafında saçılır; periyodik bir dalga varsa bir şey çifti çekiyordur.
Işık-yolu zamanı etkisi (LTT, Irwin 1952)
a12: çiftin sistem kütle merkezi etrafındaki yörüngesinin yarı büyük ekseni. ν: gerçek anomali; t'den Kepler denklemi M = E − e sin E çözülerek bulunur. Bir dakikalık O–C genliği yaklaşık 0.12 AU'luk bir a12 sin i demektir.
Kütle fonksiyonu
O–C tek başına yalnızca m sin i verir. Bu tezin çözdüğü dejenerelik budur.
Astrometrik sinyal ve birleştirme
Kilit gözlem: Gaia'nın gördüğü yalpalama, çiftin kütle merkezinin aynı yörüngesidir, yani O–C'nin ölçtüğü a12'nin açısal karşılığıdır. İkisi birleşince sin i = (a12 sin i)O–C / (α·d) çıkar. Örnek: 0.6 M☉ çift, 3.4 AU'da 5 MJüp cisim, d = 400 pc için α ≈ 67 μas ve P ≈ 8 yıl.
Applegate testi (manyetik alternatif)
Gereken periyot değişimini üretmek için yıldızın iç açısal momentum aktarımına harcaması gereken enerji ΔE hesaplanır ve yıldızın Pmod boyunca ürettiği enerjiyle karşılaştırılır. ΔE/Esec > 1 ise manyetik açıklama elenir. Modern sürüm: Völschow ve ark. (2016) sonlu kabuk modeli.
Dinamik kararlılık
PCEB çiftlerinde açift ≈ 0.005 AU çok küçük, cisimler ise birkaç AU'da. Holman–Wiegert sınırı neredeyse her zaman sağlanır; asıl kararsızlık kaynağı cisimlerin birbirini bozmasıdır. Bu yüzden ADR-02'de iç çifti tek kütle noktası olarak modelleme kararı alıyoruz: hesap yüzlerce kat hızlanır.
§7Sınıf diyagramı (alan modeli)
Tanımlayıcılar İngilizce: kod ve makale dünyası öyle. «interface» olanlar genişleme noktalarıdır.
classDiagram
direction LR
class TargetSystem {
+str name
+int gaia_source_id
+Quantity distance
+float ruwe
+InnerBinary binary
+list~Companion~ companions
}
class InnerBinary {
+Star primary
+Star secondary
+Quantity period
+float t0_bjd
+total_mass() Quantity
}
class Star {
+Quantity mass
+Quantity radius
+Quantity teff
+Quantity luminosity
+str kind
}
class Companion {
+str label
+Quantity m_sini
+Quantity period
+float ecc
+float omega
+float t_peri
+semi_major_axis(M) Quantity
+astrometric_signature(d) Quantity
}
class TimingPoint {
+int cycle
+float bjd_tdb
+float sigma_s
+str eclipse_type
+str source
+str method
}
class TimingSeries {
+list~TimingPoint~ points
+o_minus_c(eph) ndarray
}
class Ephemeris {
+float t0
+float period
+float quad
+predict(E) float
}
class TimingModel {
<<interface>>
+delay(t, theta) ndarray
+param_names() list
}
class LTTModel {
+int n_companions
+delay(t, theta) ndarray
}
class AstrometricSeries {
+ndarray t
+ndarray al_residual
+ndarray scan_angle
+ndarray sigma
+str release
}
class AstrometricModel {
+predict(t, theta) ndarray
}
class JointLikelihood {
+log_prob(theta) float
}
class Sampler {
<<interface>>
+run(lik, prior) Posterior
}
class Posterior {
+ndarray samples
+float log_evidence
+summary() DataFrame
}
class ApplegateTest {
+run(star, amp, pmod) ApplegateResult
}
class DynamicsBackend {
<<interface>>
+integrate(cfg) StabilityResult
}
class ReboundBackend
class SimulationConfig {
+list bodies
+str integrator
+float t_max
+int seed
}
class StabilityResult {
+float megno
+bool ejected
+bool close_encounter
+float t_survive
+is_stable() bool
}
class StabilitySurrogate {
<<interface>>
+predict_proba(theta) ndarray
}
class SPOCKAdapter
class CBPClassifier
class Experiment {
+str id
+str config_hash
+str git_sha
+int seed
}
TargetSystem "1" *-- "1" InnerBinary
InnerBinary "1" *-- "2" Star
TargetSystem "1" o-- "0..*" Companion
TargetSystem "1" --> "1" TimingSeries
TargetSystem "1" --> "0..1" AstrometricSeries
TimingSeries "1" *-- "many" TimingPoint
TimingSeries ..> Ephemeris
TimingModel <|.. LTTModel
JointLikelihood --> TimingModel
JointLikelihood --> AstrometricModel
JointLikelihood --> TimingSeries
JointLikelihood --> AstrometricSeries
Sampler ..> JointLikelihood
Sampler ..> Posterior
ApplegateTest ..> Star
DynamicsBackend <|.. ReboundBackend
DynamicsBackend ..> SimulationConfig
DynamicsBackend ..> StabilityResult
StabilitySurrogate <|.. SPOCKAdapter
StabilitySurrogate <|.. CBPClassifier
CBPClassifier ..> StabilityResult : eğitim etiketi
Experiment o-- Posterior
Experiment o-- StabilityResult
Şekil 2. Üç arayüz (TimingModel, DynamicsBackend, StabilitySurrogate) sistemin büyüyeceği yerlerdir. Doktorada gezegen oluşumu, DynamicsBackend'in yeni bir gerçeklemesi olarak eklenir.
§8Bileşen diyagramı
Katmanlı mimari. Bağımlılıklar yalnızca aşağı doğru akar; core hiçbir şeye bağımlı değildir, saf matematiktir.
flowchart TB
subgraph UI["Arayüz katmanı"]
CLI["cbp CLI (Typer)"]
NB["Jupyter defterleri"]
end
subgraph APP["Uygulama katmanı"]
PIPE["pipelines: fit, stability, inject"]
EXP["experiment: config, hash, kayıt"]
REPORT["report: figür, tablo"]
end
subgraph DOM["Alan katmanı"]
CORE["core: ephemeris, ltt, astrometry, kepler, applegate"]
INF["inference: likelihood, prior, samplers"]
DYN["dynamics: DynamicsBackend, rebound_backend"]
MLP["ml: surrogate, features, active_learning"]
end
subgraph INFRA["Altyapı katmanı"]
IO["io: gaia_client, mast_client, timing_loader"]
STORE["store: Parquet, HDF5, cache"]
EXEC["exec: yerel havuz, Slurm adaptörü"]
end
EXT1[("Gaia TAP")]:::ext
EXT2[("MAST")]:::ext
CLI --> PIPE
NB --> PIPE
PIPE --> EXP
PIPE --> REPORT
PIPE --> INF
PIPE --> DYN
PIPE --> MLP
INF --> CORE
DYN --> CORE
MLP --> DYN
PIPE --> IO
EXP --> STORE
IO --> STORE
DYN --> EXEC
IO --> EXT1
IO --> EXT2
classDef ext fill:#F7EBD9,stroke:#9A5A10
Şekil 3. core NumPy dışında bağımlılık taşımaz. Bu sayede yayınlanmış çözümlerle birim testi yapmak ve ileride JAX'e taşımak kolaylaşır.
§9Aktivite diyagramı: bir sistemin analiz hattı
Her hedef sistem bu karar ağacından geçer. Her dal bir tez sonucu üretir, çıkmaz sokak yoktur.
flowchart TD
A(["Başla: hedef sistem"]) --> B["Tutulma zamanlarını topla, BJD_TDB'ye çevir"]
B --> C["Efemeris fit, O–C üret"]
C --> D{"O–C'de anlamlı periyodik sinyal var mı?"}
D -- Hayır --> Z1["Sonuç: cisim yok veya üst limit"]
D -- Evet --> E["LTT fit: 1, 2, 3 cisim; BIC ve log Z ile seç"]
E --> F{"Applegate enerji testi: manyetik açıklama mümkün mü?"}
F -- Mümkün --> Z2["Sonuç: sinyal belirsiz, manyetik aktivite dışlanamıyor"]
F -- "Mümkün değil" --> G["Tespit edilebilirlik: α ile Gaia hassasiyetini karşılaştır"]
G --> H{"α ≥ 3σ ?"}
H -- Hayır --> I["Yalnızca O–C posterioru"]
H -- Evet --> J["DR4 ile ortak fit: gerçek m ve i"]
J --> K{"O–C ve astrometri tutarlı mı?"}
K -- Hayır --> Z3["Sonuç: aday çürütüldü veya gerilim raporu"]
K -- Evet --> L["Posterior örnekleri"]
I --> L
L --> M["Vekil model ile p(kararlı) tahmini"]
M --> N{"0.2 < p < 0.8 ?"}
N -- "Evet, belirsiz" --> O["REBOUND ile tam N-body"]
N -- "Hayır, net" --> P["Vekil etiketi kabul et"]
O --> Q["Kararlı çözüm oranı ve harita"]
P --> Q
Q --> Z4(["Sonuç: kütle, eğim ve dinamik geçerlilik"])
Şekil 4. Dört farklı çıkış noktası (Z1–Z4), dört yayınlanabilir sonuç tipi demektir. "Hiçbir şey bulamadım" riski tasarım gereği yok.
§10Sekans diyagramları
10.1 Ortak fit ve dinamik filtre (UC-09 + UC-12)
sequenceDiagram
actor R as Araştırmacı
participant CLI as cbp CLI
participant EXP as Experiment
participant IO as io.gaia_client
participant LIK as JointLikelihood
participant SMP as Sampler (dynesty)
participant SUR as Surrogate
participant DYN as ReboundBackend
R->>CLI: cbp fit NN_Ser --model ltt2+astro
CLI->>EXP: create(config) → id, hash, seed
CLI->>IO: epoch_astrometry(source_id)
IO-->>CLI: AstrometricSeries (önbellekten veya TAP'ten)
CLI->>LIK: build(timing, astro, priors)
CLI->>SMP: run(LIK)
loop her canlı nokta
SMP->>LIK: log_prob(θ)
LIK-->>SMP: log L
end
SMP-->>CLI: Posterior (örnekler, log Z)
CLI->>SUR: predict_proba(örnekler)
SUR-->>CLI: p(kararlı)
loop belirsiz örnekler için
CLI->>DYN: integrate(cfg)
DYN-->>CLI: StabilityResult
end
CLI->>EXP: save(posterior, stabilite, figürler)
CLI-->>R: rapor yolu + özet tablo
10.2 Aktif öğrenmeyle vekil model eğitimi (UC-13)
sequenceDiagram
participant AL as ActiveLearner
participant SUR as CBPClassifier (GPU)
participant POOL as İş havuzu
participant DYN as ReboundBackend
participant ST as Store
AL->>POOL: başlangıç: 2000 rastgele θ
POOL->>DYN: integrate × 2000 (paralel)
DYN-->>ST: etiketler (MEGNO, fırlatılma)
loop doğruluk hedefe ulaşana dek
AL->>SUR: fit(etiketli veri)
AL->>SUR: aday havuzunda belirsizlik
SUR-->>AL: en belirsiz 500 θ
AL->>POOL: yalnızca bunları simüle et
POOL->>DYN: integrate × 500
DYN-->>ST: yeni etiketler
end
AL-->>ST: model + kalibrasyon eğrisi
Şekil 5–6. Aktif öğrenmenin fikri: pahalı simülasyonu yalnızca modelin kararsız kaldığı sınır bölgesinde harcamak. Bu, "ML'i araç olarak kullanıyoruz" cümlesinin somut karşılığıdır.
§11Durum diyagramı: SimulationJob
stateDiagram-v2 [*] --> Queued Queued --> Running: işçi aldı Running --> Stable: t_max'a ulaştı, ⟨Y⟩ yaklaşık 2 Running --> Chaotic: ⟨Y⟩ eşiği aştı Running --> Ejected: r > r_max Running --> Collided: yakın geçiş / çarpışma Running --> Timeout: duvar saati sınırı Running --> Failed: sayısal hata Timeout --> Queued: daha uzun sınırla yeniden dene Failed --> Queued: IAS15 ile yeniden dene Stable --> Stored Chaotic --> Stored Ejected --> Stored Collided --> Stored Stored --> [*]
Şekil 7. Her terminal durum aynı zamanda bir sınıflandırma etiketidir. Vekil modeli ikili değil, çok sınıflı eğitmek mümkün olur.
§12Dağıtım diyagramı
Başlangıçta her şey yeni dizüstünde çalışır. TRUBA yalnızca gerekirse eklenir, kod değişmez.
flowchart LR
subgraph LAP["Dizüstü: Core Ultra 9 275HX, RTX 5070 Ti 12 GB, 32 GB"]
direction TB
CPU["CPU havuzu: ~20 REBOUND işçisi (joblib), her simülasyon tek çekirdek"]
GPU["GPU: PyTorch CUDA; vekil model eğitimi, ileride JAX ile toplu olabilirlik"]
SSD[("NVMe: data/raw, data/processed, runs/ (Parquet, HDF5)")]
end
subgraph REMOTE["Dış servisler"]
GAIA[("Gaia Arşivi TAP")]
MAST[("MAST / TESS")]
GH["GitHub: repo + CI (pytest)"]
end
subgraph HPC["İsteğe bağlı: TRUBA"]
SLURM["Slurm dizi işleri: büyük kararlılık haritaları"]
end
CPU --- SSD
GPU --- SSD
SSD <--> GAIA
SSD <--> MAST
LAP <--> GH
CPU -. "exec.slurm adaptörü" .-> SLURM
Şekil 8. REBOUND tek simülasyonda çok çekirdek kullanmaz; paralellik simülasyonlar arasındadır. 275HX'in 8 P + 16 E çekirdeği bu tür "utanç verici derecede paralel" iş için idealdir. GPU burada N-body için değil, ML için.
§13Repo yapısı ve teknoloji yığını
cbp-lab/ ├── pyproject.toml # uv ile bağımlılık yönetimi ├── configs/ │ ├── systems/ # nn_ser.yaml, kepler451.yaml … │ └── experiments/ # fit_ltt2.yaml, stabmap_200.yaml ├── src/cbplab/ │ ├── core/ # ephemeris.py, kepler.py, ltt.py, astrometry.py, applegate.py │ ├── inference/ # likelihood.py, priors.py, samplers/ │ ├── dynamics/ # backend.py (arayüz), rebound_backend.py, jobs.py │ ├── ml/ # features.py, surrogate.py, spock_adapter.py, active.py │ ├── io/ # gaia_client.py, mast_client.py, timing_loader.py, timescales.py │ ├── store/ # parquet.py, cache.py │ ├── exec/ # local_pool.py, slurm.py │ ├── experiment.py # config hash, git SHA, seed │ ├── report/ # figures.py, tables.py │ └── cli.py # cbp fit | stabmap | inject | report ├── tests/ │ ├── core/ # analitik testler: Kepler, LTT simetri, birimler │ └── regression/ # yayınlanmış çözümleri yeniden üretme ├── notebooks/ # keşif; kalıcı kod src/'ye taşınır ├── data/ # git dışı; DVC veya basit manifest └── runs/ # deney çıktıları, id bazlı
| İş | Seçim | Neden |
|---|---|---|
| N-body | REBOUND + REBOUNDx | Standart, MEGNO yerleşik, IAS15/WHFast/MERCURIUS integratörleri var. |
| Astronomi araçları | astropy, astroquery, lightkurve | Zaman ölçekleri, birimler, Gaia TAP, TESS verisi. |
| Bayesçi çıkarım | emcee, dynesty | emcee hızlı keşif için; dynesty model karşılaştırması (log Z) için. |
| ML | scikit-learn, XGBoost, PyTorch | Önce ağaç modelleri (az veri, yorumlanabilir), gerekirse sinir ağı. |
| Kararlılık taban çizgisi | SPOCK (Tamayo ve ark. 2020) | Hazır bir ML kararlılık sınıflandırıcısı. Kendi modelimiz onu geçmek zorunda. |
| Config | YAML + pydantic | Doğrulanmış, hash'lenebilir deney tanımı. |
| Kalite | pytest, ruff, GitHub Actions | Matematik çekirdeği her commit'te test edilir. |
§14Mimari karar kayıtları (ADR)
| ADR | Karar | Gerekçe ve bedel |
|---|---|---|
| ADR-01 | Kendi N-body motorumuzu yazmıyoruz; REBOUND kullanıyoruz. | Tezin katkısı entegratör değil, bilimsel soru. Jüri, kanıtlanmış bir koda itiraz etmez. |
| ADR-02 | İç çift, varsayılan olarak tek kütle noktası. | açift cisimlerin yörüngesinden yaklaşık 1000 kat küçük. Hız kazancı çok büyük. Bedeli: her sistem için bir kez tam çift modelle doğrulama koşusu yapılacak. |
| ADR-03 | Tek iç zaman ölçeği: BJD_TDB. | Karışık zaman ölçekleri, sahte O–C sinyalinin en yaygın kaynağıdır. |
| ADR-04 | Özel ML modelinden önce SPOCK taban çizgisi. | "Neden hazır aracı kullanmadın?" sorusunu önceden cevaplar. SPOCK kompakt çoklu gezegenler için eğitildi; yüksek eksantrikli ve geniş yörüngeli çift yıldız çevresi rejimde ne kadar iyi çalıştığı ölçülecek. Tezin ML katkısı bu fark olabilir. |
| ADR-05 | Deney = değişmez config + hash. | UC-16 ve jüri için tekrar üretilebilirlik. Bedeli: config şemasını erken tasarlamak. |
| ADR-06 | DR4 formatı belli olmadan AstrometricSeries soyut tutulur. | DR4 veri modeli tam yayınlanmadan kod yazılıyor; adaptör deseni riski tek dosyaya hapseder. |
§15Yol haritası
Sabit nokta 2 Aralık. Her sprintin sonunda gösterilebilir bir çıktı var.
İskelet
Repo, uv ortamı, CI, ilk REBOUND koşusu, core/kepler.py ve analitik testleri.
Bitti tanımı: iki cisim testi yeşil, enerji hatası < 10⁻⁹.
Kepler-451 demosu
Makaledeki aday cisimlerle kararlılık sonucunu REBOUND ile yeniden üret.
Bitti tanımı: makaledeki kararlılık süresiyle uyumlu figür → hocaya götürülecek demo.
Zamanlama çekirdeği
Zaman ölçeği dönüşümleri, efemeris, LTT modeli, emcee fit, Applegate testi.
Bitti tanımı: NN Ser'in yayınlanmış LTT çözümü regresyon testiyle yeniden üretildi.
Kararlılık haritaları
İş havuzu, MEGNO haritaları, posterior filtresi, SPOCK taban çizgisi.
Bitti tanımı: 200×200 harita bir gecede bitiyor (NFR-05).
DR4 hazırlığı
Tespit edilebilirlik hesaplayıcı (UC-08), astrometri modeli, sahte veriyle enjeksiyon-geri kazanım (UC-14).
Bitti tanımı: hedef listesi α'ya göre sıralı; sahte veride kütle sapması < 1σ.
Gerçek DR4
Veriyi indir, adaptörü tamamla, en umutlu 2–3 sistemde ortak fit.
Bitti tanımı: en az bir sistem için gerçek kütle veya üst limit.
Vekil model ve seminer
Aktif öğrenme, SPOCK karşılaştırması, seminer sunumu ve tez önerisi taslağı.
Bitti tanımı: tez önerisi danışmana teslim.
§16Riskler ve açık sorular
| Risk | Etki | Önlem |
|---|---|---|
| Sistemler sönük ve uzak, α Gaia hassasiyetinin altında kalabilir. | Yüksek | UC-08 ile hedefleri erkenden ele. Görülmezse bile kütleye üst limit bir sonuçtur. |
| DR4 epoch verisinin formatı veya kapsamı beklenenden farklı olabilir. | Orta | ADR-06 adaptör deseni; S4'te sahte veriyle hazırlık. |
| Başka gruplar aynı sistemlere DR4 ile bakabilir. | Orta | Avantajımız grubun kendi O–C verisi ve 2 Aralık'ta hazır kod. |
| Danışman bu gruptan olmayabilir. | Orta | Kepler-451 demosuyla gruptan birinin kapısını çal; danışman ilk yarıyıl sonuna kadar değiştirilebilir. |
| Ders yükü sprintleri kaydırabilir. | Orta | S1 ve S4 kritik; S3 ve S6 esneyebilir. |
Doğrulanacaklar. Kepler-451 makalesinin (arXiv:2606.26817) parametre tablosu, grubun O–C verisinin paylaşılıp paylaşılmayacağı ve Gaia DR4 epoch astrometrisinin bu sönüklükteki kaynakları kapsayıp kapsamadığı. İlk ikisini hoca, sonuncusunu ESA dokümantasyonu cevaplar.