Learn reliable drill recovery plan trust in dashboard history
This commit is contained in:
parent
f6be5c54ae
commit
6a3f8be08b
2 changed files with 268 additions and 35 deletions
|
|
@ -67,6 +67,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
int32 WeakRetainedMethodDrillQueueRecommendationCount = 0;
|
||||
int32 WeakRetainedMethodDrillFollowUpRecommendationCount = 0;
|
||||
int32 WeakRetainedMethodDrillRecommendedRecommendationCount = 0;
|
||||
int32 ReliableTrustedTightQueueAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedTightFollowUpAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedTightRecommendedAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedBroadQueueAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedBroadFollowUpAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedBroadRecommendedAcceptedDeltaCount = 0;
|
||||
int32 ReliableTrustedTightQueueRecommendationCount = 0;
|
||||
int32 ReliableTrustedTightFollowUpRecommendationCount = 0;
|
||||
int32 ReliableTrustedTightRecommendedRecommendationCount = 0;
|
||||
int32 ReliableTrustedBroadQueueRecommendationCount = 0;
|
||||
int32 ReliableTrustedBroadFollowUpRecommendationCount = 0;
|
||||
int32 ReliableTrustedBroadRecommendedRecommendationCount = 0;
|
||||
int32 QueueScore = 0;
|
||||
int32 FollowUpScore = 0;
|
||||
int32 RecommendedScore = 0;
|
||||
|
|
@ -80,6 +92,8 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
bool bHasMethodDrillRecommendationSignal = false;
|
||||
bool bHasStrongRetainedMethodDrillPostureSignal = false;
|
||||
bool bHasWeakRetainedMethodDrillPostureSignal = false;
|
||||
bool bHasReliableTrustedTightPlanHistorySignal = false;
|
||||
bool bHasReliableTrustedBroadPlanHistorySignal = false;
|
||||
bool bHasSignal = false;
|
||||
};
|
||||
|
||||
|
|
@ -1303,18 +1317,54 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
Bias.QueueAcceptedDeltaCount += QueuedDelta;
|
||||
Bias.QueueScore += QueuedDelta * 3;
|
||||
Bias.bHasAcceptedSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedTightQueueAcceptedDeltaCount += QueuedDelta;
|
||||
Bias.QueueScore += QueuedDelta * 2;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedBroadQueueAcceptedDeltaCount += QueuedDelta;
|
||||
++Bias.QueueScore;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
}
|
||||
if (FollowUpDelta > 0)
|
||||
{
|
||||
Bias.FollowUpAcceptedDeltaCount += FollowUpDelta;
|
||||
Bias.FollowUpScore += FollowUpDelta * 3;
|
||||
Bias.bHasAcceptedSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedTightFollowUpAcceptedDeltaCount += FollowUpDelta;
|
||||
Bias.FollowUpScore += FollowUpDelta * 2;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedBroadFollowUpAcceptedDeltaCount += FollowUpDelta;
|
||||
++Bias.FollowUpScore;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
}
|
||||
if (RecommendedDelta > 0)
|
||||
{
|
||||
Bias.RecommendedAcceptedDeltaCount += RecommendedDelta;
|
||||
Bias.RecommendedScore += RecommendedDelta * 3;
|
||||
Bias.bHasAcceptedSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedTightRecommendedAcceptedDeltaCount += RecommendedDelta;
|
||||
++Bias.RecommendedScore;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
Bias.ReliableTrustedBroadRecommendedAcceptedDeltaCount += RecommendedDelta;
|
||||
Bias.RecommendedScore += RecommendedDelta * 2;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
}
|
||||
if (DeferredOverflowQueuedDelta > 0)
|
||||
{
|
||||
|
|
@ -1402,6 +1452,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
++Bias.QueueRecommendationCount;
|
||||
++Bias.QueueScore;
|
||||
Bias.bHasRecommendationSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedTightQueueRecommendationCount;
|
||||
Bias.QueueScore += 2;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedBroadQueueRecommendationCount;
|
||||
++Bias.QueueScore;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedMethodDrillWeighting)
|
||||
{
|
||||
++Bias.MethodDrillQueueRecommendationCount;
|
||||
|
|
@ -1432,6 +1494,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
++Bias.FollowUpRecommendationCount;
|
||||
++Bias.FollowUpScore;
|
||||
Bias.bHasRecommendationSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedTightFollowUpRecommendationCount;
|
||||
Bias.FollowUpScore += 2;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedBroadFollowUpRecommendationCount;
|
||||
++Bias.FollowUpScore;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedMethodDrillWeighting)
|
||||
{
|
||||
++Bias.MethodDrillFollowUpRecommendationCount;
|
||||
|
|
@ -1462,6 +1536,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
++Bias.RecommendedRecommendationCount;
|
||||
++Bias.RecommendedScore;
|
||||
Bias.bHasRecommendationSignal = true;
|
||||
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedTightRecommendedRecommendationCount;
|
||||
++Bias.RecommendedScore;
|
||||
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
++Bias.ReliableTrustedBroadRecommendedRecommendationCount;
|
||||
Bias.RecommendedScore += 2;
|
||||
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
|
||||
}
|
||||
if (Entry.bUsedMethodDrillWeighting)
|
||||
{
|
||||
++Bias.MethodDrillRecommendedRecommendationCount;
|
||||
|
|
@ -1945,7 +2031,9 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
if (Outcome.IsStructurallyValid()
|
||||
&& (Outcome.bUsedMethodDrillHandoffSignal
|
||||
|| Outcome.bUsedNarrowMethodDrillPacketStructureRecovery
|
||||
|| Outcome.bUsedBroadMethodDrillPacketStructureRecovery))
|
||||
|| Outcome.bUsedBroadMethodDrillPacketStructureRecovery
|
||||
|| Outcome.bUsedReliableTrustedTightStructurePlanRecovery
|
||||
|| Outcome.bUsedReliableTrustedBroadStructurePlanRecovery))
|
||||
{
|
||||
OutIndices.Add(Index);
|
||||
}
|
||||
|
|
@ -2239,6 +2327,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanComparisonSummary(
|
||||
MethodDrillRecoveryMemoryHistoryEntries
|
||||
);
|
||||
const int32 MethodDrillRecoveryPlanTightTrust =
|
||||
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanTightTrust(
|
||||
MethodDrillRecoveryPlanComparisonSummary);
|
||||
const int32 MethodDrillRecoveryPlanBroadTrust =
|
||||
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanBroadTrust(
|
||||
MethodDrillRecoveryPlanComparisonSummary);
|
||||
const bool bUseTrustedTightMethodDrillRecoveryStructurePlan =
|
||||
bUseTightMethodDrillRecoveryStructurePlan
|
||||
&& (HyperTwistCoachDashboardWidgetInternal::IsTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
|
|
@ -2251,6 +2345,20 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::PrefersMethodDrillRecoveryPlanBroadRedirect(
|
||||
MethodDrillRecoveryPlanComparisonSummary));
|
||||
const bool bUseReliableTrustedTightMethodDrillRecoveryStructurePlan =
|
||||
bUseTrustedTightMethodDrillRecoveryStructurePlan
|
||||
&& (HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| (MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanTightTrust > 0
|
||||
&& MethodDrillRecoveryPlanTightTrust >= MethodDrillRecoveryPlanBroadTrust));
|
||||
const bool bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan =
|
||||
bUseTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
&& (HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| (MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanBroadTrust > 0
|
||||
&& MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust));
|
||||
|
||||
auto StartRunAndRefresh = [this](const FHyperTwistTrainingRunState& RunState)
|
||||
{
|
||||
|
|
@ -2274,7 +2382,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
bUseNarrowMethodDrillPacketStructureRecovery,
|
||||
bUseBroadMethodDrillPacketStructureRecovery,
|
||||
bUseStrongRetainedMethodDrillRecoveryPosture,
|
||||
bUseWeakRetainedMethodDrillRecoveryPosture
|
||||
bUseWeakRetainedMethodDrillRecoveryPosture,
|
||||
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan,
|
||||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
](
|
||||
const TCHAR* AppliedActionLabel,
|
||||
const FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind ActionKind,
|
||||
|
|
@ -2303,6 +2413,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
bUseWeakRetainedMethodDrillRecoveryPosture
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
|
||||
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery,
|
||||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
|
||||
bSucceeded
|
||||
);
|
||||
UpdateDashboardPresentation();
|
||||
|
|
@ -6499,6 +6615,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
++Weighting.WeakRetainedMethodDrillPromoteReducedCount;
|
||||
}
|
||||
}
|
||||
if (Outcome.bUsedReliableTrustedBroadStructurePlanRecovery)
|
||||
{
|
||||
++Weighting.ReliableTrustedBroadPlanPromoteCount;
|
||||
Weighting.bHasReliableTrustedPlanOutcomeSignal = true;
|
||||
if (Outcome.bReducedFriction)
|
||||
{
|
||||
++Weighting.ReliableTrustedBroadPlanPromoteReducedCount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery:
|
||||
++Weighting.LaunchCount;
|
||||
|
|
@ -6550,6 +6675,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
++Weighting.StrongRetainedMethodDrillLaunchReducedCount;
|
||||
}
|
||||
}
|
||||
if (Outcome.bUsedReliableTrustedTightStructurePlanRecovery)
|
||||
{
|
||||
++Weighting.ReliableTrustedTightPlanLaunchCount;
|
||||
Weighting.bHasReliableTrustedPlanOutcomeSignal = true;
|
||||
if (Outcome.bReducedFriction)
|
||||
{
|
||||
++Weighting.ReliableTrustedTightPlanLaunchReducedCount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -6800,6 +6934,18 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
Weighting.BroadMethodDrillPacketStructurePromoteCount
|
||||
- Weighting.BroadMethodDrillPacketStructurePromoteReducedCount,
|
||||
0)) * 0.5f;
|
||||
const float ReliableTrustedTightPlanLaunchScore =
|
||||
static_cast<float>(Weighting.ReliableTrustedTightPlanLaunchReducedCount) * 3.0f
|
||||
+ static_cast<float>(FMath::Max(
|
||||
Weighting.ReliableTrustedTightPlanLaunchCount
|
||||
- Weighting.ReliableTrustedTightPlanLaunchReducedCount,
|
||||
0)) * 0.5f;
|
||||
const float ReliableTrustedBroadPlanPromoteScore =
|
||||
static_cast<float>(Weighting.ReliableTrustedBroadPlanPromoteReducedCount) * 3.0f
|
||||
+ static_cast<float>(FMath::Max(
|
||||
Weighting.ReliableTrustedBroadPlanPromoteCount
|
||||
- Weighting.ReliableTrustedBroadPlanPromoteReducedCount,
|
||||
0)) * 0.5f;
|
||||
const float AdjustedPromoteScore =
|
||||
PromoteScore
|
||||
+ (Weighting.bHasDeferredFirstSignal ? DeferredFirstPromoteScore * 1.5f : 0.0f)
|
||||
|
|
@ -6807,6 +6953,9 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
+ (Weighting.BroadMethodDrillPacketStructurePromoteCount > 0
|
||||
? BroadMethodDrillPacketStructurePromoteScore * 1.2f
|
||||
: 0.0f)
|
||||
+ (Weighting.ReliableTrustedBroadPlanPromoteCount > 0
|
||||
? ReliableTrustedBroadPlanPromoteScore * 1.25f
|
||||
: 0.0f)
|
||||
+ (Weighting.WeakRetainedMethodDrillPromoteCount > 0
|
||||
? WeakRetainedMethodDrillPromoteScore * 1.1f
|
||||
: 0.0f)
|
||||
|
|
@ -6818,6 +6967,9 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
+ (Weighting.NarrowMethodDrillPacketStructureLaunchCount > 0
|
||||
? NarrowMethodDrillPacketStructureLaunchScore * 1.2f
|
||||
: 0.0f)
|
||||
+ (Weighting.ReliableTrustedTightPlanLaunchCount > 0
|
||||
? ReliableTrustedTightPlanLaunchScore * 1.25f
|
||||
: 0.0f)
|
||||
+ (Weighting.StrongRetainedMethodDrillLaunchCount > 0
|
||||
? StrongRetainedMethodDrillLaunchScore * 1.1f
|
||||
: 0.0f)
|
||||
|
|
@ -7161,6 +7313,8 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
|
|||
const bool bUsedBroadMethodDrillPacketStructureRecovery,
|
||||
const bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedReliableTrustedTightStructurePlanRecovery,
|
||||
const bool bUsedReliableTrustedBroadStructurePlanRecovery,
|
||||
const bool bSucceeded)
|
||||
{
|
||||
QueueRecoveryOutcome.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
|
||||
|
|
@ -7205,6 +7359,10 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
|
|||
bUsedStrongRetainedMethodDrillRecoveryPosture;
|
||||
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture =
|
||||
bUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery =
|
||||
bUsedReliableTrustedTightStructurePlanRecovery;
|
||||
QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery =
|
||||
bUsedReliableTrustedBroadStructurePlanRecovery;
|
||||
bHasQueueRecoveryOutcome = QueueRecoveryOutcome.IsStructurallyValid();
|
||||
if (bHasQueueRecoveryOutcome)
|
||||
{
|
||||
|
|
@ -7232,7 +7390,9 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
const bool bUsedDeferredFirstSuppressionSignal,
|
||||
const bool bUsedMethodDrillWeighting,
|
||||
const bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedWeakRetainedMethodDrillRecoveryPosture)
|
||||
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedReliableTrustedTightStructurePlanHistory,
|
||||
const bool bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
FHyperTwistCoachDashboardHandoffHistoryEntry Entry;
|
||||
Entry.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
|
||||
|
|
@ -7275,6 +7435,10 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
bUsedStrongRetainedMethodDrillRecoveryPosture;
|
||||
Entry.bUsedWeakRetainedMethodDrillRecoveryPosture =
|
||||
bUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
Entry.bUsedReliableTrustedTightStructurePlanHistory =
|
||||
bUsedReliableTrustedTightStructurePlanHistory;
|
||||
Entry.bUsedReliableTrustedBroadStructurePlanHistory =
|
||||
bUsedReliableTrustedBroadStructurePlanHistory;
|
||||
if (!Entry.IsStructurallyValid())
|
||||
{
|
||||
return;
|
||||
|
|
@ -7327,7 +7491,11 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
&& HandoffHistoryEntries.Last().bUsedStrongRetainedMethodDrillRecoveryPosture
|
||||
== Entry.bUsedStrongRetainedMethodDrillRecoveryPosture
|
||||
&& HandoffHistoryEntries.Last().bUsedWeakRetainedMethodDrillRecoveryPosture
|
||||
== Entry.bUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
== Entry.bUsedWeakRetainedMethodDrillRecoveryPosture
|
||||
&& HandoffHistoryEntries.Last().bUsedReliableTrustedTightStructurePlanHistory
|
||||
== Entry.bUsedReliableTrustedTightStructurePlanHistory
|
||||
&& HandoffHistoryEntries.Last().bUsedReliableTrustedBroadStructurePlanHistory
|
||||
== Entry.bUsedReliableTrustedBroadStructurePlanHistory;
|
||||
if (bMatchesLastEntry)
|
||||
{
|
||||
return;
|
||||
|
|
@ -9505,6 +9673,24 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
CachedCoachPanelState.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
CachedCoachPanelState.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore
|
||||
);
|
||||
CoachHandoffRecommendationDetailLine += FString::Printf(
|
||||
TEXT(" | reliable trusted tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"),
|
||||
HandoffHistoryBias.ReliableTrustedTightQueueAcceptedDeltaCount,
|
||||
HandoffHistoryBias.ReliableTrustedTightFollowUpAcceptedDeltaCount,
|
||||
HandoffHistoryBias.ReliableTrustedTightRecommendedAcceptedDeltaCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadQueueAcceptedDeltaCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadFollowUpAcceptedDeltaCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadRecommendedAcceptedDeltaCount
|
||||
);
|
||||
CoachHandoffRecommendationDetailLine += FString::Printf(
|
||||
TEXT(" | reliable trusted tight recommendation q/f/r %d/%d/%d, broad recommendation q/f/r %d/%d/%d"),
|
||||
HandoffHistoryBias.ReliableTrustedTightQueueRecommendationCount,
|
||||
HandoffHistoryBias.ReliableTrustedTightFollowUpRecommendationCount,
|
||||
HandoffHistoryBias.ReliableTrustedTightRecommendedRecommendationCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadQueueRecommendationCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadFollowUpRecommendationCount,
|
||||
HandoffHistoryBias.ReliableTrustedBroadRecommendedRecommendationCount
|
||||
);
|
||||
CoachHandoffRecommendationDetailLine += FString::Printf(
|
||||
TEXT(" | strong posture q/f/r %d/%d/%d, weak posture q/f/r %d/%d/%d"),
|
||||
HandoffHistoryBias.StrongRetainedMethodDrillQueueAcceptedDeltaCount,
|
||||
|
|
@ -9546,6 +9732,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
CoachHandoffRecommendationDetailLine += MethodDrillUpstreamMemoryLine;
|
||||
}
|
||||
}
|
||||
const bool bHandoffRecommendationUsedReliableTrustedTightPlanHistory =
|
||||
bHandoffRecommendationUsedPlanComparisonHistory
|
||||
&& bPlanComparisonPrefersTightContinuation
|
||||
&& bHasReliableTrustedTightPlanComparisonHistory;
|
||||
const bool bHandoffRecommendationUsedReliableTrustedBroadPlanHistory =
|
||||
bHandoffRecommendationUsedPlanComparisonHistory
|
||||
&& bPlanComparisonPrefersBroadRedirect
|
||||
&& bHasReliableTrustedBroadPlanComparisonHistory;
|
||||
RecordCoachHandoffHistorySnapshot(
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind(
|
||||
HandoffRecommendationKind),
|
||||
|
|
@ -9560,7 +9754,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
bHandoffRecommendationUsedDeferredFirstSuppressionSignal,
|
||||
bHandoffRecommendationUsedMethodDrillWeighting,
|
||||
bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture
|
||||
bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bHandoffRecommendationUsedReliableTrustedTightPlanHistory,
|
||||
bHandoffRecommendationUsedReliableTrustedBroadPlanHistory
|
||||
);
|
||||
FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty()
|
||||
? TEXT("Start Queue")
|
||||
|
|
@ -9593,7 +9789,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
const FString HandoffHistoryStatusLine =
|
||||
SelectedHandoffHistoryEntry != nullptr
|
||||
? FString::Printf(
|
||||
TEXT("Handoff history: %d entries | selected %d/%d | Recommendation: %s | Stance: %s | Recorded: %s"),
|
||||
TEXT("Handoff history: %d entries | selected %d/%d | Recommendation: %s | Stance: %s | Reliable plan: %s | Recorded: %s"),
|
||||
HandoffHistoryEntries.Num(),
|
||||
SelectedHandoffHistoryIndex + 1,
|
||||
HandoffHistoryEntries.Num(),
|
||||
|
|
@ -9603,13 +9799,18 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none")),
|
||||
*SelectedHandoffHistoryEntry->RecordedAtUtc
|
||||
)
|
||||
: TEXT("Handoff history: no retained handoff-pattern shifts recorded yet.");
|
||||
const FString HandoffHistoryDetailLine =
|
||||
SelectedHandoffHistoryEntry != nullptr
|
||||
? FString::Printf(
|
||||
TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | deferred-first suppression recommendation used: %s | drill weighting used: %s | retained posture: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"),
|
||||
TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | deferred-first suppression recommendation used: %s | drill weighting used: %s | retained posture: %s | reliable trusted plan: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"),
|
||||
SelectedHandoffHistoryEntry->AcceptedQueuedHandoffCount,
|
||||
SelectedHandoffHistoryEntry->AcceptedFollowUpHandoffCount,
|
||||
SelectedHandoffHistoryEntry->AcceptedRecommendedHandoffCount,
|
||||
|
|
@ -9624,6 +9825,11 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none")),
|
||||
SelectedHandoffHistoryEntry->QueueSourceLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: *SelectedHandoffHistoryEntry->QueueSourceLabel,
|
||||
|
|
@ -9856,31 +10062,36 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
>= MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias
|
||||
? TEXT(" | Retained drill-recovery packet history is reinforcing launch recovery.")
|
||||
: TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery."))
|
||||
: (QueueRecoveryWeighting.bHasReliableTrustedPlanOutcomeSignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Prior reliable trusted tight plan recovery outcomes are reinforcing launch recovery.")
|
||||
: TEXT(" | Prior reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery."))
|
||||
: (bQueueRecoveryUsedPlanComparisonHistory
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? (bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery."))
|
||||
: (bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery.")))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillMemorySignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.")
|
||||
: TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery."))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.")
|
||||
: TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery."))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillSignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.")
|
||||
: TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds."))
|
||||
: TEXT("")))));
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? (bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery."))
|
||||
: (bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery.")))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillMemorySignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.")
|
||||
: TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery."))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.")
|
||||
: TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery."))
|
||||
: (QueueRecoveryWeighting.bHasMethodDrillSignal
|
||||
? (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
|
||||
? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.")
|
||||
: TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds."))
|
||||
: TEXT(""))))));
|
||||
const bool bHasQueueRecoveryFriction =
|
||||
CachedCoachSchedulePolicySummary.bHasBlockedFollowUpDeferrals
|
||||
|| CachedCoachSchedulePolicySummary.bHasArchiveAwareDeferrals
|
||||
|
|
@ -9939,7 +10150,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
: *QueueDeferredFirstSuppressionSignal->Detail)
|
||||
: TEXT("");
|
||||
FString QueueRecoveryDetailLine = FString::Printf(
|
||||
TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"),
|
||||
TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | reliable trusted outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"),
|
||||
CachedCoachQueueExecutionSummary.DeferredEventCount,
|
||||
CachedCoachQueueExecutionSummary.PromotedEventCount,
|
||||
CachedCoachQueueExecutionSummary.ManualRescheduleEventCount,
|
||||
|
|
@ -9968,6 +10179,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
QueueRecoveryWeighting.MethodDrillLaunchReducedCount,
|
||||
QueueRecoveryWeighting.MethodDrillPromoteCount,
|
||||
QueueRecoveryWeighting.MethodDrillLaunchCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteReducedCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchReducedCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchCount,
|
||||
QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchReducedCount,
|
||||
QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchCount,
|
||||
QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteReducedCount,
|
||||
|
|
@ -10124,7 +10339,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
const FString QueueRecoveryOutcomeDetailLine = !bHasQueueRecoveryOutcome || !QueueRecoveryOutcome.IsStructurallyValid()
|
||||
? TEXT("Outcome detail: apply a queue-recovery action to compare before/after pressure, deferred count, blocked follow-up state, and completion-gap state.")
|
||||
: FString::Printf(
|
||||
TEXT("Recorded: %s | Pressure %.2f -> %.2f | Deferred %d -> %d | Blocked follow-up %s -> %s | Outstanding deferred %s -> %s | Completion gap %s -> %s | deferred-first weighted: %s | drill-weighted: %s | packet-structure recovery: %s | retained posture: %s"),
|
||||
TEXT("Recorded: %s | Pressure %.2f -> %.2f | Deferred %d -> %d | Blocked follow-up %s -> %s | Outstanding deferred %s -> %s | Completion gap %s -> %s | deferred-first weighted: %s | drill-weighted: %s | packet-structure recovery: %s | retained posture: %s | reliable trusted plan recovery: %s"),
|
||||
*QueueRecoveryOutcome.RecordedAtUtc,
|
||||
QueueRecoveryOutcome.BeforePressureScore,
|
||||
QueueRecoveryOutcome.AfterPressureScore,
|
||||
|
|
@ -10145,7 +10360,12 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
: TEXT("none")),
|
||||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
QueueRecoveryOutcome.bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture)
|
||||
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery
|
||||
? TEXT("trusted tight continuation")
|
||||
: (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none"))
|
||||
);
|
||||
TArray<int32> MethodDrillRecoveryHistoryIndices;
|
||||
HyperTwistCoachDashboardWidgetInternal::CollectMethodDrillRecoveryOutcomeIndices(
|
||||
|
|
|
|||
|
|
@ -153,6 +153,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryOutcome
|
|||
bool bUsedBroadMethodDrillPacketStructureRecovery = false;
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery = false;
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -193,6 +195,10 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
|
|||
int32 MethodDrillUpstreamWeakCount = 0;
|
||||
int32 ReliableTrustedTightPlanHistoryCount = 0;
|
||||
int32 ReliableTrustedBroadPlanHistoryCount = 0;
|
||||
int32 ReliableTrustedTightPlanLaunchCount = 0;
|
||||
int32 ReliableTrustedTightPlanLaunchReducedCount = 0;
|
||||
int32 ReliableTrustedBroadPlanPromoteCount = 0;
|
||||
int32 ReliableTrustedBroadPlanPromoteReducedCount = 0;
|
||||
int32 ReliableTrustedTightPlanBiasCount = 0;
|
||||
int32 ReliableTrustedBroadPlanBiasCount = 0;
|
||||
float PromoteAveragePressureDelta = 0.0f;
|
||||
|
|
@ -208,6 +214,7 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
|
|||
bool bHasMethodDrillOutcomeSignal = false;
|
||||
bool bHasMethodDrillMemorySignal = false;
|
||||
bool bHasReliableTrustedPlanSignal = false;
|
||||
bool bHasReliableTrustedPlanOutcomeSignal = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -299,6 +306,8 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry
|
|||
bool bUsedMethodDrillWeighting = false;
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedReliableTrustedTightStructurePlanHistory = false;
|
||||
bool bUsedReliableTrustedBroadStructurePlanHistory = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -1429,6 +1438,8 @@ private:
|
|||
bool bUsedBroadMethodDrillPacketStructureRecovery,
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery,
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery,
|
||||
bool bSucceeded
|
||||
);
|
||||
void RecordCoachHandoffHistorySnapshot(
|
||||
|
|
@ -1444,7 +1455,9 @@ private:
|
|||
bool bUsedDeferredFirstSuppressionSignal,
|
||||
bool bUsedMethodDrillWeighting,
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedReliableTrustedTightStructurePlanHistory,
|
||||
bool bUsedReliableTrustedBroadStructurePlanHistory
|
||||
);
|
||||
void RecordQueueSuppressionSnapshot();
|
||||
void RecordClosureRecoverySnapshot();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue