137 if ( EstErrRate > 0.5 ) EstErrRate = 0.45;
140 BitsOK = - Log(1.0 - EstErrRate);
190 int j, Blocks,
Extra;
192 Byte *p, *From, *To, *Next;
225 while ( Entry > 127 )
227 Blocks = (Entry >> 7);
228 if ( Blocks > 127 ) Blocks = 127;
229 Entry -= Blocks * 128;
251 for ( p = From ; p < Next ; )
323 Sum += (ValFreq[v] / (
MaxCase+1.0)) *
424 if ( (
RuleIn[r] &= 1) ) Active++;
434 double Remaining, FalsePos=0, NewFalsePos, NewTruePos;
442 while ( Remaining > FalsePos )
456 if ( ! Best )
return;
460 NewFalsePos = NewTruePos = 0;
463 for( j =
List[0] ; j ; j-- )
488 Remaining -= NewTruePos;
489 FalsePos += NewFalsePos;
494 for( j =
List[0] ; j ; j-- )
527 (THEORYFRAC *
Max(0, RuleBits -
LogFact[NR]) +
545 RuleNo r, RuleCount=0, OriginalCount, Toggle, LastToggle=0;
551 int LastCost=1E9, CurrentCost, AltCost, NewCost;
562 OriginalCount = RuleCount;
565 Verbosity(1, fprintf(
Of,
"\n"))
575 CurrentCost = NewCost =
MessageLength(RuleCount, RuleBits, Errs);
578 fprintf(
Of,
"\t%d rules, %.1f errs, cost=%.1f bits\n",
579 RuleCount, Errs, CurrentCost/100.0);
581 if ( ! DeleteOnly && CurrentCost > LastCost )
583 fprintf(
Of,
"ERROR %g %g\n",
584 CurrentCost/1000.0, LastCost/100.0);
588 Toggle = OutCount = 0;
592 if ( r == LastToggle )
continue;
602 if ( Errs < 1E-3 || DeleteOnly )
continue;
610 if ( ! (OutCount++ % 5) ) fprintf(
Of,
"\n\t\t");
611 fprintf(
Of,
"%d<%g=%.1f> ",
612 r,
DeltaErrs[r], (AltCost - CurrentCost)/100.0))
614 if ( AltCost < NewCost ||
615 AltCost == NewCost &&
RuleIn[r] )
622 if ( ! DeleteOnly && NewCost > CurrentCost )
625 Verbosity(1, fprintf(
Of,
"(start delete mode)\n"))
628 Verbosity(2, fprintf(
Of,
"\n"))
630 if ( ! Toggle || DeleteOnly && RuleCount <= OriginalCount )
break;
633 fprintf(
Of,
"\t%s rule %d/%d (errs=%.1f, cost=%.1f bits)\n",
634 (
RuleIn[Toggle] ?
"Delete" :
"Add" ),
635 Rule[Toggle]->TNo,
Rule[Toggle]->RNo,
636 Errs +
DeltaErrs[Toggle], NewCost/100.0))
641 for ( j =
List[0] ; j ; j-- )
670 RuleBits -=
Bits[Toggle];
676 RuleBits +=
Bits[Toggle];
684 LastCost = CurrentCost;
712 if ( !
RuleIn[r] )
continue;
718 for ( j =
List[0] ; j ; j-- )
752 if ( ! First || V >
TotVote[i][First] )
758 if ( ! Second || V >
TotVote[i][Second] )
778 #define Prefer(d,c1,c2) ((d) > 0 || (d) == 0 && c1 < c2)
783 ClassNo RealClass, Top, Alt, Rhs;
800 r += ((*p++) & 127) * 128;
817 (
NCost[Alt][RealClass] -
NCost[Top][RealClass]) * Delta;
827 (
NCost[Rhs][RealClass] -
NCost[Top][RealClass]) * Delta;
882 int *Bytes, d, NAtts, j, b;
916 ClearBits(Bytes[Att], PossibleValues[Att]);
919 if ( ! NAtts )
continue;
924 for ( j =
List[0] ; j ; j-- )
946 R->
Lhs[d]->
Subset[b] &= PossibleValues[Att][b];
978 double *UncoveredWeight, TotUncovered=1E-3;
988 if ( !
RuleIn[r] )
continue;
991 for ( j =
List[0] ; j ; j-- )
1010 Verbosity(1, fprintf(
Of,
"\n Weights of uncovered cases:\n"));
1014 Verbosity(1, fprintf(
Of,
"\t%s (%.2f): %.1f\n",
1016 UncoveredWeight[c]));
1018 ClassSum[c] = (UncoveredWeight[c] + 1) / (TotUncovered + 2.0) +
1024 Free(UncoveredWeight);
1064 RuleNo r, *Drop, NDrop=0, NewNRules=0, Toggle;
1069 Verbosity(1, fprintf(
Of,
"\n Determining rule utility\n"))
1077 Toggle = OutCount = 0;
1081 if ( !
RuleIn[r] )
continue;
1084 if ( ! (OutCount++ %10 ) ) fprintf(
Of,
"\n\t\t");
1095 Verbosity(2, fprintf(
Of,
"\n"))
1097 if ( ! Toggle )
break;
1100 fprintf(
Of,
"\tDelete rule %d/%d (errs up %.1f)\n",
1101 Rule[Toggle]->TNo,
Rule[Toggle]->RNo,
1107 for ( j =
List[0] ; j ; j-- )
1124 Drop[NDrop++] = Toggle;
1132 while ( --NDrop >= 0 )
1135 RuleIn[Drop[NDrop]] =
true;
1141 if ( Drop[r] == NewNRules ) Drop[r] = Drop[NDrop];
1162 RuleNo r, nr, NewNRules=0;
1182 if ( nr != NewNRules )