BitContradiction filtering improvements.
This commit is contained in:
1 parent
9ed467b4b0
commit
411310cf40
2 files changed
+46
-39
No files matched your search
@@ -144,8 +144,8 @@ internal sealed class PrivateWorkSet
|
||||
internal static class BitContradictionSolverWithAMultiplier
|
||||
{
|
||||
#if DETAILED_LOG || WITH_PRUNE_STATS
|
||||
private const ulong DebugTargetP = 138000953UL;
|
||||
private static readonly BigInteger DebugTargetK = new(((337429718205079UL - 1UL) >> 1) / DebugTargetP);
|
||||
private const ulong DebugTargetP = 138001793UL;
|
||||
private static readonly BigInteger DebugTargetK = new(((1976939441553367UL - 1UL) >> 1) / DebugTargetP);
|
||||
private static readonly BigInteger DebugTargetQ = ((DebugTargetK * DebugTargetP) << 1) + BigInteger.One;
|
||||
// private const ulong DebugTargetQ = 1209708008767UL;
|
||||
|
||||
@@ -2613,7 +2613,7 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.ZeroDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@@ -2640,8 +2640,8 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.DominanceReached10AndStayedAbove5;
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@@ -2653,9 +2653,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance1011121314;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2664,9 +2664,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
(totalCarry67Count > totalCarry8Count && zeroCount < first10 && lowestCarryAfter10 >= 3 && (totalCarry7Count > totalCarry8Count || (totalCarry7Count & 1) == 1)))
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance67ThenZeroDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2677,9 +2677,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance15161718Drop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2688,9 +2688,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
(totalCarry10Count >= totalCarry9Count || totalCarry8Count >= totalCarry9Count || totalCarry10Count < 190))
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance10AndMoreDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2714,9 +2714,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance10AndMoreDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2756,18 +2756,18 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance10AndMoreDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
if (totalCarry7Count + totalCarry8Count > totalCarry9Count + totalCarry10Count && totalCarry11Count > 100)
|
||||
{
|
||||
pruneReason = CarryDropPruneReason.Dominance10AndMoreDrop;
|
||||
#if WITH_PRUNE_STATS
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
// #if WITH_PRUNE_STATS
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// #endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2790,7 +2790,7 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
AnsiConsole.MarkupLine($"[MediumOrchid1_1]{nameof(CarryDropPruneReason.HighDensityWithShortLowStreaks)}[/] prune reason for [DodgerBlue1]p[/]=[Gray100 Bold]{pLong}[/], [DodgerBlue1]q[/]=[Gray100 Bold]{qExact}[/]: [DarkOrange]totalCarryAbove10[/]=[Yellow]{totalCarryAbove10}[/], [DarkOrange]shortestStreakBelow10[/]=[Yellow]{shortestStreakBelow10}[/], [DarkOrange]lastStreakBelow10[/]=[Yellow]{lastStreakBelow10}[/], [DarkOrange]first10[/]=[Yellow]{first10}[/], [DarkOrange]totalCarryBelow10[/]=[Yellow]{totalCarryBelow10}[/], [DarkOrange]longestStreakBelow10[/]=[Yellow]{longestStreakBelow10}[/], [DarkOrange]totalCarry11Count[/]=[Yellow]{totalCarry11Count}[/]");
|
||||
}
|
||||
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@@ -2825,7 +2825,7 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
(
|
||||
lastStreakBelow10 >= 5 ||
|
||||
lastStreakBelow10 == 0 ||
|
||||
(lastStreakBelow10 < 5 && totalTransitionsOver10 > 100) ||
|
||||
(lastStreakBelow10 < 5 && totalTransitionsOver10 > 90) ||
|
||||
(lastStreakBelow10 < 5 && totalCarryBelow10 < 186) ||
|
||||
(totalTransitionsOver10 < 100)
|
||||
)
|
||||
@@ -2842,20 +2842,23 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
(lastStreakBelow10 <= 28 && lastStreakBelow10 > 0) ||
|
||||
(longestStreakBelow10 < 49 && first10 < 32) ||
|
||||
(totalTransitionsOver10 > 63 && longestStreakBelow10 > 40) ||
|
||||
(totalCarryBelow10 < 300 && totalCarry2Count < 8 && lastStreakBelow10 > 0) ||
|
||||
(totalTransitionsOver10 > 63 && first10 < 32) ||
|
||||
(totalTransitionsOver10 > 80 && totalCarryBelow10 > totalCarry10Count) ||
|
||||
(totalTransitionsOver10 > 100 && totalCarry10Count > totalCarryBelow10) ||
|
||||
(totalCarryBelow10 < 300 && totalCarry2Count < 8 && (lastStreakBelow10 > 0 || totalCarryBelow10 > totalCarry11Count)) ||
|
||||
(totalTransitionsOver10 > 44 && first10 < 32) ||
|
||||
(totalTransitionsOver10 > 44 && totalCarryBelow10 > totalCarry10Count) ||
|
||||
(totalTransitionsOver10 > 44 && totalCarry10Count >= totalCarryBelow10) ||
|
||||
(totalCarry10Count > totalCarryBelow10 && totalCarry11Count > 200)
|
||||
)
|
||||
) ||
|
||||
(
|
||||
totalTransitionsOver10 <= 35 &&
|
||||
(
|
||||
longestStreakBelow10 < 31 ||
|
||||
(longestStreakBelow10 < 31 && totalCarryBelow10 > 62) ||
|
||||
longestStreakBelow10 > 40 ||
|
||||
(longestStreakBelow10 > 0 && longestStreakBelow10 < 20) ||
|
||||
(longestStreakBelow10 > 30 && first10 < 32) ||
|
||||
zeroCount > 10
|
||||
) &&
|
||||
zeroCount > 4
|
||||
(zeroCount > 4 || first10 < 32)
|
||||
)
|
||||
)
|
||||
) ||
|
||||
@@ -2885,7 +2888,7 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
AnsiConsole.MarkupLine($"[MediumOrchid1_1]{nameof(CarryDropPruneReason.DominanceReached10AndStayedAbove5)}[/] prune reason for [DodgerBlue1]p[/]=[Gray100 Bold]{pLong}[/], [DodgerBlue1]q[/]=[Gray100 Bold]{qExact}[/]: [DarkOrange]reached5[/]=[Yellow]{reached5}[/], [DarkOrange]totalTransitionsOver10[/]=[Yellow]{totalTransitionsOver10}[/], [DarkOrange]lastStreakBelow10[/]=[Yellow]{lastStreakBelow10}[/], [DarkOrange]longestStreakBelow10[/]=[Yellow]{longestStreakBelow10}[/], [DarkOrange]zeroCount[/]=[Yellow]{zeroCount}[/], [DarkOrange]first10[/]=[Yellow]{first10}[/], [DarkOrange]totalCarryBelow10[/]=[Yellow]{totalCarryBelow10}[/], [DarkOrange]totalCarry2[/]=[Yellow]{totalCarry2Count}[/], [DarkOrange]totalCarry10[/]=[Yellow]{totalCarry10Count}[/], [DarkOrange]totalCarry11[/]=[Yellow]{totalCarry11Count}[/]{Environment.NewLine}");
|
||||
}
|
||||
|
||||
TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
// TraceCarryDropHeuristicPrune(pLong, qExact, pruneReason, reached10, reachedBelow5, reached5, zeroCount);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@@ -3128,13 +3131,15 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
reason = ContradictionReason.ParityUnreachable;
|
||||
#endif
|
||||
#if WITH_PRUNE_STATS
|
||||
if (pLong == 138000953 && qExact.Equals(_testCase))
|
||||
{
|
||||
AnsiConsole.MarkupLine($"Validating heuristic prune: p={pLong}, q={qExact}, reason={carryDropPruneReason}");
|
||||
}
|
||||
// if (pLong == 138000953 && qExact.Equals(_testCase))
|
||||
// {
|
||||
// AnsiConsole.MarkupLine($"Validating heuristic prune: p={pLong}, q={qExact}, reason={carryDropPruneReason}");
|
||||
// }
|
||||
|
||||
#endif
|
||||
#if WITH_PRUNE_VALIDATION
|
||||
ValidateHeuristicPruneAgainstPowmod2OrThrow(qExact, pLong, $"CarryDropHeuristic:{carryDropPruneReason}");
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
#if false
|
||||
@@ -3426,8 +3431,9 @@ internal static class BitContradictionSolverWithAMultiplier
|
||||
#if WITH_PRUNE_STATS
|
||||
IncrementPruneCounter(ref _prunedWithTryPropagateCarry1);
|
||||
#endif
|
||||
#if WITH_PRUNE_VALIDATION
|
||||
ValidateHeuristicPruneAgainstPowmod2OrThrow(qExact, pLong, "TryPropagateCarry1");
|
||||
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<!-- <DefineConstants>$(DefineConstants);SELF_TEST</DefineConstants> -->
|
||||
<!-- <DefineConstants>$(DefineConstants);EXPORT_STAGE</DefineConstants> -->
|
||||
<DefineConstants>$(DefineConstants);WITH_PRUNE_STATS</DefineConstants>
|
||||
<DefineConstants>$(DefineConstants);WITH_PRUNE_VALIDATION</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Reference in new issue
Block a user