OpenAI reuses model codenames across generations (GPT-6 reused GPT-5.6's Sol and Luna), so a bare codename like "Astra" can't identify which model built the engine. Prefixing the model version keeps engine names unambiguous as more runs are added. The CLR type is now Gpt6AstraNestingEngine, so benchmark reports show the new name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.0 KiB
Markdown
57 lines
2.0 KiB
Markdown
# OpenNest Engines
|
|
|
|
Independent nesting engine plugins for [OpenNest](https://git.thecozycat.net/aj/OpenNest).
|
|
Each engine is a standalone class library that OpenNest discovers at runtime via
|
|
`NestingEngineRegistry.LoadPlugins()` — drop the DLL into an `Engines/` folder next to
|
|
the OpenNest app or `OpenNest.Benchmark` build output.
|
|
|
|
| Engine | Approach |
|
|
|--------|----------|
|
|
| [Gpt6Astra](OpenNest.Engine.Gpt6Astra/) | Contact-based placement |
|
|
| [Opus55](OpenNest.Engine.Opus55/) | Frontier-advance no-fit-polygon packing |
|
|
| [Qwen](OpenNest.Engine.Qwen/) | Scaffold — not yet implemented |
|
|
|
|
## Building
|
|
|
|
Engines compile against an OpenNest checkout, expected as a sibling clone:
|
|
|
|
```
|
|
src/
|
|
OpenNest/ git clone https://git.thecozycat.net/aj/OpenNest.git
|
|
OpenNest-Engines/ this repo
|
|
```
|
|
|
|
Use a different location with `/p:OpenNestRoot=<path>` (or the `OpenNestRoot`
|
|
environment variable).
|
|
|
|
```powershell
|
|
./Build-Engines.ps1 # build all engines + deploy to the benchmark
|
|
./Build-Engines.ps1 -Engines Opus55 # just one
|
|
dotnet test OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj
|
|
```
|
|
|
|
Each engine's README covers its algorithm and benchmark results.
|
|
|
|
## Writing a new engine
|
|
|
|
```powershell
|
|
./New-Engine.ps1 -Name Nova
|
|
```
|
|
|
|
This copies `_Template/` to `OpenNest.Engine.Nova/`: an `INestingEngine` stub, a README
|
|
spelling out what counts as an independent engine, and starter acceptance tests checked by
|
|
the benchmark's own `NestValidator` (they fail until `Solve()` is implemented).
|
|
|
|
To work inside an OpenNest checkout instead, stamp it into an `Engines/` folder there and
|
|
bring the shared build files along; they detect that layout automatically:
|
|
|
|
```powershell
|
|
./New-Engine.ps1 -Name Nova -Destination <OpenNest>/Engines -IncludeBuildFiles
|
|
```
|
|
|
|
## Layout
|
|
|
|
Each engine lives in `OpenNest.Engine.<Name>/` with an optional `tests/` subproject.
|
|
`Directory.Build.props` supplies the target framework and the `OpenNest.Engine`
|
|
reference, so an engine's `.csproj` can be nearly empty.
|