void LevelOneDec::changedEps(double eps) { muLowerLimitVector.clear(); muUpperLimitVector.clear(); createVector2DSensReadingsLow(eps); createVector2DSensReadingsHigh(eps); for (size_t i = 0; i < row; ++i) { muLowerLimitVector.push_back(getMuLowerLimit(i)); muUpperLimitVector.push_back(getMuHighLimit(i)); } tableStabilityLevelOneModel->setCurrencyVectors(vectorDateToLevelOne, muLowerLimitVector, muVector, muUpperLimitVector); viewTableLevelOneModel->selectRow(row - 1); levelOneMuChart->readDataOfVectors(muLowerLimitVector, muVector, muUpperLimitVector, alphaVector); checkStability(); }
void LevelOneDec::createWidgets() { labelWarning = new QLabel(this); labelWarning->setText(tr("Warning! System is not stable! You need to go to the second level of decomposition or increase the coefficient \"Eps\"")); labelWarning->setStyleSheet("QLabel { color: #FFFFFF; background-color: #FF0000 }"); labelWarning->setContentsMargins(2, 2, 2, 2); horizLayoutTableLevelOne = new QHBoxLayout; horizLayoutTableLevelOne->addWidget(viewTableLevelOneModel); horizLayoutTableLevelOne->addWidget(levelOneChart); horizLayoutTableLevelOne->addWidget(levelOneMuChart); /* So-slow, do not use splitter in this widget */ // levelOneSplitter = new QSplitter(this); // horizLayoutTableLevelOne->addWidget(levelOneSplitter); vertLayoutLevelOne = new QVBoxLayout(this); vertLayoutLevelOne->addWidget(toolBar); vertLayoutLevelOne->addLayout(horizLayoutTableLevelOne); vertLayoutLevelOne->addWidget(labelWarning); checkStability(); levelOneMuChart->hide(); setLayout(vertLayoutLevelOne); qSwitch = true; }
int Solver::score(std::vector<Move> a) { int res = 0; for (int i = 1; i < (int) a.size(); i++) res+= getSpace(a, i) * 100; res+= floatingScore(a) * 1000; int unstableCounter = 0; std::vector<Block> c = std::vector<Block>(); for (int i = 0; i < (int) a.size(); i++) { if (a[i].left != Move::NO_BLOCK) c.push_back(blocks[a[i].left]); if (a[i].right != Move::NO_BLOCK) c.push_back(blocks[a[i].right]); if (!checkStability(c)) { if (a[i].mode == Move::TWO_HANDS) unstableCounter++; unstableCounter++; } } res+= unstableCounter * 1000; for (int i = 0; i < (int) a.size(); i++) { if (a[i].mode == Move::TWO_HANDS) { res+= 5; if (blocks[a[i].left].isOn(blocks[a[i].right]) || blocks[a[i].right].isOn(blocks[a[i].left])) res+= 1000; if (blocks[a[i].right].x < blocks[a[i].left].x) { res+= 1000; } } } int counter = 0; for (int i = 0; i < (int) a.size(); i++) { if (a[i].left != Move::NO_BLOCK) counter++; if (a[i].right != Move::NO_BLOCK) counter--; } counter = counter < 0 ? -counter : counter; res+= counter * 5; return -res; }
bool Solver::isStable() { return checkStability(blocks); }