void MainWindow::drawPath(QItemSelection item){ QCPCurve *curve = qobject_cast<QCPCurve*>(ui->citiesPlot->plottable(0)); curve->clearData(); curve->setLineStyle(QCPCurve::lsLine); ui->citiesPlot->replot(); QModelIndex index = item.indexes().first(); Tour tour = qvariant_cast<Tour>(ui->listView->model()->data(index, Qt::UserRole)); for(int i=0; i<tour.tourSize(); i++){ int x = tour.getCity(i).getX(); int y = tour.getCity(i).getY(); curve->addData(x, y); } curve->addData(tour.getCity(0).getX(), tour.getCity(0).getY()); ui->citiesPlot->replot(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); populationSize = 30; ui->popSizeSpinBox->setValue(populationSize); srand(static_cast <unsigned> (time(0))); stopFlag = false; pop = new Population(populationSize,true); setup(); model = new PopulationModel(*pop); ui->listView->setModel(model); QVector<double> ax(11); for(int i=0;i<11;i++){ ax[i] = i*100; } QCPCurve *newCurve = new QCPCurve(ui->citiesPlot->xAxis, ui->citiesPlot->yAxis); newCurve->setKeyAxis(ui->citiesPlot->xAxis); newCurve->setValueAxis(ui->citiesPlot->yAxis); newCurve->setLineStyle(QCPCurve::lsNone); newCurve->setPen(QPen(Qt::red)); newCurve->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, Qt::blue, Qt::darkBlue, 5)); for(int i=0; i<TourManager::numberOfCities(); i++){ int x = TourManager::getCity(i).getX(); int y = TourManager::getCity(i).getY(); newCurve->addData(x, y); } newCurve->addData(TourManager::getCity(0).getX(), TourManager::getCity(0).getY()); ui->citiesPlot->addPlottable(newCurve); ui->citiesPlot->xAxis->setRange(0, 1000); ui->citiesPlot->yAxis->setRange(0, 1000); ui->citiesPlot->xAxis->setAutoTickStep(false); ui->citiesPlot->yAxis->setAutoTickStep(false); ui->citiesPlot->xAxis->setTickStep(100); ui->citiesPlot->yAxis->setTickStep(100); ui->citiesPlot->xAxis->setTickVector(ax); ui->citiesPlot->yAxis->setTickVector(ax); //ui->citiesPlot->xAxis->setTicks(false); //ui->citiesPlot->yAxis->setTicks(false); ui->citiesPlot->xAxis->setTickLabels(true); ui->citiesPlot->yAxis->setTickLabels(true); ui->citiesPlot->xAxis->grid()->setPen(Qt::SolidLine); ui->citiesPlot->yAxis->grid()->setPen(Qt::SolidLine); //ui->citiesPlot->yAxis->setScaleRatio(ui->citiesPlot->xAxis,1.0); ui->statPlot->setBackground(Qt::gray); ui->statPlot->addGraph(); ui->statPlot->addGraph(); ui->statPlot->graph(0)->setPen(QPen(Qt::red)); ui->statPlot->graph(1)->setPen(QPen(Qt::blue)); ui->statPlot->graph(0)->setName(tr("Best")); ui->statPlot->graph(0)->addToLegend(); ui->statPlot->graph(1)->setName(tr("Average")); ui->statPlot->graph(1)->addToLegend(); ui->statPlot->xAxis->setRangeLower(0); QFont legendFont = font(); legendFont.setPointSize(9); QMargins margins(0,0,0,0); ui->statPlot->legend->setFont(legendFont); ui->statPlot->legend->setMargins(margins); ui->statPlot->legend->setVisible(true); ui->statPlot->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop|Qt::AlignRight); //Population pop(50, true); generation = 0; ui->statPlot->graph(0)->addData(0, pop->getFittest().getDistance()); ui->statPlot->graph(1)->addData(0,pop->getAverage()); ui->statPlot->graph(1)->rescaleAxes(); ui->statPlot->xAxis->setRange(0, 101); ui->statPlot->xAxis->setTickStep(1); ui->statPlot->yAxis->setRangeLower(0); ui->statPlot->setInteraction(QCP::iRangeZoom); ui->statPlot->setInteraction(QCP::iRangeDrag); //ui->statPlot->axisRect()->setRangeDrag(Qt::Horizontal); GeneticEngine *ge = new GeneticEngine(); ui->mutationSpinBox->setValue(GeneticEngine::getMutationRate()); ui->tournamentSpinBox->setValue(GeneticEngine::getTournamentSize()); ui->tournamentSpinBox->setMaximum(pop->populationSize()); ui->elitismCheckBox->setChecked(GeneticEngine::getElitism()); ui->mutTypeComboBox->setCurrentIndex(GeneticEngine::getMutationType()); ui->crossTypeComboBox->setCurrentIndex(GeneticEngine::getCrossoverType()); ui->listView->setWindowTitle(tr("Generation :")); connect(ui->listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),this, SLOT(drawPath(QItemSelection))); connect(ui->runButton, SIGNAL(clicked(bool)),this, SLOT(run())); connect(ui->repopulateButton, SIGNAL(clicked()), this, SLOT(restart())); connect(ui->mutationSpinBox, SIGNAL(valueChanged(double)), ge,SLOT(setMutationRate(double))); connect(ui->tournamentSpinBox, SIGNAL(valueChanged(int)), ge, SLOT(setTournamentSize(int))); connect(ui->elitismCheckBox, SIGNAL(toggled(bool)), ge, SLOT(setElitism(bool))); connect(ui->mutTypeComboBox, SIGNAL(currentIndexChanged(int)), ge, SLOT(setMutationType(int))); connect(ui->crossTypeComboBox, SIGNAL(currentIndexChanged(int)), ge, SLOT(setCrossoverType(int))); connect(ui->popSizeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setPopulationSize(int))); connect(ui->actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(ui->actionSave, SIGNAL(triggered()), this, SLOT(save())); connect(ui->actionRandom_Initialization, SIGNAL(triggered()), this, SLOT(randInit())); connect(ui->actionLoad, SIGNAL(triggered()), this, SLOT(open())); readSettings(); //qDebug()<<pop->getFittest().getDistance(); }