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 BooleanVarOrdering direction = (BooleanVarOrdering)solver->getTuner()->getTunable(VARIABLEORDER, &boolVarOrderingDesc);
30 if ( direction == CONSTRAINTORDERING ) {
34 uint size = solver->allElements.getSize();
35 if (direction == ELEMENTORDERING) {
36 for (uint i = 0; i < size; i++) {
37 Element *el = solver->allElements.get(i);
38 ElementEncoding *encoding = el->getElementEncoding();
39 if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
41 satencoder->encodeElementSATEncoder(el);
44 for (int i = size - 1; i > 0; i--) {
45 Element *el = solver->allElements.get(i);
46 ElementEncoding *encoding = el->getElementEncoding();
47 if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
49 satencoder->encodeElementSATEncoder(el);