Added counters for PBQP reduction rules.
llvm-svn: 112807
This commit is contained in:
		
							parent
							
								
									489613f1e5
								
							
						
					
					
						commit
						b59620f519
					
				| 
						 | 
					@ -174,8 +174,11 @@ namespace PBQP {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      while (!finished) {
 | 
					      while (!finished) {
 | 
				
			||||||
        if (!optimalReduce())
 | 
					        if (!optimalReduce())
 | 
				
			||||||
          if (!impl().heuristicReduce())
 | 
					          if (impl().heuristicReduce()) {
 | 
				
			||||||
 | 
					            getSolver().recordRN();
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
            finished = true;
 | 
					            finished = true;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -226,6 +226,8 @@ namespace PBQP {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Nothing to do. Just push the node onto the reduction stack.
 | 
					      // Nothing to do. Just push the node onto the reduction stack.
 | 
				
			||||||
      pushToStack(nItr);
 | 
					      pushToStack(nItr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      s.recordR0();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// \brief Apply rule R1.
 | 
					    /// \brief Apply rule R1.
 | 
				
			||||||
| 
						 | 
					@ -274,6 +276,7 @@ namespace PBQP {
 | 
				
			||||||
      assert(nd.getSolverDegree() == 0 &&
 | 
					      assert(nd.getSolverDegree() == 0 &&
 | 
				
			||||||
             "Degree 1 with edge removed should be 0.");
 | 
					             "Degree 1 with edge removed should be 0.");
 | 
				
			||||||
      pushToStack(xnItr);
 | 
					      pushToStack(xnItr);
 | 
				
			||||||
 | 
					      s.recordR1();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// \brief Apply rule R2.
 | 
					    /// \brief Apply rule R2.
 | 
				
			||||||
| 
						 | 
					@ -378,8 +381,14 @@ namespace PBQP {
 | 
				
			||||||
      removeSolverEdge(zxeItr);
 | 
					      removeSolverEdge(zxeItr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      pushToStack(xnItr);
 | 
					      pushToStack(xnItr);
 | 
				
			||||||
 | 
					      s.recordR2();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Record an application of the RN rule.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// For use by the HeuristicBase.
 | 
				
			||||||
 | 
					    void recordRN() { s.recordRN(); } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NodeData& getSolverNodeData(Graph::NodeItr nItr) {
 | 
					    NodeData& getSolverNodeData(Graph::NodeItr nItr) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,15 +26,46 @@ namespace PBQP {
 | 
				
			||||||
  /// To get the selection for each node in the problem use the getSelection method.
 | 
					  /// To get the selection for each node in the problem use the getSelection method.
 | 
				
			||||||
  class Solution {
 | 
					  class Solution {
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    typedef std::map<Graph::NodeItr, unsigned, NodeItrComparator> SelectionsMap;
 | 
					    typedef std::map<Graph::NodeItr, unsigned, NodeItrComparator> SelectionsMap;
 | 
				
			||||||
    SelectionsMap selections;
 | 
					    SelectionsMap selections;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    unsigned r0Reductions, r1Reductions, r2Reductions, rNReductions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// \brief Number of nodes for which selections have been made.
 | 
					    /// \brief Number of nodes for which selections have been made.
 | 
				
			||||||
    /// @return Number of nodes for which selections have been made.
 | 
					    /// @return Number of nodes for which selections have been made.
 | 
				
			||||||
    unsigned numNodes() const { return selections.size(); }
 | 
					    unsigned numNodes() const { return selections.size(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Records a reduction via the R0 rule. Should be called from the
 | 
				
			||||||
 | 
					    ///        solver only.
 | 
				
			||||||
 | 
					    void recordR0() { ++r0Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Returns the number of R0 reductions applied to solve the problem.
 | 
				
			||||||
 | 
					    unsigned numR0Reductions() const { return r0Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Records a reduction via the R1 rule. Should be called from the
 | 
				
			||||||
 | 
					    ///        solver only.
 | 
				
			||||||
 | 
					    void recordR1() { ++r1Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Returns the number of R1 reductions applied to solve the problem.
 | 
				
			||||||
 | 
					    unsigned numR1Reductions() const { return r1Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Records a reduction via the R2 rule. Should be called from the
 | 
				
			||||||
 | 
					    ///        solver only.
 | 
				
			||||||
 | 
					    void recordR2() { ++r2Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Returns the number of R2 reductions applied to solve the problem.
 | 
				
			||||||
 | 
					    unsigned numR2Reductions() const { return r2Reductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Records a reduction via the RN rule. Should be called from the
 | 
				
			||||||
 | 
					    ///        solver only.
 | 
				
			||||||
 | 
					    void recordRN() { ++ rNReductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// \brief Returns the number of RN reductions applied to solve the problem.
 | 
				
			||||||
 | 
					    unsigned numRNReductions() const { return rNReductions; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// \brief Set the selection for a given node.
 | 
					    /// \brief Set the selection for a given node.
 | 
				
			||||||
    /// @param nItr Node iterator.
 | 
					    /// @param nItr Node iterator.
 | 
				
			||||||
    /// @param selection Selection for nItr.
 | 
					    /// @param selection Selection for nItr.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue