Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ All notable changes to public benchmark suites and sample assets are recorded
here. Released dataset inputs are immutable; semantic input changes create a new
suite version.

## 1.1.0 - 2026-07-22

- Added the initial five-case synthetic 2D nesting suite.
- Added 2D manifest, case, and result schemas plus methodology v1.
- Added validation for polygon area, deterministic seeds, part/sheet quantities,
and expected placement boundaries.
- Defined geometric utilization and estimated unused area separately from
manufacturing waste.

## 1.0.1 - 2026-07-21

- Enforced LF line endings for generated and checksummed text assets so clean
Expand Down
6 changes: 3 additions & 3 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ title: "CutNesting Benchmarks and Sample Files"
type: dataset
authors:
- name: Technodweep
version: 1.0.0
date-released: 2026-07-21
version: 1.1.0
date-released: 2026-07-22
license: CC-BY-4.0
repository-code: "https://github.com/technodweep/cutnesting-benchmarks"
url: "https://cutnesting.com/benchmarks/1d-cutting/"
url: "https://cutnesting.com/benchmarks/"
keywords:
- cutting stock
- nesting
Expand Down
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ an independently validated proof-bearing `optimal` status.
- Browse the [1D benchmark dataset](datasets/1d/v1/manifest.json).
- Read the [1D methodology](methodology/v1.md) before interpreting waste or
efficiency figures.
- Browse the [2D benchmark dataset](datasets/2d/v1/manifest.json) and read its
[area-utilization methodology](methodology/2d-v1.md).
- Download [synthetic DXF and DSTV/NC1 samples](samples/README.md).
- Use the [CutNesting-compatible CSV and XLSX templates](templates/README.md).
- Check the exact [DSTV/NC1 subset](docs/dstv-nc1-supported-subset.md) represented
Expand Down Expand Up @@ -75,8 +77,18 @@ material accounting, independent validation outcomes, engine and dataset
commits, and machine metadata. Development runs remain local diagnostics and
must not be copied into marketing claims.

The initial 2D suite contains five deterministic cases covering exact fit,
steel plate, wood sheet, irregular remnant geometry, and finite-stock
exhaustion. Its primary metric is geometric utilization. "Estimated unused
area" is not disposable waste because kerf, lead-ins, pierces, and toolpaths are
outside this benchmark's scope.

