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 == CHORONOLOGICALORDERING){
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);