Çekim havzası analizi: bilinen ve otomatik yöntemler
Bu sayfa, dynlib’de çekim havzası (basin of attraction) çıkarmak için iki aracı açıklar:
basin_known: Önceden tanımladığınız (bilinen) çekicilere göre sınıflandırır (FixedPoint ve/veya ReferenceRun).basin_auto: Çekicileri otomatik keşfeder ve çekim havzasını PCR-BM (Persistent Cell-Recurrence Basin Mapping) ile haritalar.
Not: Sonuç etiketleri (labels) şu anlamlara gelir:
>= 0: çekici kimliği (attractor ID)BLOWUP: NaN/Inf veyab_maxeşiği ile taşma (divergence)OUTSIDE: gözlem bölgesinin dışına kaçışUNRESOLVED: sınıflandırılamadı
basin_known: Bilinen çekicilere göre sınıflandırma
basin_known, başlangıç koşullarını (IC) sizin verdiğiniz çekicilere göre etiketler. İki çekici türünü destekler:
FixedPoint: sabit nokta. Hızlı yol (fast-path) ile sınıflandırılır: yörünge, sabit noktanın yarıçapı içinde art ardafixed_point_settle_stepsadım kalırsa anında atanır.ReferenceRun: referans koşu. Bu çekiciler için çevrimiçi PSC tabanlı bir imza/kanıtlama yaklaşımı kullanılır (gözlem uzayı hücrelerine kuantalama + log-olasılık skorlama). Kaotik ve çevrimsel çekicilerde daha dayanıklıdır.
Ne zaman tercih edilmeli?
- Çekicileri zaten biliyorsanız (sabit noktalar, belirli periyot çevrimleri, bilinen kaotik çekiciler).
- “Şu çekiciler var, bunlara göre havzayı boya” iş akışı istiyorsanız.
Parametreler (özet)
Aşağıdaki isimler API’deki anahtarlardır; aynen kullanın:
-
sim: Sim
Simülasyon nesnesi. -
attractors: Sequence[FixedPoint | ReferenceRun]
Bilinen çekiciler listesi. -
icveyaic_grid ic: np.ndarray: Doğrudan IC matrisi ((n_points, n_states)).-
ic_grid: Sequence[int]+ic_bounds: Sequence[(min,max)]: IC ızgarası üretir. -
observe_vars: Sequence[str|int] | None
Eşleştirme/kuantalama için gözlenen durum değişkenleri.Noneise varsayılan seçim kullanılır. -
escape_bounds: Sequence[(min,max)] | None
Kaçış denetimi için sınırlar. Yörünge bu bölgenin dışında art arda belirli sayıda örnek görürseOUTSIDEsayılır. -
max_samples,transient_samples max_samples: Sınıflandırma için en fazla örnek/adım.-
transient_samples: İlk geçiş (transient) örneklerini yok sayma. -
dt_obs - ODE modunda zorunlu örnekleme aralığı.
-
map modunda varsayılan olarak modelin
dt’si kullanılır. -
tolerance/tolerance_absolute
Kod içinde bir mesafe eşiği (dist_threshold) hesaplamak için kullanılır.
tolerance_absoluteverilirse doğrudan o kullanılır; verilmezsetolerance * mean(obs_range)ile türetilir. -
b_max,blowup_vars
b_maxverilirse seçili değişkenlerdeabs(value) > b_maxtaşma sayılır veBLOWUPdöner.
b_max=Noneise yalnızca NaN/Inf denetimi ile taşma yakalanır. -
parallel_mode: {"auto","threads","process","none"}vemax_workers
Büyük grid’lerde process tabanlı paralellik devreye girebilir. -
Coarse-to-fine iyileştirme (refinement):
refine: bool: önce kaba grid, sonra yalnızca sınır bölgelerinde tam çözünürlük.coarse_factor: int: kaba grid ölçek oranı.-
boundary_dilation: int: sınır maskesini güvenlik payı için genişletme. -
Sabit nokta hızlı yolu:
fixed_point_settle_steps: int: sabit nokta yarıçapı içinde art arda kaç adım kalınca “yakınsadı” kabul edileceği.
Çıktı
BasinResult döner:
labels: her IC için çekici kimliği veya özel kodlar (BLOWUP/OUTSIDE/UNRESOLVED)registry:Attractorlistesi (bu fonksiyonda çekici sayısı bilindiği için id’ler 0..n_attr-1)meta: kullanılan ayarlar ve (varsa) grid/refine metadatası
Kısa örnek
from dynlib.runtime.sim import Sim
from dynlib.analysis.basin import FixedPoint, ReferenceRun
from dynlib.analysis.basin_known import basin_known
import numpy as np
# IC grid
ic_grid = [400, 400]
ic_bounds = [(-2.0, 2.0), (-2.0, 2.0)]
# Bilinen çekiciler (örnek)
attractors = [
FixedPoint(label="fp0", ic=[0.0, 0.0], radius=1e-3),
ReferenceRun(label="attr1", ic=[0.1, 0.1]),
]
result = basin_known(
sim,
attractors,
ic_grid=ic_grid,
ic_bounds=ic_bounds,
mode="map",
max_samples=2000,
transient_samples=200,
dt_obs=None,
refine=True,
coarse_factor=8,
boundary_dilation=1,
)
labels_2d = result.labels.reshape(*ic_grid)
basin_auto: PCR-BM ile otomatik çekim havzası
basin_auto, çekicileri önceden tanımlamanızı gerektirmeden keşfeder. Yaklaşım:
- Yörüngeleri gözlem uzayında bir hücre ızgarasına kuantalar (
grid_res,obs_min/obs_max). - Zaman penceresi içinde ziyaret edilen benzersiz hücre oranı küçükse tekrarlılık (recurrence) tespit eder (
window,u_th,recur_windows). - Tespit edilen parçalardan bir parmak izi (fingerprint) çıkarır ve benzerlerini birleştirir (
s_merge,merge_downsample). - Yörüngeleri çekicilere süreklilik/persistans ile atar: bir çekiciye ait hücre setinde art arda
p_inisabet (hit) görürse etiketler.
Online / Offline
online=True(önerilen): Entegrasyon sırasında analiz yapar; tam yörünge saklamaz. Büyük batch’lerde bellek açısından çok daha iyidir.online=False: Tam yörüngeleri saklayıp sonra işler; hata ayıklama/deney için yararlı ama bellek tüketir. Bu moddamax_memory_bytesile koruma devreye girebilir.
Parametreler (özet)
-
icveyaic_grid(+ic_bounds)
IC’leri doğrudan verin ya da uniform grid üretin. -
observe_vars
Gözlem uzayı değişkenleri (isim veya indeks). Boyutd,grid_res/obs_min/obs_maxile uyumlu olmalıdır. -
obs_min,obs_max
Gözlem uzayının alt/üst sınırları.Noneiseic_bounds’tan türetilebilir. -
grid_res
Her gözlem boyutu için hücre sayısı. Toplam hücre sayısıproduct(grid_res). -
max_samples,transient_samples max_samples: her IC için en fazla örnek/adım-
transient_samples: tekrarlılık tespiti başlamadan önce yok sayılacak örnek sayısı -
window,u_th,recur_windows
Tekrarlılık (recurrence) tespiti ayarları: window: kayan pencere boyuu_th:unique_cells/window <= u_thkoşulu sağlanırsa “tekrarlıyor” say-
recur_windows: bu koşulun art arda kaç pencerede sağlanması gerektiği -
p_in
Persistans eşiği: bir çekici hücre setinde art arda kaç isabetle atanacağı.0verilirse persistansla atama kapatılır. -
s_merge
Parmak izi benzerliği (Jaccard) bu eşiğin üstündeyse çekiciler birleştirilir. -
merge_downsample
Parmak izi çıkarırken daha kaba bir ızgaraya indirgeme (robust birleştirme için). -
b_max,blowup_vars,outside_limit b_max: taşma eşiği-
outside_limit: art arda kaç örnekobs_min/obs_maxdışında kalıncaOUTSIDE -
parallel_mode,max_workers
Büyük batch’lerde process paralelliği kullanılabilir (parallel_mode="process"veya"auto"). -
post_detect_samples
Tekrarlılık tespitinden sonra kanıt segmentine eklenecek ek örnek sayısı. -
refine_unresolved(online mod)
İlk geçişteUNRESOLVEDkalan noktaları, çekici kaydı (registry) tamamlandıktan sonra yeniden persistans taramasıyla atamayı dener. -
online_max_attr,online_max_cells
Online modda persistans taraması için belleği sınırlamak üzere: - izlenecek maksimum çekici sayısı
- çekici başına saklanacak maksimum hücre sayısı
Çıktı
BasinResult döner:
labels: her IC için çekici kimliği veyaBLOWUP/OUTSIDE/UNRESOLVEDregistry: keşfedilen çekiciler (parmak izi + hücre setleri)meta: algoritma parametreleri ve yürütme metadatası
Kısa örnek
from dynlib.analysis.basin_auto import basin_auto
import numpy as np
result = basin_auto(
sim,
ic_grid=[300, 300],
ic_bounds=[(-2.0, 2.0), (-2.0, 2.0)],
mode="map",
observe_vars=("x", "y"),
obs_min=[-2.0, -2.0],
obs_max=[2.0, 2.0],
grid_res=64,
max_samples=1500,
transient_samples=100,
window=64,
u_th=0.6,
recur_windows=3,
p_in=8,
online=True,
)
labels_2d = result.labels.reshape(300, 300)
Ayar önerileri (pratik)
- Basit periyodik çekiciler:
u_thdaha küçük (0.3–0.5),windowdaha küçük (32–64). - Kaotik çekiciler:
u_thdaha büyük (0.6–0.8),windowdaha büyük (64–256). - Çok
UNRESOLVED:max_samplesartırın;u_thdüşürün;windowartırın. - Çekiciler gereksiz birleşiyor:
s_mergeartırın veyamerge_downsampledüşürün. - Birleşmesi gerekenler birleşmiyor:
s_mergedüşürün veyamerge_downsampleartırın.