The current immutable dataset release is
[v1.0.1](https://github.com/technodweep/cutnesting-benchmarks/releases/tag/v1.0.1).
[v1.1.0](https://github.com/technodweep/cutnesting-benchmarks/releases/tag/v1.1.0).
This release adds the initial public 2D suite without changing the immutable 1D
v1 inputs. Release
[`v1.0.1`](https://github.com/technodweep/cutnesting-benchmarks/releases/tag/v1.0.1)
remains the source for the published 1D result.
Release `v1.0.0` is superseded because Windows checkout line-ending conversion
prevented byte-for-byte template verification; benchmark case semantics did not
change in `v1.0.1`.
Expand Down
20 changes: 15 additions & 5 deletions SHA256SUMS
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,31 @@
110a2ea93050ba4e4c3e2844a3a80360a1834c34fa6c85140caa5ce1d1c5a33d datasets/1d/v1/cases/1d-asymmetric-trim.json
227d419d4d0bb2eeb7165f6aa69c25ac9c80ef0d6496fb8cfc2fb5cdd08a725e datasets/1d/v1/cases/1d-mixed-finite-stock.json
2291cdc07004e2ceeba3b68a061dc705f0c4e0d43a09e8574bd46a37aff08277 templates/1d-wood.csv
26ff9196bfed893627627676cd65f1b79238e04bc9f0a911a031e11a6ca54236 datasets/2d/v1/cases/2d-irregular-remnant-with-void.json
2b95191fd5257e96d6a23fd25b3c5e21c0de53f359fa5711d3773f74db7540e5 schemas/2d-result.schema.json
2e831894024b572c937b6910d640d750d05da7d551cadaf4443caa412ed18dfd datasets/1d/v1/cases/1d-offcut-threshold.json
3538cbbbc6fc2bfafd81a7a0dafbd3541d5de5adf59330eac0dee844272b0bf2 scripts/validate-repository.mjs
379c6258142310a26b56e19a12090219a7842230c93043add22165d92543ed8a datasets/1d/v1/cases/1d-oversized-cut.json
3872aa21644f029e59717c5d383b8f56cae2ddc46f714569658504c3f9b0e7ba CONTRIBUTING.md
389631286dcf8f56adac4738d308f494a2d5a07739ece075b328f523b2f0dfde templates/2d-sheet-and-plate.xlsx
3c1ac369feffeb30b7661cb30c25415430e348c589c1e5ee8e618a18a0129b88 scripts/validate-repository.mjs
3f9b228cb1790199f4f5d57c0c5273d0bc31afc56085cf84a45f18d62291c55a templates/definitions.json
3fa1679686c4089d3f40cf5c775c44fd13a86c73ae0b8248dc6d09abc4d19b73 datasets/2d/v1/cases/2d-exact-square-grid.json
4075b6de75729e73d7c885871b65ed82977f2cb410da0fda05a8a8ff3acfb12c datasets/1d/v1/cases/1d-high-piece-count.json
416bdf8ab60a5c061d0f03bb3b6b7ca72d3de33a13b0be2ce248d6905590af56 samples/dxf/self-intersection.dxf
469b6ae250e6ed87b69eb74c4a4465a5a115d4f9177f43ff05ea3f8c49305cba docs/dstv-nc1-supported-subset.md
4e6d54ec0510235190e6d0c99adc0723b178bd96eba8cc56432588a7ded33054 datasets/2d/v1/manifest.json
530c7acb6679f73e273f6837c91113de1a4ac4f891340137186237e921238411 templates/1d-pipe.csv
54d511cc31cd3abf7bfcdff8b5375fbf6380d641e0613d6da74315ac35131fb0 templates/1d-aluminium.csv
575c34472b5be7655cec94cbf64e3cf10d4e1fbb48b3dd7379d1497d32f7c9d2 datasets/1d/v1/cases/1d-stock-exhausted.json
5c6a1002bfe7181ff28461564609d19833dd0619600949d5f19fa02adcc61d4d templates/README.md
5e5dfadffe824f61c3245ecfb43e5a765efbc9f33e25398a5eb1bacb3cfb79dc schemas/2d-case.schema.json
61515a9f1f98ce6615cee16851055fb5ee0c6c1e8c8c461a99c960aeaef6a6c8 .gitattributes
62a4cd80cacd5038ee4db3aa59f2eb505f974911f8073f8e3b7aee466b65766a SECURITY.md
672ed6618f1e15138e5a7aa747c2a84671664ec83b5062c17f1d96f763ba9e53 methodology/v1.md
67ea1f3f5aa0366ba04cbfa4d40a7ddb6e51112cfb49e3cbf4b705f2473473b4 datasets/1d/v1/cases/1d-exact-fit.json
68bf7443fae19274bad90ab0ee55f571fb2387b2dbeb3cfa04bba408b1c4f3b5 schemas/1d-result.schema.json
69e469f4aa3f7488fcd4e35c6daf1e07523b9ed23d742610c8c4870c99951edd README.md
7225ad3c3de17ec306e427b4f9880cddc19460f9e90bdb4443269ceb59a05239 datasets/README.md
730ec1858fcd0d8639002409c367b3d49b3627a6a81f7a1b3eb810fc3efbcb75 datasets/2d/v1/cases/2d-steel-plate-grid.json
754fe4464a7ea94ab81eebe10a69f07ccb27abace529301fab6673b2e98a648c samples/nc1/unsupported-profile.nc1
782d465d88d25f1dffd6f9fafa1620b6607aa1f6bf96c73c379f15b17992be0b results/1d/v1.0.1/README.md
7dc97fd0976ecc0a6bcc852fe44c5a13f8bae4b879866a440b14ac180fc25132 results/README.md
Expand All @@ -37,21 +42,26 @@
9cc055698c8c63b83eda5b2bdf21e57b49a80989365730438f9bc1fdeb349c9e samples/dxf/unitless-open-contour.dxf
9e47e498a7f75119e124d12613407228452a0beb4041086db8046020aade65da samples/nc1/radius-too-large.nc1
9e5ade7e935cf7a1a353f477b3b5d01ae01dc0bb4e69da13ce7d9cabf4fd86cb results/1d/v1.0.1/reference-windows-x64-i5-9400f.summary.csv
a02e7292f9f295f91a704467aef00752597f65cf666a3e9ef2131caafc0798b5 package.json
a34257ca65ac5f44b99f05b2d180931de5796c0f78fea81d29d94987b16717d4 samples/dxf/layer-block-insert.dxf
a4980b24140bd58dda422718e4b189f208715976b670c33f257c224b20c9942f samples/nc1/plate-radius.nc1
a574cffc3eb42f427a035157e78948adc13d4694907ceaaf0a6765dd6d0df4b7 datasets/2d/v1/cases/2d-wood-panel-grid.json
aac5abb1eacaee94944a150db7d0facf886c71a26def8a36e4be7db3137f3bfc .gitignore
af57dba5ee88fb4ce9aee2b1d5b6dfbfb784981a43c25c41f8e6ce9cc09cfc5a results/1d/v1.0.1/reference-windows-x64-i5-9400f.json
c4aa3a77b37562ab4206221aab32cf68a89c3de33f411533c08547097d61a7a2 templates/1d-steel.csv
c680e32b10dee44df1f84b3f57e8c7c75591e01ee2686ffc53ec9ce7e05e25dc datasets/1d/v1/cases/1d-cost-tradeoff.json
c835f63b88d549850553fb6c9ffe01c3c9cfc197b6a3c74334deeb6cc2c8f896 package.json
cb1136ac89f569865b72f8af974ec059abe7914013f0c32f1396d8b99e874a28 schemas/1d-case.schema.json
cb6c36568a75c8d10b06ec7d8731789e56023b11cc8d498cfca57703c13a9ad1 datasets/1d/v1/cases/1d-wood-furniture.json
cd13e90119f89a461de8d5a7d14bbe96cf8708110172ad2d019da5f376a262b8 CITATION.cff
d1aabca6e789b514f0b0aa4a1cf11e07e29ab05abd4108543b7c45166f10dc81 CHANGELOG.md
d52a2c32095f4035f5d23002f14a2310548ee469f1a9175a8c893362f653fbc6 schemas/manifest.schema.json
da697e0db4946a0c42bb8aa4aa8c65546561ec8434fc52ead383804fb087fcce CHANGELOG.md
e5067d3ddbfbffc4a53bc184199a1ff67c64bac88c83ce3fb9b4549010f40d85 CITATION.cff
da6e8342856133226cad0ca6c6bca1e607497c30a1d016105b7d54f4ce254a70 datasets/2d/v1/cases/2d-stock-exhausted.json
e603eb378f7453f5e14ce87bc5ea0285b93f0fbce3a6edb225190df987ebdace samples/manifest.json
e6dc9fea66d59eb62cdc747718fc784bb962952ff7501280b15ba6472042fc36 templates/2d-sheet-and-plate.csv
eeb3bc4f2215d6ed7e29a743946c4075fd77f23316cd3cdffe607cc38c99474d schemas/2d-manifest.schema.json
f1ce8f5048968c79ad8e7406696389708e3fb51ee08626b23a80916b9e5d1984 LICENSE-DATA.md
f27e13aa8a94fc76ce4766ed9f3910ad00e28cfd48d6ff42177e11dc799cc65a scripts/verify-checksums.mjs
f839d9a035286c9dddde94329a0bbffd0d0880eaf985687b1588cf1020c17866 samples/dxf/unitless-rectangle.dxf
f8ee19613ce597319f2cb9b1a89c9dbe1257b01a9742145633bba14170078c0a methodology/2d-v1.md
fa23d582976607d64ce1497aeebdaa43eb43adc68a9f46e9866d316c17b4bfd3 README.md
ff9ea556c36d48d767b4d6f87f9aa61e58248e8683fa90d3ee4a8c7ff0d0604a .github/workflows/validate.yml
66 changes: 66 additions & 0 deletions datasets/2d/v1/cases/2d-exact-square-grid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"schemaVersion": "cutnesting.benchmark.case.2d.v1",
"id": "2d-exact-square-grid",
"title": "Exact square grid",
"description": "Four equal square parts exactly cover one square sheet with zero gap and edge margin, providing a minimal area-accounting fixture.",
"difficulty": "small",
"source": "synthetic",
"license": "CC-BY-4.0",
"provenance": "Created by Technodweep as a deterministic exact-area and complete-placement fixture.",
"input": {
"schemaVersion": 1,
"jobId": "benchmark-2d-exact-square-grid",
"unit": "mm",
"deterministicSeed": 2026072201,
"runtimeHost": "localhost",
"lockedPlacements": [],
"parts": [
{
"id": "square-panel",
"name": "Square panel",
"quantity": 4,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 500, "y": 0 },
{ "x": 500, "y": 500 },
{ "x": 0, "y": 500 }
],
"holes": []
},
"allowedRotations": [0, 90],
"materialGroup": "synthetic::exact::1",
"priority": 0
}
],
"sheets": [
{
"id": "square-sheet",
"name": "1000 x 1000 sheet",
"width": 1000,
"height": 1000,
"quantity": 1,
"materialGroup": "synthetic::exact::1",
"cost": null,
"isRemnant": false,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 1000, "y": 0 },
{ "x": 1000, "y": 1000 },
{ "x": 0, "y": 1000 }
],
"holes": []
}
}
],
"options": {
"partGap": 0,
"edgeMargin": 0,
"quality": "balanced",
"objective": "fewest_sheets",
"timeLimitMs": 10000,
"preferRemnants": false
}
}
}
75 changes: 75 additions & 0 deletions datasets/2d/v1/cases/2d-irregular-remnant-with-void.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"schemaVersion": "cutnesting.benchmark.case.2d.v1",
"id": "2d-irregular-remnant-with-void",
"title": "Irregular remnant with a void",
"description": "Four square tiles must fit inside a concave L-shaped reusable remnant while avoiding an internal stock void and preserving edge margin.",
"difficulty": "medium",
"source": "synthetic",
"license": "CC-BY-4.0",
"provenance": "Created by Technodweep to validate true polygon area, concave stock, void avoidance and remnant use.",
"input": {
"schemaVersion": 1,
"jobId": "benchmark-2d-irregular-remnant",
"unit": "mm",
"deterministicSeed": 2026072204,
"runtimeHost": "localhost",
"lockedPlacements": [],
"parts": [
{
"id": "tile",
"name": "Tile",
"quantity": 4,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 20, "y": 0 },
{ "x": 20, "y": 20 },
{ "x": 0, "y": 20 }
],
"holes": []
},
"allowedRotations": [0, 90],
"materialGroup": "steel::s275::6",
"priority": 0
}
],
"sheets": [
{
"id": "l-remnant",
"name": "L remnant",
"width": 100,
"height": 100,
"quantity": 1,
"materialGroup": "steel::s275::6",
"cost": 0,
"isRemnant": true,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 100, "y": 0 },
{ "x": 100, "y": 40 },
{ "x": 40, "y": 40 },
{ "x": 40, "y": 100 },
{ "x": 0, "y": 100 }
],
"holes": [
[
{ "x": 10, "y": 10 },
{ "x": 20, "y": 10 },
{ "x": 20, "y": 20 },
{ "x": 10, "y": 20 }
]
]
}
}
],
"options": {
"partGap": 2,
"edgeMargin": 1,
"quality": "balanced",
"objective": "reusable_remnants",
"timeLimitMs": 10000,
"preferRemnants": true
}
}
}
66 changes: 66 additions & 0 deletions datasets/2d/v1/cases/2d-steel-plate-grid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"schemaVersion": "cutnesting.benchmark.case.2d.v1",
"id": "2d-steel-plate-grid",
"title": "Steel plate panel grid",
"description": "Twelve repeated steel panels are nested on one 3000 by 1500 millimetre plate with a 10 millimetre part gap and edge margin.",
"difficulty": "medium",
"source": "synthetic",
"license": "CC-BY-4.0",
"provenance": "Created by Technodweep as a realistic-scale synthetic steel plate utilization case.",
"input": {
"schemaVersion": 1,
"jobId": "benchmark-2d-steel-plate-grid",
"unit": "mm",
"deterministicSeed": 2026072202,
"runtimeHost": "localhost",
"lockedPlacements": [],
"parts": [
{
"id": "steel-panel-730x480",
"name": "Steel panel 730 x 480",
"quantity": 12,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 730, "y": 0 },
{ "x": 730, "y": 480 },
{ "x": 0, "y": 480 }
],
"holes": []
},
"allowedRotations": [0, 90],
"materialGroup": "steel::s275::6",
"priority": 0
}
],
"sheets": [
{
"id": "steel-plate-3000x1500",
"name": "S275 plate 3000 x 1500 x 6",
"width": 3000,
"height": 1500,
"quantity": 1,
"materialGroup": "steel::s275::6",
"cost": 180,
"isRemnant": false,
"geometry": {
"outer": [
{ "x": 0, "y": 0 },
{ "x": 3000, "y": 0 },
{ "x": 3000, "y": 1500 },
{ "x": 0, "y": 1500 }
],
"holes": []
}
}
],
"options": {
"partGap": 10,
"edgeMargin": 10,
"quality": "balanced",
"objective": "fewest_sheets",
"timeLimitMs": 10000,
"preferRemnants": false
}
}
}
Loading
Loading