1524{
1528 int nLearnedOld = veci_size(&s->
act_clas);
1529 int * act_clas = veci_begin(&s->
act_clas);
1530 int * pPerm, * pArray, * pSortValues, nCutoffValue;
1531 int i, k, j, Id, Counter, CounterStart, nSelected;
1533
1535 assert( nLearnedOld == Sat_MemEntryNum(pMem, 1) );
1537
1539
1540
1542
1543
1544
1545 pSortValues =
ABC_ALLOC(
int, nLearnedOld );
1547 {
1548 Id = clause_id(c);
1549
1551 pSortValues[Id] = ((7 - Abc_MinInt(c->
lbd, 7)) << 28) | (act_clas[Id] >> 4);
1552 else
1553 pSortValues[Id] = ((7 - Abc_MinInt(c->
lbd, 7)) << 28);
1554 assert( pSortValues[Id] >= 0 );
1555 }
1556
1557
1558 CounterStart = nLearnedOld - (s->
nLearntMax / 20);
1559
1560
1562
1563
1565 assert( pSortValues[pPerm[0]] <= pSortValues[pPerm[nLearnedOld-1]] );
1566 nCutoffValue = pSortValues[pPerm[nLearnedOld-nSelected]];
1568
1569
1570
1571 Counter = j = 0;
1573 {
1575 if ( Counter++ > CounterStart || clause_size(c) < 3 || pSortValues[clause_id(c)] > nCutoffValue || s->
reasons[lit_var(c->
lits[0])] == Sat_MemHand(pMem, i, k) )
1576 act_clas[j++] = act_clas[clause_id(c)];
1577 else
1578 {
1579 c->mark = 1;
1582 }
1583 }
1585 assert( Counter == nLearnedOld );
1588
1589
1590 Counter = Sat_MemCompactLearned( pMem, 0 );
1592
1593
1594 for ( i = 0; i < s->
size; i++ )
1595 {
1597 continue;
1598 if ( clause_is_lit(s->
reasons[i]) )
1599 continue;
1600 if ( !clause_learnt_h(pMem, s->
reasons[i]) )
1601 continue;
1602 c = clause_read( s, s->
reasons[i] );
1605 }
1606
1607
1608 for ( i = 0; i < s->
size*2; i++ )
1609 {
1610 pArray = veci_begin(&s->
wlists[i]);
1611 for ( j = k = 0; k < veci_size(&s->
wlists[i]); k++ )
1612 {
1613 if ( clause_is_lit(pArray[k]) )
1614 pArray[j++] = pArray[k];
1615 else if ( !clause_learnt_h(pMem, pArray[k]) )
1616 pArray[j++] = pArray[k];
1617 else
1618 {
1619 c = clause_read(s, pArray[k]);
1620 if ( !c->mark )
1621 pArray[j++] = clause_id(c);
1622 }
1623 }
1624 veci_resize(&s->
wlists[i],j);
1625 }
1626
1627
1628 Counter = Sat_MemCompactLearned( pMem, 1 );
1630
1631
1632 TimeTotal += Abc_Clock() - clk;
1634 {
1635 Abc_Print(1, "reduceDB: Keeping %7d out of %7d clauses (%5.2f %%) ",
1637 Abc_PrintTime( 1, "Time", TimeTotal );
1638 }
1639}
int * Abc_MergeSortCost(int *pCosts, int nSize)
#define ABC_ALLOC(type, num)
#define Sat_MemForEachLearned(p, c, i, k)
struct Sat_Mem_t_ Sat_Mem_t