Ejemplo n.º 1
0
	std::vector<int> solve()
	{
		auto flips = 0;
	    auto start = std::clock();

	    auto state = initializer_(clauses_, variable_count_);

	    while(!sls::util::is_interrupted() && state.unsat().size() > 0)
	    {
	    	
	    	
	        state.before_pick(flips);

	        selector_->is_applicable(state);
	        auto pick = selector_->select(state);

	        ++flips;
	        state.after_pick(flips, pick);

			transitor_(state, pick);

	        state.flush();
	    }


	    auto end = std::clock();
	    auto time = static_cast<double>(end - start) / static_cast<double>(CLOCKS_PER_SEC);

	    std::cout 
            << "c " 
            << variable_count_ << "," 
            << clauses_.size() << "," 
            << flips << "," 
            << (!sls::util::is_interrupted() ? time : -1.0) << "," 
            << static_cast<int>(static_cast<double>(flips)/time) << std::endl;

	    std::vector<int> model(variable_count_);
	    for(auto i = 0; i < variable_count_; ++i)
	    	model[i] = (i + 1) * (static_cast<int>(state.truth(sat_type::make_variable(i + 1))) * 2 - 1);

	    return model;
	}
Ejemplo n.º 2
0
  T *Allocate() {
    Descriptor *descriptor;

    ScopedLock lock(lock_);

    if (free_objects_.size() == 0) {
      descriptor = new Descriptor();
      descriptor->data = new T();
      all_objects_.insert(
          PointerToDescriptorMap::value_type(descriptor->data, descriptor));
    } else {
      DescriptorSet::iterator first = free_objects_.begin();
      descriptor = *first;
      free_objects_.erase(first);

      // TODO: Should we initialize it when returning to the pool instead?
      initializer_(descriptor->data);
    }

    descriptor->used = true;
    return descriptor->data;
  }