summaryrefslogtreecommitdiff
path: root/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp')
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp228
1 files changed, 0 insertions, 228 deletions
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp b/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
deleted file mode 100644
index 19de7c971..000000000
--- a/cryptominisat5/cryptominisat-5.6.3/src/subsumeimplicit.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/******************************************
-Copyright (c) 2016, Mate Soos
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-***********************************************/
-
-#include "subsumeimplicit.h"
-#include "clausecleaner.h"
-#include "time_mem.h"
-#include "solver.h"
-#include "watchalgos.h"
-#include "clauseallocator.h"
-#include "sqlstats.h"
-
-#include <cmath>
-#include <iomanip>
-using std::cout;
-using std::endl;
-using namespace CMSat;
-
-SubsumeImplicit::SubsumeImplicit(Solver* _solver) :
- solver(_solver)
-{
-}
-
-void SubsumeImplicit::try_subsume_bin(
- const Lit lit
- , Watched* i
- , Watched*& j
- , int64_t *timeAvail
- , TouchList* touched
-) {
- //Subsume bin with bin
- if (i->lit2() == lastLit2) {
- //The sorting algorithm prefers irred to red, so it is
- //impossible to have irred before red
- assert(!(i->red() == false && lastRed == true));
-
- runStats.remBins++;
- assert(i->lit2().var() != lit.var());
- *timeAvail -= 30;
- *timeAvail -= solver->watches[i->lit2()].size();
- removeWBin(solver->watches, i->lit2(), lit, i->red());
- if (touched) {
- touched->touch(i->lit2());
- }
- if (i->red()) {
- solver->binTri.redBins--;
- } else {
- solver->binTri.irredBins--;
- }
- (*solver->drat) << del << lit << i->lit2() << fin;
-
- return;
- } else {
- lastBin = j;
- lastLit2 = i->lit2();
- lastRed = i->red();
- *j++ = *i;
- }
-}
-
-uint32_t SubsumeImplicit::subsume_at_watch(const uint32_t at,
- int64_t* timeAvail,
- TouchList* touched)
-{
- runStats.numWatchesLooked++;
- const Lit lit = Lit::toLit(at);
- watch_subarray ws = solver->watches[lit];
-
- if (ws.size() > 1) {
- *timeAvail -= (int64_t)(ws.size()*std::ceil(std::log((double)ws.size())) + 20);
- std::sort(ws.begin(), ws.end(), WatchSorterBinTriLong());
- }
- /*cout << "---> Before" << endl;
- print_watch_list(ws, lit);*/
-
- Watched* i = ws.begin();
- Watched* j = i;
- clear();
-
- for (Watched* end = ws.end(); i != end; i++) {
- if (*timeAvail < 0) {
- *j++ = *i;
- continue;
- }
-
- switch(i->getType()) {
- case CMSat::watch_clause_t:
- *j++ = *i;
- break;
-
- case CMSat::watch_binary_t:
- try_subsume_bin(lit, i, j, timeAvail, touched);
- break;
-
- default:
- assert(false);
- break;
- }
- }
- ws.shrink(i-j);
- return i-j;
-}
-
-void SubsumeImplicit::subsume_implicit(const bool check_stats)
-{
- assert(solver->okay());
- const double myTime = cpuTime();
- const uint64_t orig_timeAvailable =
- 1000LL*1000LL*solver->conf.subsume_implicit_time_limitM
- *solver->conf.global_timeout_multiplier;
- timeAvailable = orig_timeAvailable;
- runStats.clear();
-
- //For randomization, we must have at least 1
- if (solver->watches.size() == 0) {
- return;
- }
-
- //Randomize starting point
- const size_t rnd_start = solver->mtrand.randInt(solver->watches.size()-1);
- size_t numDone = 0;
- for (;numDone < solver->watches.size() && timeAvailable > 0 && !solver->must_interrupt_asap()
- ;numDone++
- ) {
- const size_t at = (rnd_start + numDone) % solver->watches.size();
- subsume_at_watch(at, &timeAvailable);
- }
-
- const double time_used = cpuTime() - myTime;
- const bool time_out = (timeAvailable <= 0);
- const double time_remain = float_div(timeAvailable, orig_timeAvailable);
- runStats.numCalled++;
- runStats.time_used += time_used;
- runStats.time_out += time_out;
- if (solver->conf.verbosity) {
- runStats.print_short(solver);
- }
- if (solver->sqlStats) {
- solver->sqlStats->time_passed(
- solver
- , "subsume implicit"
- , time_used
- , time_out
- , time_remain
- );
- }
-
- if (check_stats) {
- #ifdef DEBUG_IMPLICIT_STATS
- solver->check_stats();
- #endif
- }
-
- globalStats += runStats;
-}
-
-SubsumeImplicit::Stats SubsumeImplicit::Stats::operator+=(const SubsumeImplicit::Stats& other)
-{
- numCalled+= other.numCalled;
- time_out += other.time_out;
- time_used += other.time_used;
- remBins += other.remBins;
- numWatchesLooked += other.numWatchesLooked;
-
- return *this;
-}
-
-void SubsumeImplicit::Stats::print_short(const Solver* _solver) const
-{
- cout
- << "c [impl sub]"
- << " bin: " << remBins
- << _solver->conf.print_times(time_used, time_out)
- << " w-visit: " << numWatchesLooked
- << endl;
-}
-
-void SubsumeImplicit::Stats::print() const
-{
- cout << "c -------- IMPLICIT SUB STATS --------" << endl;
- print_stats_line("c time"
- , time_used
- , float_div(time_used, numCalled)
- , "per call"
- );
-
- print_stats_line("c timed out"
- , time_out
- , stats_line_percent(time_out, numCalled)
- , "% of calls"
- );
-
- print_stats_line("c rem bins"
- , remBins
- );
- cout << "c -------- IMPLICIT SUB STATS END --------" << endl;
-}
-
-SubsumeImplicit::Stats SubsumeImplicit::get_stats() const
-{
- return globalStats;
-}
-
-double SubsumeImplicit::mem_used() const
-{
- double mem = sizeof(SubsumeImplicit);
- mem += tmplits.size()*sizeof(Lit);
-
- return mem;
-}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback