319 lines
14 KiB
C++
319 lines
14 KiB
C++
#include "kolchshindwindow.h"
|
|
#include "ui_kolchshindwindow.h"
|
|
#include "Kolch_Shind/constants.h"
|
|
#include "Kolch_Shind/qcustomplot.h"
|
|
#include "Kolch_Shind/createrangedialog.h"
|
|
#include <QFileDialog>
|
|
#include <fstream>
|
|
#include <sstream>
|
|
#include <QDir>
|
|
|
|
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<dataSet> 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;
|
|
}
|