}
Polarity p = constraint->polarity;
uint pSize = constraint->parents.getSize();
- if (solver->getTuner()->getTunable(PROXYVARIABLE, &offon) == 1) {
-// if ((pSize > 1 && p != P_BOTHTRUEFALSE ) || pSize > 2) {
+
+ if ( !edgeIsVarConst(result) && pSize > (uint)solver->getTuner()->getTunable(PROXYVARIABLE, &proxyparameter) ) {
Edge e = getNewVarSATEncoder();
generateProxy(cnf, result, e, p);
booledgeMap.put(constraint, e.node_ptr);
row = constraintAND(cnf, inputNum, carray);
break;
case SATC_FLAGFORCEUNDEFINED: {
- if(solver->getTuner()->getTunable(PROXYVARIABLE, &offon) == 1){
+ row = constraintAND(cnf, inputNum, carray);
+ uint pSize = constraint->parents.getSize();
+ if(!edgeIsVarConst(row) && pSize > (uint)solver->getTuner()->getTunable(PROXYVARIABLE, &proxyparameter)){
Edge proxy = constraintNewVar(cnf);
- generateProxy(cnf, constraintAND(cnf, inputNum, carray), proxy, P_BOTHTRUEFALSE);
+ generateProxy(cnf, row, proxy, P_BOTHTRUEFALSE);
Edge undefConst = encodeConstraintSATEncoder(constraint->undefStatus);
addConstraintCNF(cnf, constraintIMPLIES(cnf, proxy, constraintNegate(undefConst)));
if (generateNegation == (entry->output != 0)) {
continue;
}
row = proxy;
- }else {
- row = constraintAND(cnf, inputNum, carray);
}
break;
}
static TunableDesc onoff(0, 1, 1);
static TunableDesc offon(0, 1, 0);
+static TunableDesc proxyparameter(1, 20, 2);
enum Tunables {DECOMPOSEORDER, MUSTREACHGLOBAL, MUSTREACHLOCAL, MUSTREACHPRUNE, OPTIMIZEORDERSTRUCTURE, ORDERINTEGERENCODING, PREPROCESS, NODEENCODING, EDGEENCODING, MUSTEDGEPRUNE, ELEMENTOPT, ELEMENTOPTSETS, PROXYVARIABLE};
typedef enum Tunables Tunables;