Перейти к содержанию

Программный интерфейс: мутации, родословная и два трека

Кандидаты (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.