ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
learn.c File Reference
#include "learn.h"
#include "backtrack.h"
#include "inline.h"
#include "reluctant.h"
#include <inttypes.h>
Include dependency graph for learn.c:

Go to the source code of this file.

Functions

unsigned kissat_determine_new_level (kissat *solver, unsigned jump)
 
void kissat_update_learned (kissat *solver, unsigned glue, unsigned size)
 
void kissat_learn_clause (kissat *solver)
 

Function Documentation

◆ kissat_determine_new_level()

unsigned kissat_determine_new_level ( kissat * solver,
unsigned jump )

Definition at line 18 of file learn.c.

18 {
19 KISSAT_assert (solver->level);
20 const unsigned back = solver->level - 1;
21 KISSAT_assert (jump <= back);
22
23 const unsigned delta = back - jump;
24 const unsigned limit = backjump_limit (solver);
25
26 unsigned res;
27
28 if (!delta) {
29 res = jump;
30 LOG ("using identical backtrack and jump level %u", res);
31 } else if (delta > limit) {
32 res = back;
33 LOG ("backjumping over %u levels (%u - %u) considered inefficient",
34 delta, back, jump);
35 LOG ("backtracking chronologically to backtrack level %u", res);
36 INC (chronological);
37 } else {
38 res = jump;
39 LOG ("backjumping over %u levels (%u - %u) considered efficient", delta,
40 back, jump);
41 LOG ("backjumping non-chronologically to jump level %u", res);
42 }
43 return res;
44}
#define INC(NAME)
#define LOG(...)
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211

◆ kissat_learn_clause()

void kissat_learn_clause ( kissat * solver)

Definition at line 192 of file learn.c.

192 {
193 const unsigned not_uip = PEEK_STACK (solver->clause, 0);
194 const unsigned size = SIZE_STACK (solver->clause);
195 const size_t glue = SIZE_STACK (solver->levels);
196 KISSAT_assert (glue <= UINT_MAX);
197 if (!solver->probing)
198 kissat_update_learned (solver, glue, size);
199 KISSAT_assert (size > 0);
201 if (size == 1)
202 learn_unit (solver, not_uip);
203 else if (size == 2)
204 learn_binary (solver, not_uip);
205 else
206 ref = learn_reference (solver, not_uip, glue);
207 if (GET_OPTION (eagersubsume)) {
208 eagerly_subsume_last_learned (solver);
209 if (ref != INVALID_REF)
210 insert_last_learned (solver, ref);
211 }
212}
#define SIZE_STACK(S)
Definition stack.h:19
#define PEEK_STACK(S, N)
Definition stack.h:29
void kissat_update_learned(kissat *solver, unsigned glue, unsigned size)
Definition learn.c:120
unsigned long long size
Definition giaNewBdd.h:39
unsigned short ref
Definition giaNewBdd.h:38
#define GET_OPTION(N)
Definition options.h:295
#define INVALID_REF
Definition reference.h:16
ABC_NAMESPACE_HEADER_START typedef unsigned reference
Definition reference.h:9
Here is the call graph for this function:
Here is the caller graph for this function:

◆ kissat_update_learned()

void kissat_update_learned ( kissat * solver,
unsigned glue,
unsigned size )

Definition at line 120 of file learn.c.

120 {
121 KISSAT_assert (!solver->probing);
122 INC (clauses_learned);
123 LOG ("learned[%" PRIu64 "] clause glue %u size %u", GET (clauses_learned),
124 glue, size);
125 if (solver->stable)
126 kissat_tick_reluctant (&solver->reluctant);
127 ADD (literals_learned, size);
128#ifndef KISSAT_QUIET
129 UPDATE_AVERAGE (size, size);
130#endif
131 UPDATE_AVERAGE (fast_glue, glue);
132 UPDATE_AVERAGE (slow_glue, glue);
133}
#define ADD(NAME, DELTA)
#define UPDATE_AVERAGE(A, Y)
Definition ema.hpp:56
void kissat_tick_reluctant(reluctant *reluctant)
Definition reluctant.c:22
#define GET(NAME)
Definition statistics.h:416
Here is the call graph for this function:
Here is the caller graph for this function: