#include "kolchshindwindow.h" #include "ui_kolchshindwindow.h" #include "Kolch_Shind/constants.h" #include "Kolch_Shind/qcustomplot.h" #include "Kolch_Shind/createrangedialog.h" #include #include #include #include KolchShindWindow::KolchShindWindow(QWidget *parent) : QWidget(parent), ui(new Ui::KolchShindWindow) { ui->setupUi(this); ui->lineEdit_c1->setText("10.0"); ui->lineEdit_c2->setText("100.0"); ui->lineEdit_c3->setText("1.0"); ui->lineEdit_c4->setText("1.0"); ui->lineEdit_c5->setText("21.0"); ui->lineEdit_sigC2->setText("1.0"); ui->lineEdit_delX0->setText("0.3"); ui->lineEdit_sigX->setText("1.0"); ui->lineEdit_sigE->setText("0.1"); ui->lineEdit_Xopt->setText("110.0"); ui->lineEdit_popSize->setText("1000"); ui->lineEdit_maxSteps->setText("1000"); ui->lineEdit_N->setText("500"); ui->lineEdit_iters->setText("500"); ui->spinBox_modelCount->setMaximum(1000); ui->spinBox_modelCount->setMinimum(1); ui->progressBar_modelBar->setValue(0); ui->progressBar_modelBar->setMinimum(0); newIterFlag = 0; newModelFlag = 0; firstStart = 0; ui->comboBox_modelNum->setEnabled(false); QPalette *palette = new QPalette(); palette->setColor(QPalette::Base, Qt::gray); ui->lineEdit_sigC1->setPalette(*palette); ui->lineEdit_sigC3->setPalette(*palette); ui->lineEdit_sigC4->setPalette(*palette); ui->lineEdit_sigC5->setPalette(*palette); ui->lineEdit_E->setPalette(*palette); ui->lineEdit_sigX0->setPalette(*palette); ui->widget_XT->legend->setVisible(true); QFont legendFont = font(); legendFont.setPointSize(8); ui->widget_XT->legend->setFont(legendFont); ui->widget_XT->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop | Qt::AlignRight); ui->widget_XT->addGraph(); ui->widget_XT->addGraph(); ui->widget_XY->legend->setVisible(true); ui->widget_XY->legend->setFont(legendFont); ui->widget_XY->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop | Qt::AlignRight); ui->widget_XY->addGraph(); ui->widget_XY->addGraph(); ui->widget_XY->addGraph(); ui->widget_XY->addGraph(); ui->widget_XY->addGraph(); connect(this, SIGNAL(sendNewIter(int,int)), &paintWgt, SLOT(setIters(int,int))); connect(this, SIGNAL(startDrawParam(float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,int,int,int,int,QCustomPlot*, int, int, int)), &paintWgt, SLOT(drawAll(float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,int,int,int,int,QCustomPlot*, int, int, int))); connect(this, SIGNAL(drawModel(int,QCustomPlot*,int)), &paintWgt, SLOT(drawSelectedModel(int,QCustomPlot*,int))); connect(&paintWgt, SIGNAL(resentItersToProgressBar(int)), this, SLOT(changeProgressBarVal(int))); emit startDraw(ui->widget_XT); } KolchShindWindow::~KolchShindWindow() { delete ui; } void KolchShindWindow::on_pushButton_clicked() { newIterFlag = 0; int iter = 0; bool check; int cnt = 0; ui->progressBar_modelBar->setValue(0); ui->comboBox_modelNum->clear(); ui->comboBox_modelNum->setEnabled(true); ui->progressBar_modelBar->setMaximum(ui->spinBox_modelCount->value()); for(int i = 0; i < ui->spinBox_modelCount->value(); i++) { QString comboString = "Model "; comboString += QString::number(i + 1); ui->comboBox_modelNum->addItem(comboString); } if (ui->spinBox_modelCount->value() > 1) { ui->comboBox_modelNum->addItem("Average for all models"); } newModelFlag++; ui->lineEdit_c1->text().toFloat(&check); ui->lineEdit_c2->text().toFloat(&check); ui->lineEdit_c3->text().toFloat(&check); ui->lineEdit_c4->text().toFloat(&check); ui->lineEdit_c5->text().toFloat(&check); ui->lineEdit_sigC1->text().toFloat(&check); ui->lineEdit_sigC2->text().toFloat(&check); ui->lineEdit_sigC3->text().toFloat(&check); ui->lineEdit_sigC4->text().toFloat(&check); ui->lineEdit_sigC5->text().toFloat(&check); ui->lineEdit_E->text().toFloat(&check); ui->lineEdit_sigE->text().toFloat(&check); ui->lineEdit_sigX0->text().toFloat(&check); ui->lineEdit_delX0->text().toFloat(&check); ui->lineEdit_sigX->text().toFloat(&check); ui->lineEdit_Xopt->text().toFloat(&check); ui->lineEdit_popSize->text().toInt(&check); ui->lineEdit_maxSteps->text().toInt(&check); ui->lineEdit_N->text().toInt(&check); if(!check) { QMessageBox::information(this, "Information", "Incorrect data!\nPlease check it again!", QMessageBox::Ok, 0); return; } emit sendNewIter(newIterFlag, iter); emit startDrawParam(ui->lineEdit_c1->text().toFloat(), ui->lineEdit_c2->text().toFloat(), ui->lineEdit_c3->text().toFloat(), ui->lineEdit_c4->text().toFloat(), ui->lineEdit_c5->text().toFloat(), ui->lineEdit_sigC1->text().toFloat(), ui->lineEdit_sigC2->text().toFloat(), ui->lineEdit_sigC3->text().toFloat(), ui->lineEdit_sigC4->text().toFloat(), ui->lineEdit_sigC5->text().toFloat(), ui->lineEdit_E->text().toFloat(), ui->lineEdit_sigE->text().toFloat(), ui->lineEdit_sigX0->text().toFloat(), ui->lineEdit_delX0->text().toFloat(), ui->lineEdit_sigX->text().toFloat(), ui->lineEdit_Xopt->text().toFloat(), ui->lineEdit_popSize->text().toInt(), ui->lineEdit_maxSteps->text().toInt(), ui->lineEdit_N->text().toInt(), WIDGET_XT, ui->widget_XT, cnt, ui->spinBox_modelCount->value(), ui->comboBox_modelNum->count() - 1/*ui->comboBox_modelNum->currentIndex()*/); cnt++; emit startDrawParam(ui->lineEdit_c1->text().toFloat(), ui->lineEdit_c2->text().toFloat(), ui->lineEdit_c3->text().toFloat(), ui->lineEdit_c4->text().toFloat(), ui->lineEdit_c5->text().toFloat(), ui->lineEdit_sigC1->text().toFloat(), ui->lineEdit_sigC2->text().toFloat(), ui->lineEdit_sigC3->text().toFloat(), ui->lineEdit_sigC4->text().toFloat(), ui->lineEdit_sigC5->text().toFloat(), ui->lineEdit_E->text().toFloat(), ui->lineEdit_sigE->text().toFloat(), ui->lineEdit_sigX0->text().toFloat(), ui->lineEdit_delX0->text().toFloat(), ui->lineEdit_sigX->text().toFloat(), ui->lineEdit_Xopt->text().toFloat(), ui->lineEdit_popSize->text().toInt(), ui->lineEdit_maxSteps->text().toInt(), ui->lineEdit_N->text().toInt(), WIDGET_XY, ui->widget_XY, cnt, ui->spinBox_modelCount->value(), ui->comboBox_modelNum->count() - 1/*ui->comboBox_modelNum->currentIndex()*/); ui->comboBox_modelNum->setCurrentText("Average for all models"); } void KolchShindWindow::on_pushButton_cont_clicked() { if (newModelFlag == 0) { QMessageBox::information(this, "Information", "Launch new calculate before!", QMessageBox::Ok, 0); return; } // CreateRangeDialog dialog(this, 1); // int ret = dialog.exec(); // if (ret == QDialog::Rejected) // { // return; // } ui->progressBar_modelBar->setValue(0); newIterFlag = 1; bool check; int cnt = 0; ui->lineEdit_c1->text().toFloat(&check); ui->lineEdit_c2->text().toFloat(&check); ui->lineEdit_c3->text().toFloat(&check); ui->lineEdit_c4->text().toFloat(&check); ui->lineEdit_c5->text().toFloat(&check); ui->lineEdit_sigC1->text().toFloat(&check); ui->lineEdit_sigC2->text().toFloat(&check); ui->lineEdit_sigC3->text().toFloat(&check); ui->lineEdit_sigC4->text().toFloat(&check); ui->lineEdit_sigC5->text().toFloat(&check); ui->lineEdit_E->text().toFloat(&check); ui->lineEdit_sigE->text().toFloat(&check); ui->lineEdit_sigX0->text().toFloat(&check); ui->lineEdit_delX0->text().toFloat(&check); ui->lineEdit_sigX->text().toFloat(&check); ui->lineEdit_Xopt->text().toFloat(&check); ui->lineEdit_popSize->text().toInt(&check); ui->lineEdit_maxSteps->text().toInt(&check); ui->lineEdit_N->text().toInt(&check); ui->lineEdit_iters->text().toInt(&check); if(!check) { QMessageBox::information(this, "Information", "Incorrect data!\nPlease check it again!", QMessageBox::Ok, 0); return; } int iter = ui->lineEdit_iters->text().toInt(); emit sendNewIter(newIterFlag, iter); emit startDrawParam(ui->lineEdit_c1->text().toFloat(), ui->lineEdit_c2->text().toFloat(), ui->lineEdit_c3->text().toFloat(), ui->lineEdit_c4->text().toFloat(), ui->lineEdit_c5->text().toFloat(), ui->lineEdit_sigC1->text().toFloat(), ui->lineEdit_sigC2->text().toFloat(), ui->lineEdit_sigC3->text().toFloat(), ui->lineEdit_sigC4->text().toFloat(), ui->lineEdit_sigC5->text().toFloat(), ui->lineEdit_E->text().toFloat(), ui->lineEdit_sigE->text().toFloat(), ui->lineEdit_sigX0->text().toFloat(), ui->lineEdit_delX0->text().toFloat(), ui->lineEdit_sigX->text().toFloat(), ui->lineEdit_Xopt->text().toFloat(), ui->lineEdit_popSize->text().toInt(), ui->lineEdit_maxSteps->text().toInt(), ui->lineEdit_N->text().toInt(), WIDGET_XT, ui->widget_XT, cnt, ui->spinBox_modelCount->value(), ui->comboBox_modelNum->currentIndex()); cnt++; emit startDrawParam(ui->lineEdit_c1->text().toFloat(), ui->lineEdit_c2->text().toFloat(), ui->lineEdit_c3->text().toFloat(), ui->lineEdit_c4->text().toFloat(), ui->lineEdit_c5->text().toFloat(), ui->lineEdit_sigC1->text().toFloat(), ui->lineEdit_sigC2->text().toFloat(), ui->lineEdit_sigC3->text().toFloat(), ui->lineEdit_sigC4->text().toFloat(), ui->lineEdit_sigC5->text().toFloat(), ui->lineEdit_E->text().toFloat(), ui->lineEdit_sigE->text().toFloat(), ui->lineEdit_sigX0->text().toFloat(), ui->lineEdit_delX0->text().toFloat(), ui->lineEdit_sigX->text().toFloat(), ui->lineEdit_Xopt->text().toFloat(), ui->lineEdit_popSize->text().toInt(), ui->lineEdit_maxSteps->text().toInt(), ui->lineEdit_N->text().toInt(), WIDGET_XY, ui->widget_XY, cnt, ui->spinBox_modelCount->value(), ui->comboBox_modelNum->currentIndex()); } void KolchShindWindow::on_pushButton_Log_clicked() { QVector vect = paintWgt.hist; for (int n = 0; n < vect.size() - 1; n++) { QString directoryName("Output_for_model_"); directoryName += QString::number(n + 1); QDir directory(directoryName); if (!directory.exists()){ directory.mkpath("."); } std::stringstream fileName; fileName << "./Output_for_model_" << n + 1 << "/Model_" << n + 1 << ".txt"; std::ofstream modelOutput(fileName.str().c_str()); for(int i = 0; i < vect[n].withFeedbackVect.size(); i++) { modelOutput << "W/o fb\t" << vect[n].withFeedbackVect[i] << "\tW/fb\t"<< vect[n].withoutFeedbackVect[i]; modelOutput << "\tOptE(w/o/fb)\t" << vect[n].individ[i]; modelOutput << "\tmE(w/o/fb)\t" << vect[n].meanE[i] / vect[n].withoutFeedbackVect[i]; modelOutput << "\tOptE(w/fb)\t" << vect[n].individFeedback[i]; modelOutput << "\tmE(w/fb)\t" << vect[n].meanE[i] / vect[n].withFeedbackVect[i]; modelOutput << "\tmC2(w/fb)\t" << vect[n].meanC2[i] / vect[n].withFeedbackVect[i]; modelOutput << "\n"; } modelOutput.close(); } QString directoryName("Output_for_AVGmodel"); //directoryName += QString::number(n + 1); QDir directory(directoryName); if (!directory.exists()){ directory.mkpath("."); } std::stringstream fileName; fileName << "./Output_for_AVGmodel" << "/AVG_Model" << ".txt"; std::ofstream modelOutput(fileName.str().c_str()); for(int i = 0; i < vect[vect.size() - 1].withFeedbackVect.size(); i++) { modelOutput << "W/o fb\t" << vect[vect.size() - 1].withFeedbackVect[i] << "\tW/fb\t"<< vect[vect.size() - 1].withoutFeedbackVect[i]; modelOutput << "\tOptE(w/o/fb)\t" << vect[vect.size() - 1].individ[i]; modelOutput << "\tmE(w/o/fb)\t" << vect[vect.size() - 1].meanE[i] / vect[vect.size() - 1].withoutFeedbackVect[i]; modelOutput << "\tOptE(w/fb)\t" << vect[vect.size() - 1].individFeedback[i]; modelOutput << "\tmE(w/fb)\t" << vect[vect.size() - 1].meanE[i] / vect[vect.size() - 1].withFeedbackVect[i]; modelOutput << "\tmC2(w/fb)\t" << vect[vect.size() - 1].meanC2[i] / vect[vect.size() - 1].withFeedbackVect[i]; modelOutput << "\n"; } modelOutput.close(); // QString fileName = QFileDialog::getSaveFileName(this, // tr("Save Statistics"), "", // tr("Text document (*.txt);;All Files (*)")); // QFile file(fileName); // if (fileName.isEmpty()) // { // return; // } // else // { // if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) // { // QMessageBox::information(this, tr("Unable to open file"), // file.errorString()); // return; // } // } // QTextStream out(&file); // for (int i = 0; i < withFeed.size(); i++) // { // out << "W/o fb\t" << withoutFeed[i] << "\tW/fb\t"<< withFeed[i]; // out << "\tOptE(w/o/fb)\t" << individ[i]; // out << "\tmE(w/o/fb)\t" << eMeans[i] / withoutFeed[i]; // out << "\tOptE(w/fb)\t" << individFeed[i]; // out << "\tmE(w/fb)\t" << eMeans[i] / withFeed[i]; // out << "\tmC2(w/fb)\t" << c2Means[i] / withFeed[i]; // out << "\n"; // } // file.close(); } void KolchShindWindow::on_comboBox_modelNum_currentIndexChanged(int index) { if (firstStart != 0) { emit drawModel(WIDGET_XT, ui->widget_XT, index); emit drawModel(WIDGET_XY, ui->widget_XY, index); } firstStart++; } void KolchShindWindow::changeProgressBarVal(int iter) { ui->progressBar_modelBar->setValue(iter); //std::cout << ui->progressBar_modelBar->value() << std::endl; }