void CGeneticSystem::stepGeneration(){ //stepGeneration2(); //return; std::vector<CChromo> newPopulation(m_populationSize*2); for(int i = 0; i < m_populationSize*2; i++) { CChromo p(m_noCitys , m_distMatrix); newPopulation[i] = p; } int newPopulationSize = 0; SortPopulation(m_ChromoPopulation,false); computeFitness(); for(int i = 0; i < m_populationSize; i++) { for(int j = 0; j < m_noCitys; j++) { int test = m_ChromoPopulation[i].getGene(j); newPopulation[i].setGene(j,test ); } newPopulationSize++; } while(newPopulationSize < 2*m_populationSize) { int idx1 =0; //tournamentSelection(); int idx2 =0; //tournamentSelection(); while(idx1 == idx2) { idx2= tournamentSelection(); idx1= tournamentSelection(); } CChromo &pfather=m_ChromoPopulation[idx2]; CChromo &pMother=m_ChromoPopulation[idx1]; CChromo p_offspring1(m_noCitys,m_distMatrix) , p_offspring2(m_noCitys,m_distMatrix); pMother.crossover(&pfather, &p_offspring1, &p_offspring2); newPopulation[newPopulationSize] = p_offspring1; newPopulationSize++; if(newPopulationSize >= newPopulation.size()) break; newPopulation[newPopulationSize] = p_offspring2; newPopulationSize++; } mutatePopulation(newPopulation); SortPopulation(newPopulation , true); //ass for(int i = 0; i < m_populationSize-2; i++) //keep last best { m_ChromoPopulation[i] = newPopulation[i]; } SortPopulation(m_ChromoPopulation , true); updateBestSoFarPath(); }
bool MainWindow::Open() { QString tempFileName = QFileDialog::getOpenFileName(this, tr("Open file")); if (!tempFileName.isEmpty()) { QFile json(tempFileName); if(json.open(QIODevice::ReadOnly)) { QJsonParseError parseError; QJsonDocument jsonDoc = QJsonDocument::fromJson(json.readAll(), &parseError); if(parseError.error == QJsonParseError::NoError) { if(jsonDoc.isObject()) { m_model->Clear(); QJsonObject jsonObject = jsonDoc.object(); for (QJsonObject::Iterator iter = jsonObject.begin(); iter != jsonObject.end(); ++iter) { Population newPopulation(iter.key(), iter.value().toInt()); m_model->append(newPopulation); } m_fileName = tempFileName; this->setWindowTitle(m_fileName); ui->menuInsert->setEnabled(true); m_isSomethingChanged = false; } }else { json.close(); return false; } json.close(); m_stack->clear(); return true; }else { return false; } } return true; }
std::vector<MMKPSolution> MMKP_BBA::runOneGeneration (std::vector<MMKPSolution> population){ //init initial parameters //init MMKPBatSolution vector std::vector<MMKPBatSolution> tempPopulation(population.size()); for(int i=0;i<population.size();i++){ tempPopulation[i].solution = population[i]; } MMKP_BBA::quickSort(tempPopulation,0,(population.size()-1)); MMKP_BBA::initBatParemeters(tempPopulation); MMKP_BBA::globalSearch(tempPopulation); std::vector<MMKPSolution> newPopulation(population.size()); for(int i=0;i<population.size();i++){ newPopulation[i] = tempPopulation[i].solution; } return newPopulation; }
void CGeneticSystem::stepGeneration2() { std::vector<CChromo> newPopulation(m_populationSize*2); for(int i = 0; i < m_populationSize*2; i++) { CChromo p(m_noCitys , m_distMatrix); newPopulation[i] = p; } int newPopulationSize = 0; SortPopulation(m_ChromoPopulation , false); computeFitness(); for(int i = 0; i < m_populationSize; i++) { for(int j = 0; j < m_noCitys; j++) { int test = m_ChromoPopulation[i].getGene(j); newPopulation[i].setGene(j,test ); } newPopulationSize++; } while (newPopulationSize < 2*m_populationSize) { int idx1 = tournamentSelection(); int idx2 = tournamentSelection(); CChromo offspring = m_ChromoPopulation[idx1].CrossOver2(&m_ChromoPopulation[idx2]); newPopulation[newPopulationSize] = offspring; newPopulationSize++; } mutatePopulation(newPopulation); SortPopulation(newPopulation , true); for(int i = 0; i < m_populationSize; i++) { m_ChromoPopulation[i] = newPopulation[i]; } SortPopulation(m_ChromoPopulation,true); updateBestSoFarPath(); }