Программный интерфейс: мутации, родословная и два трека¶
Кандидаты (mutation_candidates.py)¶
Вместо слепого retry mutator берёт легальный список.
| Функция | Инвариант |
|---|---|
list_addable_edges |
Нет цикла; каналы согласованы |
list_splittable_edges |
Split сохраняет геометрию mid-size |
list_removable_edges / list_removable_nodes |
Путь input→output жив |
list_crossover_mates |
Совместимые партнёры |
summarize_candidates |
Сводка для логов/Studio |
Инвариант output-on-last-layer: \(\mathrm{depth}(\mathrm{hidden}) \le \mathrm{depth}(\mathrm{output})\).
ConvolutionalNetworkMutator.apply использует эти списки. Script 10: структурные + remove_edge, без weight-мутаций.
Батч и параллель: propose_batch (однократное перечисление кандидатов + серийное
применение) и mutation_mp.propose_parents_mp (ProcessPool по родителям,
topology-only payload). Пул — runtime_cpu.resolve_cpu_workers. Подробно:
параллельные мутации, операторы.
Эволюционный цикл¶
CnnNeat.evolve, evolve_from_elites, evolve_dual_track, evolve_with_cone, apply_periodic_gd, attach_breeding_cone. Уникальность живой популяции — по full structure_hash.
Родословная¶
GenomeLineage: родители, тип мутации, флаг gd_lineage, счётчик gd_apply_count. mutation_label — строка для архива/Studio.
Дополнения периодического дообучения¶
should_run_periodic_gd, run_periodic_gd_on_population / _on_genomes, resolve_periodic_gd_device, periodic_gd_cv_fold_indices, periodic_gd_cv_slice_indices, periodic_gd_target.
Targets: offspring_queue | population | elites. Device GD может отличаться от eval (periodic_gd_device="cuda" при CPU-эволюции).
Конфиг два трека (dual-track): gd_lineage_track_enabled, gd_lineage_expand_slots → \(P' = P + \Delta\) после первого GD. periodic_gd_max_applies ограничивает принятые GD на линии.
run_experiment.apply_cpu_training_overrides, class_dir_name — hybrid CPU + имя директории класса.
Математика: dual-track. Страницы: candidates, GD lineage, hybrid.