Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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();
}