mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-12 07:51:11 -05:00
fix(planning): learn to reach a sheet separator from beyond the parts in its way
A sheet separator is cut after everything, so when the approach to its pierce crossed parts already cut, the usual "cut it before them" rule contradicted that and the search learned nothing. It fell back to the full search, which spent the budget or found a route that climbed the column and jumped back down past the cut parts (N26-23M). When every "cut the blocked part first" rule would contradict a required order, learn the other way round: cut the part the approach left from before the parts it crossed, so the tool arrives from beyond them. A separator blocked this way now ends the attempt at once, like any cutoff whose rule can be learned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
207f126b9e
commit
f4317bc52f
3 files changed
+69
-19
No files matched your search
@@ -218,7 +218,10 @@ from the start point. Its 2-opt and Or-opt passes would grow with the square of
|
||||
part count. Replans after a learned rule use the plain tour. If a part on that order cannot be
|
||||
reached without crossing parts already cut, the search learns "cut this part
|
||||
before those", backs up to just before the earliest of them and re-plans the rest
|
||||
from the tool position there; parts cut before that point are kept. The first pass
|
||||
from the tool position there; parts cut before that point are kept. When the part
|
||||
cannot come earlier (a sheet separator is cut after everything), it learns the other
|
||||
way round, "cut the part the approach left from before those", so the tool arrives
|
||||
from beyond them. The first pass
|
||||
along an order that teaches such a rule ends the round; the directed-recovery and
|
||||
full passes run only when the lighter pass taught nothing. An attempt
|
||||
stops backtracking after a stall of 8 x entries x contours expansions without
|
||||
@@ -227,7 +230,8 @@ parts before it. The contours are the larger count of the blocked part and the p
|
||||
cut just before it, whose departure a retry changes, so one many-holed part elsewhere
|
||||
on the plate does not lengthen every stall. A cutoff is the exception: it is a fixed program and cutting it earlier never
|
||||
makes its own cut harder, so an approach into a non-separating cutoff that crosses parts already
|
||||
cut teaches "cut the cutoff before them" at once, without that stall. A rule that would contradict an order already required is skipped.
|
||||
cut teaches "cut the cutoff before them" at once, without that stall, and one into a sheet
|
||||
separator teaches its other-way-round rule at once. A rule that would contradict an order already required is skipped.
|
||||
"Cut before" rules are a heuristic (a part blocked straight after another may be
|
||||
reachable via a third), so once nothing new can be learned the remaining budget
|
||||
first tries sequence-free recovery, visiting dependency-ready parts lazily by
|
||||
|
||||
Reference in new issue
Block a user