コード例 #1
0
ファイル: lookahead.c プロジェクト: xxyzzzq/open-wbo
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;
}
コード例 #2
0
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;
}