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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
bool Solver::isStable()
{
	return checkStability(blocks);
}