Init version

This commit is contained in:
2024-10-03 18:43:04 +07:00
commit f80052961f
186 changed files with 71676 additions and 0 deletions

View File

@@ -0,0 +1,318 @@
#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;
}