Neural data cache

This commit is contained in:
Efim Beshmenev
2026-07-12 14:25:18 +03:00
parent a8a8f50fbd
commit ffd46f89e3
15983 changed files with 26052 additions and 5013 deletions
+14 -3
View File
@@ -37,9 +37,9 @@ Makefile
# Machine-local runtime files # Machine-local runtime files
/runtime/ /runtime/
# Search checkpoints, archive deltas, manifests, and per-run metrics under # Geometry checkpoints, MAP-Elites deltas, manifests, and per-run metrics under
# results/search are intentionally tracked so disjoint ranges merge through Git. # results/search remain trackable so disjoint topology ranges can merge through Git.
# Only shared derived views, logs, and interrupted temporary files are ignored. # Shared derived views, logs, and interrupted temporary files stay local.
/results/search/leaderboard.tsv /results/search/leaderboard.tsv
/results/search/run.log /results/search/run.log
/results/search/runs/**/run.log /results/search/runs/**/run.log
@@ -47,6 +47,17 @@ Makefile
/results/search/**/*.tmp.* /results/search/**/*.tmp.*
/results/search/**/*.partial /results/search/**/*.partial
# Local ML dataset and derived neural cache. These files can grow to 200 GB,
# are machine-local, and must never be committed. Geometry checkpoints (*.szcp)
# and mergeable search deltas (*.szar) are intentionally not ignored here.
/results/search/**/training/
/results/search/**/neural/
/results/search/runs/**/TRAINING_DATA_LIMIT_REACHED_REWRITE_REQUIRED.tsv
*.sztd
*.sztd.*
*.szonn
*.szonn.*
# Python cache and virtual environments # Python cache and virtual environments
__pycache__/ __pycache__/
*.py[cod] *.py[cod]
+25 -1
View File
@@ -18,6 +18,10 @@ add_library(neighborly_core
src/Checkpoint/GlobalCheckpoint.h src/Checkpoint/GlobalCheckpoint.h
src/SearchArchive/SearchArchive.cpp src/SearchArchive/SearchArchive.cpp
src/SearchArchive/SearchArchive.h src/SearchArchive/SearchArchive.h
src/OnlineSurrogate/OnlineSurrogate.cpp
src/OnlineSurrogate/OnlineSurrogate.h
src/TrainingArchive/TrainingArchive.cpp
src/TrainingArchive/TrainingArchive.h
src/NeighborlyCore/plane.h src/NeighborlyCore/plane.h
src/NeighborlyCore/precise_geometry.h src/NeighborlyCore/precise_geometry.h
src/NeighborlyCore/util.cpp src/NeighborlyCore/util.cpp
@@ -55,12 +59,14 @@ target_include_directories(neighborly_core
"${CMAKE_CURRENT_SOURCE_DIR}/src/NeighborlyCore" "${CMAKE_CURRENT_SOURCE_DIR}/src/NeighborlyCore"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Checkpoint" "${CMAKE_CURRENT_SOURCE_DIR}/src/Checkpoint"
"${CMAKE_CURRENT_SOURCE_DIR}/src/SearchArchive" "${CMAKE_CURRENT_SOURCE_DIR}/src/SearchArchive"
"${CMAKE_CURRENT_SOURCE_DIR}/src/OnlineSurrogate"
"${CMAKE_CURRENT_SOURCE_DIR}/src/TrainingArchive"
"${CMAKE_CURRENT_SOURCE_DIR}/projects/Szilassi" "${CMAKE_CURRENT_SOURCE_DIR}/projects/Szilassi"
"${EIGEN_ROOT}" "${EIGEN_ROOT}"
) )
if(MSVC) if(MSVC)
target_compile_options(neighborly_core PRIVATE /W3 /permissive- /EHsc) target_compile_options(neighborly_core PRIVATE /W3 /permissive- /EHsc /utf-8)
target_compile_definitions(neighborly_core PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS) target_compile_definitions(neighborly_core PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS)
else() else()
target_compile_options(neighborly_core PRIVATE -Wall -Wextra) target_compile_options(neighborly_core PRIVATE -Wall -Wextra)
@@ -68,6 +74,9 @@ endif()
add_executable(neighborly_main projects/Szilassi/main.cpp) add_executable(neighborly_main projects/Szilassi/main.cpp)
target_link_libraries(neighborly_main PRIVATE neighborly_core neighborly_cuda) target_link_libraries(neighborly_main PRIVATE neighborly_core neighborly_cuda)
if(MSVC)
target_compile_options(neighborly_main PRIVATE /utf-8)
endif()
add_executable(verify_cpp projects/VerifyCpp/verify_cpp.cpp) add_executable(verify_cpp projects/VerifyCpp/verify_cpp.cpp)
target_link_libraries(verify_cpp PRIVATE neighborly_core) target_link_libraries(verify_cpp PRIVATE neighborly_core)
@@ -78,3 +87,18 @@ if(MSVC)
target_compile_options(polyhedron_gui PRIVATE /utf-8) target_compile_options(polyhedron_gui PRIVATE /utf-8)
target_link_libraries(polyhedron_gui PRIVATE shell32) target_link_libraries(polyhedron_gui PRIVATE shell32)
endif() endif()
include(CTest)
if(BUILD_TESTING)
add_executable(training_archive_selftest
tests/TrainingArchiveSelfTest/TrainingArchiveSelfTest.cpp
)
target_link_libraries(training_archive_selftest PRIVATE neighborly_core)
if(MSVC)
target_compile_options(training_archive_selftest PRIVATE /utf-8)
endif()
add_test(NAME training_archive_selftest COMMAND training_archive_selftest)
set_tests_properties(training_archive_selftest PROPERTIES
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
endif()
+253 -157
View File
@@ -1,194 +1,290 @@
# NeighborlyPolyhedra # Szilassi — поиск геометрических реализаций многогранников
This is the culmination of all my research in answering the question; Is there another polyhedron besides the Tetrahedron and Szilassi Polyhedron where all faces share an edge with all other faces?
Video: [YouTube](https://youtu.be/5dd8_N_nKRI). Репозиторий содержит CUDA/CPU-систему поиска геометрических реализаций для 59
комбинаторных топологий соседственных 12-гранных многогранников. Для каждой
топологии программа подбирает 12 плоскостей, восстанавливает вершины и минимизирует
геометрические дефекты.
The conclusion is: Sort of. I believe there isn't a shape that is _completely_ intersection-free, but there IS a minimally intersecting one, a near-miss, that can be considered the _best-possible_ or _closest_ solution. I've named this shape the "Razorcross" and it's documented here in this repository, as well as all the supporting code to generate all the neighborly polyhedra. Note that there is no rigorous proof about the optimality of this solution, this conclusion has been made based on my observations of patterns, statistical analysis, and brute-forcing of the problem. If there was a better solution, I almost certainly would have found it by now. Проект предназначен для вычислительного исследования и не является доказательством
существования или невозможности бездефектной реализации.
## Current Windows GUI ## Происхождение
Build `Szilassi.slnx` as `Release|x64`, then open Проект основан на исходной кодовой базе CodeParade
`build\msbuild\bin\x64\Release\PolyhedronGui.exe`. [HackerPoet/NeighborlyPolyhedra](https://github.com/HackerPoet/NeighborlyPolyhedra).
The GUI intentionally has only **Запустить поиск** and **Остановить поиск** buttons. Постановка задачи и исходное исследование представлены в
Select an inclusive topology range, then start the search. Existing checkpoints are [видео CodeParade](https://youtu.be/5dd8_N_nKRI). Текущая версия существенно
loaded automatically. Stop waits for the current short CUDA kernel, synchronizes the расширяет исходную реализацию: добавлены CUDA FP32-поиск, CPU/DD-верификация,
device, writes a durable checkpoint, and only then exits. продолжаемые checkpoint, многотопологический планировщик, MAP-Elites/CEM,
нейросетевая подсказка и локальный долговременный ML-датасет.
The GUI creates a fresh seed automatically for every new process. It is shown in the ## Критерии результата
GUI log and saved in the durable, Git-tracked `runs/<UUID>/run.tsv` manifest together
with the topology range and search parameters, so a run can be reproduced without
typing a seed into the interface.
The search process and CUDA stream run at low scheduling priority, so foreground work В логах и файлах результатов используются два целочисленных счётчика:
keeps priority. There is no artificial duty-cycle throttle. Kernels remain short for
responsive stopping and Windows WDDM stability.
Leave `GPU chains` at `0` for automatic sizing. The CUDA backend derives the chain count - `C` (`crossings`) — самопересечения границы отдельной грани после проекции на
from the selected GPU's SM count and measured kernel occupancy, so Ada `sm_89` and плоскость этой грани;
Blackwell `sm_120` use different appropriate values. Each selected topology keeps its - `I` (`intersections`) — пересечения внутренности грани с рёбрами, которые не
annealing session resident on the device, so refresh cycles cannot discard cooling, инцидентны этой грани. Пересечение продолжений вне отрезка или вне многоугольника
stagnation, or restart state. The full 59-topology range uses about 1.4 GB of VRAM on не учитывается.
the 12 GB RTX 4070 Ti; narrower ranges allocate proportionally less.
For an independent overnight run, set the desired number of minutes and topology range. Кандидаты сравниваются лексикографически по кортежу
This mode does not use the supplied near-miss: `(C + I, max(C, I), C, energy)`. Поэтому уменьшение точного количества дефектов
it combines saved archive seeds with independent random starts. A UCB-style bandit assigns важнее гладких штрафов и эвристических оценок.
the 30/16/8 depth budgets using recent improvement, solution quality, uncertainty, and
staleness; every fifth cycle still refreshes the whole selected range, so no topology can
be starved indefinitely. A clean stop saves each
topology under `results\search\topology_N`; pressing the same button later resumes only
those checkpoints. `results\search\leaderboard.tsv` is the current ranking.
The GUI search-mode selector keeps this quality-first allocation as the default. Select Массовый поиск выполняется на GPU в FP32. Отобранные кандидаты пересчитываются на
`Проработка худших` to reverse only the quality prior: depth work then favors topologies CPU в `double`; состояния около цели дополнительно классифицируются реализацией
with the worst current C/I result. Improvement reward, UCB exploration, staleness, and the double-double (`WideReal`, примерно 31 десятичный знак). Заявленный результат
full refresh remain active, so the mode is a priority rather than an exclusive lock. `C/I = 0/0` проходит повторные проверки с несколькими допусками.
The CUDA hot path uses standard FP32 math. Persistent chains retain their RNG, cooling, ## Как устроен поиск
stagnation, and restart state between batches. Twenty-five percent of chains remain the
unchanged simulated-annealing control; disjoint cohorts add replica exchange, adaptive
move selection, population-based exploit/mutate, and MAP-Elites/CEM seed injection.
Strategy quotas and one descendant per injected seed reach CPU verification even when
they are outside the global GPU top-N. A small SPSA+Adam refinement runs in CPU double,
but its output is rounded back to exact FP32 and rechecked before it can be accepted.
Fixed fresh cohorts preserve global exploration during breadth/refresh passes. Every returned shortlist is reconstructed and checked on
the CPU in `double`; candidates with at most 12 total defects are reclassified with the
custom `WideReal` double-double type (about 31 decimal digits). Every claimed `0/0` is
serialized and checked again at multiple tolerances down to `1e-13`.
The degeneracy guard is deliberately mild. Its default weight is `0.01`, and only the - Постоянные CUDA-цепочки сохраняют RNG, температуру, шаг, стагнацию и состояние
worst of the determinant, edge-ratio, turn-angle, and extent barriers is counted fully; между короткими пакетами.
the other three contribute five percent. This still rejects catastrophic collapse without - Портфель стратегий включает базовый simulated annealing, replica exchange,
letting several correlated moderate warnings overpower an otherwise useful candidate. адаптивные ходы, population-based transfer и инъекцию состояний из MAP-Elites,
CEM и нейросетевой подсказки.
- Планировщик распределяет работу между топологиями с учётом качества,
улучшений, неопределённости и давности последнего запуска. Режим проработки
худших вариантов меняет приоритет, но сохраняет исследование остальных топологий.
- MAP-Elites поддерживает разнообразие по обусловленности геометрии и локализации
дефектов. Диагональный CEM строит новые стартовые состояния по успешным потомкам.
- Небольшой SPSA+Adam этап выполняется на CPU; его результат округляется обратно
в FP32 и проверяется заново.
- Нейросеть является только источником предложений. Она не может заменить точную
CPU/DD-проверку или отключить базовую долю независимого поиска.
The MAP-Elites archive separates geometry into determinant, edge-ratio, turn-angle, and Штраф вырождения намеренно мягкий. По умолчанию полностью учитывается худший из
extent bins. All valid historical checkpoint generations are deduplicated and re-evaluated барьеров определителя, короткого ребра, малого угла поворота и чрезмерного размера;
on startup, so accumulated searches seed the archive instead of merely supplying one best остальные барьеры дают по 5% вклада. Вес штрафа — `0.01`.
shape per topology. Diagonal CEM is updated only from new injected descendants, avoiding
repeatedly learning from the same persistent chain best.
CUDA Toolkit 13.3 with Visual Studio integration is required for the GPU backend. The Поисковый процесс и CUDA stream запускаются с низким приоритетом. Искусственного
build contains native targets for Ada `sm_89` and Blackwell `sm_120`. Without the Toolkit, ограничения загрузки GPU нет; короткие kernels обеспечивают отзывчивую остановку
the project builds a diagnostic stub and refuses `--cuda` instead of silently falling и устойчивость под Windows WDDM.
back to the CPU.
### Checkpoints and Git ## Структура репозитория
Search state is stored in `results/search`, which is intentionally tracked by Git. - `projects/Szilassi` — основной CLI-поиск;
Each checkpoint is an immutable, self-contained `.szcp` file with CRC-32 and exact FP32 - `projects/PolyhedronGui` — Windows GUI для штатного CUDA-поиска;
bit patterns. It is flushed to disk and atomically published; a damaged newest generation - `projects/VerifyCpp` — отдельная проверка OBJ-кандидатов;
is ignored in favor of the previous valid one. - `src/NeighborlyCore` — геометрия, точные предикаты и общие типы;
- `src/CudaSearch` — FP32 CUDA backend и диагностический CPU stub;
- `src/Checkpoint` — CRC-защищённые поколения checkpoint;
- `src/SearchArchive` — mergeable MAP-Elites delta-файлы;
- `src/OnlineSurrogate` — локальная online residual-MLP модель;
- `src/TrainingArchive` — локальный долговременный ML-датасет и crash recovery;
- `tests/TrainingArchiveSelfTest` — тест формата, CRC, WAL, восстановления и лимита;
- `data` — описание топологий и входные модели;
- `results/topologies` и `results/showcases` — сохранённые исследовательские модели;
- `results/search` — продолжаемое геометрическое состояние поиска;
- `runtime` — временные тестовые прогоны, отчёты и локальные файлы;
- `build` — централизованный вывод CMake и MSBuild.
Archive improvements use immutable `.szar` delta files in the same run UUID namespace. Общего solution-файла в репозитории нет. Основной поддерживаемый способ сборки —
Each delta contains only cells opened or improved since the preceding durable write; CRC, CMake; проекты Visual Studio можно собирать по отдельности.
atomic publication, and deterministic per-cell selection make a normal Git merge a union
of useful results. Serialized energies are never trusted across run settings: every distinct
state is re-evaluated under the current objective before cells are compared.
The checkpoint timer sweeps every changed topology, not just the topology currently chosen ## Требования
by the bandit. Thus an improvement cannot remain only in memory because that topology is
not scheduled again. On clean stop all outstanding `.szcp` and `.szar` generations are
flushed; if durable writing fails, the stop marker is retained and the process returns an
error instead of reporting a successful stop.
For several computers, assign non-overlapping topology ranges. Each process uses a unique - Windows x64;
run UUID, so checkpoint filenames do not collide. Commit `results/search` normally on each - компилятор с поддержкой C++17;
computer and merge the branches with Git. `leaderboard.tsv`, run logs, and temporary files - Visual Studio 18 / 2026 с workload для C++ desktop development;
are derived and ignored, so they cannot create merge conflicts; the next search start - CUDA Toolkit 13.3 с интеграцией в Visual Studio для GPU-поиска;
rescans checkpoints, repeats CPU/DD validation, and rebuilds the leaderboard. - NVIDIA GPU с поддерживаемой архитектурой. Сборка содержит цели для Ada `sm_89`
Each UUID run also has a tracked `metrics.tsv` with per-strategy accounted search work, archive, и Blackwell `sm_120`;
replica-exchange, SPSA, and scheduler telemetry; independent computers create different - Eigen 3.4.0 уже находится в `external/eigen-3.4.0`.
paths, so these files merge without a custom script.
## Project layout Без CUDA проект собирает диагностический stub. Запуск с `--cuda` в такой сборке
завершается с понятной ошибкой и не переключается на CPU незаметно.
* `projects/Szilassi` — the main search application. ## Сборка через CMake
* `projects/VerifyCpp` — the high-precision verifier.
* `projects/PolyhedronGui` — the Windows launcher.
* `src/NeighborlyCore` — shared geometry and utility code.
* `src/SearchArchive` — durable Git-mergeable MAP-Elites delta storage.
* `data` — topology definitions and input models.
* `results/topologies` and `results/showcases` — saved research models.
* `results/search` — Git-mergeable search states and durable checkpoint generations.
* `runtime` — temporary stop files, reports, logs, and local candidates.
* `scripts` — helper launch and reporting scripts.
All Visual Studio projects are collected by the root `Szilassi.slnx`. MSBuild output is Из корня репозитория:
centralized under `build/msbuild`; CMake output remains under `build/vs2026`.
## Running The Code ```powershell
To start a search, build and run the `Szilassi` project. cmake --preset vs2026-x64
cmake --build --preset vs2026-release
ctest --test-dir build/vs2026 -C Release --output-on-failure
```
### Requirements Основные исполняемые файлы появятся в `build/vs2026/Release`:
* C++17 compatible compiler (Visual Studio 2026 is configured by the current presets).
* [CUDA Toolkit 13.3](https://developer.nvidia.com/cuda-downloads) with Visual Studio integration for GPU search.
* [Eigen-3.4.0](https://eigen.tuxfamily.org/) though similar versions should work as well.
* [Cairo-1.17.2](https://www.cairographics.org/) (optional) this is only needed to render paper cutouts.
### Basics - `neighborly_main.exe` — поиск;
Running the main code will ask for a seed number. It will then start a search, taking turns through each of the 59 topologies sequentially, looking for solutions. To run multiple threads, I simply launch the executable in different processes with different seeds. This is the lazy way to do multi-threading, but it works! This code is programmed to only save solutions if it's good enough to be notable. By that, I mean it either has no crossings (all simple polygons) or 10 or fewer intersections. The solutions get saved into their own topology folders. I've provided the top solutions I've found for each topology already. I wouldn't be surprised if you can find a solution that lowers the record for some topologies, but I've studied all the low intersection, most consistent, most symmetric, and best looking models more extensively, and I doubt there would be further improvements there. - `polyhedron_gui.exe` — GUI;
- `verify_cpp.exe` — проверка OBJ;
- `training_archive_selftest.exe` — regression/self-test локального ML-архива.
Solutions get saved as `shape_c#_i#_#.obj` where the first number is the number of crossings, the second number is the number of edge-face intersections, and the third number is the current iteration of the solver when it found the solution. Для сборки без CUDA используется отдельный каталог:
### Advanced ```powershell
There's a ton of utility and functionality I added during the research that you can use, but you'll need to add it in and recompile. Here are some common ones: cmake -S . -B build/cpu -G "Visual Studio 18 2026" -A x64 -DSZILASSI_ENABLE_CUDA=OFF
* **Hyperparameters** You can adjust the solver parameters `max_iters`, `clusters`, `beta`, and `sigma`. cmake --build build/cpu --config Release
* **Objective Function** You can change the objective function by replacing `objective_sum` with any of the other objective functions listed at the end of `util.h`. Note that when the objective function changes, you'll usually also need to change the early exit conditions in `solver.cpp` since the cost function units may be different. ```
* **Symmetry** To add symmetry enforcement, there is a boolean argument to the solver `use_symmetry`. There are different symmetries you can use at the top of `solver.cpp`. These symmetries are for specific topologies, usually 6, 37, 42, 49, 55, and 58.
* **Single Topology** If you'd like to focus on one topology instead of equal computation to all, just modify `g_topology = your_number_here`;
### The Dual Problem ## Сборка отдельных проектов Visual Studio
The problem of finding a polyhedra with neighborly faces also has a dual problem, which is to find a polyhedron with neighborly vertices. In terms of the Szilassi polyhedron, the dual problem is analogous to finding the [Császár polyhedron](https://en.wikipedia.org/wiki/Cs%C3%A1sz%C3%A1r_polyhedron). The dual polyhedron has the same number of holes and edges, but with the number of faces and vertices swapped, and all faces are triangles. Despite the similarity, and as far as I can tell from my research, having a solution or proving there is no solution to one problem does not answer the dual problem. In fact, the K12 polyhedron that is neighborly in its vertices was already proven impossible (see "Nonrealizable Minimal Vertex Triangulations of Surfaces" in the further reference section below for more details).
Since it was already proven, the dual problem was not as interesting to me, and wasn't mentioned in the video. Still, the impossibility proof does not attempt to answer the question of what is the minimum number of intersections the polyhedron could have and what does the shape look like? Since I already had all the code, there weren't many changes needed to run a similar solve, you can enable the `DUAL_PROBLEM` preprocessor definition and use one of the `objective_dual_*` objective functions if you'd like to try it. I didn't spend as much time on this but I did find a shape with 4 intersections in manifold 44. It's not beautiful or symmetric, but I included it in `results/showcases/Dual44` if you're curious. It may be possible to find an order-2 symmetric solution in manifold 44 with 4 intersections, but I couldn't seem to get it under 6 when I forced the symmetry. It may also be possible to find other solutions with 2 or 3 intersections, but again I didn't spend much time on this problem. Если CMake не используется, каждый `.vcxproj` собирается отдельно:
### Quality ```powershell
Once you find a solution, you may want to improve the quality to get a better looking solution. This is done by adding a 'quality' penalty to the objective function, which is any objective function that has a `q` in it. This may make it harder to converge on a solution in the search, and you may not have had enough iterations to fully converge anyway. So what I usually do is load the saved model and run the `study_sample` function to improve it and converge on the highest quality shape. This means specifically: msbuild projects\Szilassi\Szilassi.vcxproj /m /p:Configuration=Release /p:Platform=x64
* Opening sharp angles (near 0 degrees). msbuild projects\PolyhedronGui\PolyhedronGui.vcxproj /m /p:Configuration=Release /p:Platform=x64
* Closing open angles (near 180 degrees). msbuild projects\VerifyCpp\VerifyCpp.vcxproj /m /p:Configuration=Release /p:Platform=x64
* Making sure edge lengths are not relatively too small or large. msbuild tests\TrainingArchiveSelfTest\TrainingArchiveSelfTest.vcxproj /m /p:Configuration=Release /p:Platform=x64
* Adding more clearance in the polygons so they're not 'almost' crossing. ```
The results are saved under `results/topologies/topology_N` as `study_c#_i#_#.obj`. Вывод этих проектов находится в `build/msbuild/bin/x64/Release`.
## The Razorcross ## Штатный запуск через GUI
All files related to the Razorcross are found in the `results/showcases/Razorcross` folder.
* `original_polygons.obj` The 12 polygons straight from the solver. Due to the intersections, this will not be a proper manifold.
* `triangulated_manifold.obj` A triangulated version that adds edges at the intersections. A proper manifold that can be 3D printed.
* `printable_magnets_half1.stl` First half of the model with holes for 4.8mm diameter magnets and in a better printing position.
* `printable_magnets_half2.stl` Second half of the model above. It's exactly a mirror image.
* `texture.png` Texture to use with the uv coordinates of `original_polygons.obj` to color the 12 sides.
* `cuttout.png` The 3 unique faces of the Razorcross. You would need 2 sheets plus 2 mirrored sheets to get all 12 faces.
* `edge_graph.dot` The edge graph of manifold-42.
## General Observations Запустите `polyhedron_gui.exe` из CMake-сборки или `PolyhedronGui.exe` из
Shapes with more symmetry tend to also be the ones with the fewest intersections. Below are some examples that have "180 degree rotation" and/or "point reflection" symmetry. These highly symmetric shapes only use 3 or 6 unique faces and their mirrors. MSBuild-сборки. В интерфейсе остаются две управляющие кнопки:
* **topology_6**
* 0 crossings, 8 intersections (shape_c0_i8_0.obj)
* 10 crossings, 0 intersections (shape_c10_i0_2.obj)
* **topology_37**
* 0 crossings, 8 intersections (study_c0_i8_bestlooking.obj)
* 4 crossings, 0 intersections (shape_c4_i0_0.obj)
* **topology_42 (Razorcross)**
* 0 crossings, 4 intersections (shape_c0_i4_optimalsymmetric.obj)
* 4 crossings, 0 intersections (shape_c4_i0_4.obj)
* **topology_49**
* 0 crossings, 8 intersections (shape_c0_i8_5.obj)
* 8 crossings, 0 intersections (shape_c8_i0_0.obj))
* **topology_55**
* 0 crossings, 16 intersections (shape_c0_i16_0.obj)
* 10 crossings, 0 intersections (shape_c10_i0_6.obj)
* **topology_58**
* 0 crossings, 10 intersections (study_c0_i10_28.obj)
* 4 crossings, 0 intersections (shape_c4_i0_2.obj)
The paper about "Neighborly 2-Manifolds" listed below has a table of automorphism groups for the dual graph problem. These correlate with the neighborly problem, but only certain symmetry groups seem to have symmetries in the dual problem. Note that the paper 1-indexes the topologies whereas I always use 0-index, so you'll need to subtract 1 from the paper numbering scheme to match mine. - `Запустить поиск` — продолжает исследование с учётом найденных checkpoint;
- `Остановить поиск` — ждёт окончания короткого CUDA-пакета и сохраняет изменённое
состояние перед завершением процесса.
## Further reference Настройки GUI:
[Szilassi polyhedron](https://en.wikipedia.org/wiki/Szilassi_polyhedron)
[Neighborly 2-Manifolds with 12 Vertices](https://doi.org/10.1006/jcta.1996.0069) - количество GPU-цепочек (`0` — автоматический выбор по GPU и occupancy);
- число итераций в одном коротком CUDA-пакете;
- длительность запуска;
- включительный диапазон топологий `0..58`;
- период durable checkpoint;
- обычный режим или приоритет проработки худших топологий.
[Nonrealizable Minimal Vertex Triangulations of Surfaces](https://arxiv.org/abs/0801.2582) GUI автоматически создаёт seed нового процесса. Seed и параметры сохраняются в
`run.tsv`, поэтому запуск можно воспроизвести без поля Seed в интерфейсе.
[sci.math newsletter chain](https://ics.uci.edu/~eppstein/junkyard/szilassi.html) ## Запуск через CLI
Пример CUDA-поиска топологий 20–29 в течение восьми часов:
```powershell
.\build\vs2026\Release\neighborly_main.exe --global-search --cuda `
--topology-from 20 --topology-to 29 --minutes 480 `
--cuda-chains 0 --cuda-iters 64 --checkpoint-seconds 30 `
--seed 30000157
```
По умолчанию геометрическое состояние находится в `results/search`. Другой каталог
задаётся через `--global-dir`. Повторный запуск с тем же каталогом продолжает поиск.
Дополнительные режимы можно посмотреть через `--help`:
- `--study <obj>` — продолжение оптимизации существующего OBJ;
- `--repair-local <obj>` — локальная координатная коррекция;
- `--hunt-local <obj>` — сфокусированный поиск около известных дефектов;
- `--batch-hunt <obj>` — серия независимых локальных запусков;
- запуск без режима — интерактивный legacy solver.
Проверка модели:
```powershell
.\build\vs2026\Release\verify_cpp.exe --obj path\candidate.obj `
--topology 42 --eps 1e-13 --report runtime\verify.md
```
## Геометрическое состояние и восстановление
Состояние штатного поиска хранится в `results/search`:
- `topology_N/resume.planes`, `resume.obj`, `resume.meta` — удобное текущее
представление лучшего результата;
- `runs/<UUID>/topology_N/checkpoints/*.szcp` — immutable поколения checkpoint с CRC;
- `runs/<UUID>/topology_N/archive/*.szar` — MAP-Elites delta-файлы;
- `runs/<UUID>/run.tsv` и `metrics.tsv` — seed, конфигурация и телеметрия запуска.
Новые поколения публикуются атомарно после flush. Повреждённое последнее поколение
не уничтожает предыдущее валидное. При штатной остановке сохраняются все изменённые
топологии, а ошибка durable-записи приводит к безопасному завершению с ошибкой.
`leaderboard.tsv`, временные файлы и логи являются производными и игнорируются Git;
leaderboard восстанавливается при следующем запуске.
## Локальный ML-датасет
Обучающие данные и производные neural-модели являются локальным кэшем и **не входят
в Git**:
- `results/search/runs/<UUID>/training``.sztd` shards и активный WAL;
- `results/search/topology_N/neural` — online-модель `.szonn` и служебные receipts;
- временные варианты этих файлов и marker достижения лимита.
`.gitignore` исключает каталоги `training`, `neural`, все `.sztd/.szonn` и их
временные варианты. Не используйте `git add -f` для этих путей.
Schema v3 сохраняет пригодные для последующего обучения факты: каждый успешный и
неуспешный CPU-верифицированный кандидат, FP32 chain-best выборку с точным `K/N`,
CUDA lineage и полный RNG snapshot, начальные и injected предложения, проверенные
rollout, SPSA double-траектории и старый replay в lossless-виде.
WAL имеет CRC и durable commit boundary. После сбоя питания незавершённый хвост
отбрасывается, а подтверждённые записи сохраняются. Завершённые shards immutable.
Общий локальный лимит ML-кэша равен ровно `200000000000` байт (200 GB, не GiB).
В расчёт входят существующие neural-файлы, резерв 59 финальных моделей и временный
файл атомарной замены. При достижении лимита:
- новые обучающие записи больше не создаются;
- online-обучение замораживается;
- геометрический поиск, CPU/DD-проверка и checkpoint продолжаются;
- программа выводит предупреждение о необходимости пересмотреть формат/политику
хранения перед дальнейшим накоплением.
Лимит рассчитан для одного поискового процесса в одном checkout.
## Работа на нескольких компьютерах
Для параллельного исследования задавайте непересекающиеся диапазоны топологий.
Каждый запуск создаёт отдельный UUID, поэтому `.szcp`, `.szar`, манифесты и метрики
объединяются обычным Git merge без отдельного merge-скрипта.
Через Git переносятся только геометрическое состояние и небольшая телеметрия.
Локальный ML-датасет и neural-модели между компьютерами автоматически не
объединяются. Не добавляйте весь `results/search` принудительно; проверяйте
`git status` перед коммитом.
## Если локальный ML-кэш уже отслеживается Git
Следующая команда удаляет только записи из индекса и сохраняет сами файлы на диске:
```powershell
git rm -r --cached --ignore-unmatch -- `
":(glob)results/search/**/training/**" `
":(glob)results/search/**/neural/**" `
":(glob)results/search/**/*.sztd" `
":(glob)results/search/**/*.sztd.*" `
":(glob)results/search/**/*.szonn" `
":(glob)results/search/**/*.szonn.*" `
":(glob)results/search/**/TRAINING_DATA_LIMIT_REACHED_REWRITE_REQUIRED.tsv"
```
После этого проверьте результат:
```powershell
git status --short
git ls-files -ci --exclude-standard -- results/search
```
Затем изменения `.gitignore` и удаление из индекса можно закоммитить и отправить
обычным способом. `git rm --cached` не очищает старые commits. Если большие файлы
уже были опубликованы и должны исчезнуть из истории сервера, требуется отдельное
согласованное переписывание истории (`git filter-repo` и force-push); после него
остальные клоны необходимо пересоздать или синхронизировать вручную.
## Тесты
`TrainingArchiveSelfTest` проверяет byte-exact round-trip schema v3, CRC, corruption
detection, частичные WAL, recovery после сбоя, immutable publication и точную границу
200 GB.
Запуск через CTest:
```powershell
ctest --test-dir build/vs2026 -C Release --output-on-failure
```
Для проверки отдельного OBJ используется `verify_cpp.exe`.
## Лицензия
Условия использования находятся в [LICENSE](LICENSE).
-9
View File
@@ -1,9 +0,0 @@
<Solution>
<Configurations>
<Platform Name="x64" />
<Platform Name="Win32" />
</Configurations>
<Project Path="projects/Szilassi/Szilassi.vcxproj" Id="35967190-b8ae-4e08-8c3a-94ee61bd0d46" />
<Project Path="projects/VerifyCpp/VerifyCpp.vcxproj" Id="edbc9fb5-7482-46d2-bc85-915e34fb1e97" />
<Project Path="projects/PolyhedronGui/PolyhedronGui.vcxproj" Id="8c3af236-14fc-4b0a-81aa-fc9952837f4a" />
</Solution>
+3 -2
View File
@@ -238,7 +238,7 @@ fs::path find_root() {
static_cast<DWORD>(buffer.size())); static_cast<DWORD>(buffer.size()));
fs::path candidate = fs::path(std::wstring(buffer.data(), length)).parent_path(); fs::path candidate = fs::path(std::wstring(buffer.data(), length)).parent_path();
while (!candidate.empty()) { while (!candidate.empty()) {
if (fs::exists(candidate / L"Szilassi.slnx") && if (fs::exists(candidate / L"CMakeLists.txt") &&
fs::exists(candidate / L"data" / L"topologies.txt")) { fs::exists(candidate / L"data" / L"topologies.txt")) {
return candidate; return candidate;
} }
@@ -337,7 +337,8 @@ bool start_process(
if (!fs::exists(exe)) { if (!fs::exists(exe)) {
const std::wstring message = const std::wstring message =
L"Не найден исполняемый файл:\n" + exe.wstring() + L"Не найден исполняемый файл:\n" + exe.wstring() +
L"\n\nСоберите Szilassi.slnx в конфигурации Release|x64."; L"\n\nСоберите preset vs2026-release через CMake или отдельно "
L"projects\\Szilassi\\Szilassi.vcxproj в конфигурации Release|x64.";
MessageBoxW(g_main_window, message.c_str(), L"Файл не найден", MB_OK | MB_ICONWARNING); MessageBoxW(g_main_window, message.c_str(), L"Файл не найден", MB_OK | MB_ICONWARNING);
return false; return false;
} }
+14 -4
View File
@@ -98,7 +98,8 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\OnlineSurrogate;$(ProjectDir)..\..\src\TrainingArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile> </ClCompile>
<Link> <Link>
@@ -115,7 +116,8 @@
<SDLCheck>false</SDLCheck> <SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\OnlineSurrogate;$(ProjectDir)..\..\src\TrainingArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet> <EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -136,7 +138,8 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\OnlineSurrogate;$(ProjectDir)..\..\src\TrainingArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile> </ClCompile>
<Link> <Link>
@@ -153,7 +156,8 @@
<SDLCheck>false</SDLCheck> <SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\src\NeighborlyCore;$(ProjectDir)..\..\src\Checkpoint;$(ProjectDir)..\..\src\SearchArchive;$(ProjectDir)..\..\src\OnlineSurrogate;$(ProjectDir)..\..\src\TrainingArchive;$(ProjectDir)..\..\src\CudaSearch;$(ProjectDir)..\..\external\eigen-3.4.0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet> <EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -173,6 +177,8 @@
<ClCompile Include="solver.cpp" /> <ClCompile Include="solver.cpp" />
<ClCompile Include="..\..\src\Checkpoint\GlobalCheckpoint.cpp" /> <ClCompile Include="..\..\src\Checkpoint\GlobalCheckpoint.cpp" />
<ClCompile Include="..\..\src\SearchArchive\SearchArchive.cpp" /> <ClCompile Include="..\..\src\SearchArchive\SearchArchive.cpp" />
<ClCompile Include="..\..\src\OnlineSurrogate\OnlineSurrogate.cpp" />
<ClCompile Include="..\..\src\TrainingArchive\TrainingArchive.cpp" />
<ClCompile Include="..\..\src\NeighborlyCore\util.cpp" /> <ClCompile Include="..\..\src\NeighborlyCore\util.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(CudaToolkitAvailable)'!='true'"> <ItemGroup Condition="'$(CudaToolkitAvailable)'!='true'">
@@ -181,6 +187,8 @@
<ItemGroup Condition="'$(CudaToolkitAvailable)'=='true'"> <ItemGroup Condition="'$(CudaToolkitAvailable)'=='true'">
<CudaCompile Include="..\..\src\CudaSearch\cuda_search.cu"> <CudaCompile Include="..\..\src\CudaSearch\cuda_search.cu">
<CodeGeneration>compute_89,sm_89;compute_120,sm_120;compute_120,compute_120</CodeGeneration> <CodeGeneration>compute_89,sm_89;compute_120,sm_120;compute_120,compute_120</CodeGeneration>
<CompileOut>$(IntDir)%(Filename)%(Extension).obj</CompileOut>
<KeepDir>$(IntDir)</KeepDir>
</CudaCompile> </CudaCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -189,6 +197,8 @@
<ClInclude Include="solver.h" /> <ClInclude Include="solver.h" />
<ClInclude Include="..\..\src\Checkpoint\GlobalCheckpoint.h" /> <ClInclude Include="..\..\src\Checkpoint\GlobalCheckpoint.h" />
<ClInclude Include="..\..\src\SearchArchive\SearchArchive.h" /> <ClInclude Include="..\..\src\SearchArchive\SearchArchive.h" />
<ClInclude Include="..\..\src\OnlineSurrogate\OnlineSurrogate.h" />
<ClInclude Include="..\..\src\TrainingArchive\TrainingArchive.h" />
<ClInclude Include="..\..\src\CudaSearch\cuda_search.h" /> <ClInclude Include="..\..\src\CudaSearch\cuda_search.h" />
<ClInclude Include="..\..\src\NeighborlyCore\util.h" /> <ClInclude Include="..\..\src\NeighborlyCore\util.h" />
<ClInclude Include="..\..\src\NeighborlyCore\wide_real.h" /> <ClInclude Include="..\..\src\NeighborlyCore\wide_real.h" />
@@ -27,6 +27,12 @@
<ClCompile Include="..\..\src\SearchArchive\SearchArchive.cpp"> <ClCompile Include="..\..\src\SearchArchive\SearchArchive.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\OnlineSurrogate\OnlineSurrogate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\TrainingArchive\TrainingArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\CudaSearch\cuda_search_stub.cpp"> <ClCompile Include="..\..\src\CudaSearch\cuda_search_stub.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
@@ -47,6 +53,12 @@
<ClInclude Include="..\..\src\SearchArchive\SearchArchive.h"> <ClInclude Include="..\..\src\SearchArchive\SearchArchive.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\OnlineSurrogate\OnlineSurrogate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\TrainingArchive\TrainingArchive.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\CudaSearch\cuda_search.h"> <ClInclude Include="..\..\src\CudaSearch\cuda_search.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
+3154 -84
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,36 @@
format szilassi-global-search-v5
run_id 0d97b151-ffdf-4b97-8411-d5015c1a2353
node_id LOOKICH
seed 393141738
topology_from 0
topology_to 58
backend cuda-fp32
objective_version 5
cuda_math standard-fp32
cuda_chains_requested 0
cuda_chains_effective 61440
cuda_iterations_per_batch 64
cuda_depth_batches 6
cuda_session_cache 59
algorithm hybrid-quality-diversity-neural-v2
control_baseline_min_fraction 0.25
strategy_weights adaptive-total:16,floors:baseline4/replica1/adaptive1/pbt1/injected3,max6
fresh_fractions depth:1/4,breadth:7/8,injected-protected
replica_exchange group:8,temperature-ratio:16
pbt rotating-pairs,depth-chance:0.08,breadth-chance:0.04
verification_quotas overall:128,per-strategy:max(8,overall/5),per-injected-seed:1
accounted_fp32_steps proposal-iterations-plus-injection-pbt;setup-retries-excluded
map_elites_bins determinant:8,edge:8,turn:8,extent:8,crossing-face-mask:12,intersection-face-mask:12
map_elites_max_cells_per_topology 4096
cem diagonal-weighted,covariance-adaptation:0.18,new-injected-only
intersection_loss segment-depth-times-boundary-depth,weight:0.01,cap:4
repair injected-quarter,offending-face-biased,neural-policy-with-exploration
neural per-topology-ensemble:5,residual-mlp:44-128-128-128,value-policy,online-adamw,replay:4096
neural_safety baseline-floor:25%,policy-exploration:25%,exact-cuda-plus-cpu-dd-authoritative
spsa adam:6,cpu-double,c-plus-i-smooth-loss,fp32-roundtrip,final-canonical-dd-gate
topology_scheduler ucb-plus-reward-plus-staleness,full-refresh-every-5
topology_scheduler_mode quality-first
worst_priority_coefficient 0.65
cpu_iterations_per_trial 50000
degeneracy_formula worst-plus-0.05-rest
degeneracy_weight 0.01
1 format szilassi-global-search-v5
2 run_id 0d97b151-ffdf-4b97-8411-d5015c1a2353
3 node_id LOOKICH
4 seed 393141738
5 topology_from 0
6 topology_to 58
7 backend cuda-fp32
8 objective_version 5
9 cuda_math standard-fp32
10 cuda_chains_requested 0
11 cuda_chains_effective 61440
12 cuda_iterations_per_batch 64
13 cuda_depth_batches 6
14 cuda_session_cache 59
15 algorithm hybrid-quality-diversity-neural-v2
16 control_baseline_min_fraction 0.25
17 strategy_weights adaptive-total:16,floors:baseline4/replica1/adaptive1/pbt1/injected3,max6
18 fresh_fractions depth:1/4,breadth:7/8,injected-protected
19 replica_exchange group:8,temperature-ratio:16
20 pbt rotating-pairs,depth-chance:0.08,breadth-chance:0.04
21 verification_quotas overall:128,per-strategy:max(8,overall/5),per-injected-seed:1
22 accounted_fp32_steps proposal-iterations-plus-injection-pbt;setup-retries-excluded
23 map_elites_bins determinant:8,edge:8,turn:8,extent:8,crossing-face-mask:12,intersection-face-mask:12
24 map_elites_max_cells_per_topology 4096
25 cem diagonal-weighted,covariance-adaptation:0.18,new-injected-only
26 intersection_loss segment-depth-times-boundary-depth,weight:0.01,cap:4
27 repair injected-quarter,offending-face-biased,neural-policy-with-exploration
28 neural per-topology-ensemble:5,residual-mlp:44-128-128-128,value-policy,online-adamw,replay:4096
29 neural_safety baseline-floor:25%,policy-exploration:25%,exact-cuda-plus-cpu-dd-authoritative
30 spsa adam:6,cpu-double,c-plus-i-smooth-loss,fp32-roundtrip,final-canonical-dd-gate
31 topology_scheduler ucb-plus-reward-plus-staleness,full-refresh-every-5
32 topology_scheduler_mode quality-first
33 worst_priority_coefficient 0.65
34 cpu_iterations_per_trial 50000
35 degeneracy_formula worst-plus-0.05-rest
36 degeneracy_weight 0.01

Some files were not shown because too many files have changed in this diff Show More