feat(engine): pass per-angle results through BruteForceResult
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,15 @@ namespace OpenNest.Engine.ML
|
||||
public long TimeMs { get; set; }
|
||||
public string LayoutData { get; set; }
|
||||
public List<Part> PlacedParts { get; set; }
|
||||
public string WinnerEngine { get; set; } = "";
|
||||
public long WinnerTimeMs { get; set; }
|
||||
public string RunnerUpEngine { get; set; } = "";
|
||||
public int RunnerUpPartCount { get; set; }
|
||||
public long RunnerUpTimeMs { get; set; }
|
||||
public string ThirdPlaceEngine { get; set; } = "";
|
||||
public int ThirdPlacePartCount { get; set; }
|
||||
public long ThirdPlaceTimeMs { get; set; }
|
||||
public List<AngleResult> AngleResults { get; set; } = new();
|
||||
}
|
||||
|
||||
public static class BruteForceRunner
|
||||
@@ -28,13 +37,30 @@ namespace OpenNest.Engine.ML
|
||||
if (parts == null || parts.Count == 0)
|
||||
return null;
|
||||
|
||||
// Rank phase results — winner is explicit, runners-up sorted by count.
|
||||
var winner = engine.PhaseResults
|
||||
.FirstOrDefault(r => r.Phase == engine.WinnerPhase);
|
||||
var runnerUps = engine.PhaseResults
|
||||
.Where(r => r.PartCount > 0 && r.Phase != engine.WinnerPhase)
|
||||
.OrderByDescending(r => r.PartCount)
|
||||
.ToList();
|
||||
|
||||
return new BruteForceResult
|
||||
{
|
||||
PartCount = parts.Count,
|
||||
Utilization = CalculateUtilization(parts, plate.Area()),
|
||||
TimeMs = sw.ElapsedMilliseconds,
|
||||
LayoutData = SerializeLayout(parts),
|
||||
PlacedParts = parts
|
||||
PlacedParts = parts,
|
||||
WinnerEngine = engine.WinnerPhase.ToString(),
|
||||
WinnerTimeMs = winner?.TimeMs ?? 0,
|
||||
RunnerUpEngine = runnerUps.Count > 0 ? runnerUps[0].Phase.ToString() : "",
|
||||
RunnerUpPartCount = runnerUps.Count > 0 ? runnerUps[0].PartCount : 0,
|
||||
RunnerUpTimeMs = runnerUps.Count > 0 ? runnerUps[0].TimeMs : 0,
|
||||
ThirdPlaceEngine = runnerUps.Count > 1 ? runnerUps[1].Phase.ToString() : "",
|
||||
ThirdPlacePartCount = runnerUps.Count > 1 ? runnerUps[1].PartCount : 0,
|
||||
ThirdPlaceTimeMs = runnerUps.Count > 1 ? runnerUps[1].TimeMs : 0,
|
||||
AngleResults = engine.AngleResults.ToList()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user