2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
8 * File: VarOrderingOpt.cpp
11 * Created on October 11, 2018, 5:31 PM
14 #include "varorderingopt.h"
17 #include "satencoder.h"
18 #include "elementencoding.h"
21 VarOrderingOpt::VarOrderingOpt(CSolver *_solver, SATEncoder *_satencoder) : Transform(_solver) {
22 satencoder = _satencoder;
25 VarOrderingOpt::~VarOrderingOpt() {
28 void VarOrderingOpt::doTransform() {
29 if(solver->isUnSAT()){
32 BooleanVarOrdering direction = (BooleanVarOrdering)solver->getTuner()->getTunable(VARIABLEORDER, &boolVarOrderingDesc);
33 if ( direction == CONSTRAINTORDERING ) {
37 uint size = solver->allElements.getSize();
38 if (direction == ELEMENTORDERING) {
39 for (uint i = 0; i < size; i++) {
40 Element *el = solver->allElements.get(i);
41 ElementEncoding *encoding = el->getElementEncoding();
42 if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
44 satencoder->encodeElementSATEncoder(el);
47 for (int i = size - 1; i > 0; i--) {
48 Element *el = solver->allElements.get(i);
49 ElementEncoding *encoding = el->getElementEncoding();
50 if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
52 satencoder->encodeElementSATEncoder(el);