int init_lookahead_procedure() { #ifndef LONG_LOOK forced_literals = 0; #endif lastChanged = 0; currentTimeStamp = 2; /* #ifdef COMPLEXDIFF #ifdef EQ if( !non_tautological_equivalences && !kSAT_flag ) ComputeDiffWeights(); #else ComputeDiffWeights(); #endif #endif */ #ifdef PLOT sum_plot = 0; count_plot = 0; #endif #ifdef INTELLOOK if( treebased_lookahead() == UNSAT ) return UNSAT; #else tree_elements = 2 * lookaheadArrayLength; #endif #ifdef DL_DECREASE DL_decrease = pow( DL_DECREASE, 1.0 / ((double) tree_elements ) ); #endif return SAT; }
int tree_lookahead() { int i, _forced_literals, _hyper_bins; struct treeNode _treeNode, *_treeArray; forced_literals = 0; hyper_bins = 0; lastChanged = 0; init_lookahead_procedure(); if( treebased_lookahead() == UNSAT ) return UNSAT; #ifdef ITERATE_LOOKAHEAD do { _forced_literals = forced_literals; _hyper_bins = hyper_bins; if( depth == 0 ) { // for( i = 1; i <= nrofvars; i++ ) { hyperTRD[ i ] = 0; hyperTRD[ -i ] = 0; } // transitive_red( ); // transitive_reduction( ); // clean_bImp(); lastChanged = 0; } #endif _treeArray = treeArray; for( i = tree_elements-1; i >= 0; i-- ) { _treeNode = *(_treeArray++); if( _treeNode.literal == lastChanged ) { if( depth == 0 ) printf("c found %i NHBRs\n", hyper_bins ); return SAT; } currentTimeStamp += _treeNode.gap; if( currentTimeStamp >= LOOK_MAX ) { currentTimeStamp -= _treeNode.gap; // is dit nodig? return SAT; } if( treelookvar(_treeNode.literal) == UNSAT ) { if( depth == 0 ) printf("c found %i NHBRs\n", hyper_bins ); return UNSAT; } currentTimeStamp -= _treeNode.gap; if( forced_literals > _forced_literals ) { if( IS_FIXED( _treeNode.literal ) && ( Rank[NR(_treeNode.literal)] < Rank_trigger) ) { Rank_trigger = Rank[NR(_treeNode.literal)]; printf("c forced var with Rank %i\n", Rank_trigger ); } _forced_literals = forced_literals; lastChanged = _treeNode.literal; } if( (depth == 0) && (hyper_bins > _hyper_bins) ) { _hyper_bins = hyper_bins; lastChanged = _treeNode.literal; } } #ifdef ITERATE_LOOKAHEAD currentTimeStamp += 2 * tree_elements; if( (depth == 0) && (lastChanged != 0) ) { if( treebased_lookahead() == UNSAT ) return UNSAT; } } while( lastChanged != 0 ); #endif if( depth == 0 ) printf("c found %i NHBRs\n", hyper_bins ); return SAT; }