void Simulation::initializePopulation() { Individual * individuo; QFile file("/tmp/algorithmResult.txt"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { QMessageBox msg; msg.setText("Simulation::initializePopulation(): No se pudo abrir el archivo /tmp/algorithmResult.txt\n para escribir resultados de la ejecucion del algoritmo."); return; } QTextStream out(&file); out << endl << "Inicializacion de la poblacion." <<"\n"; // inicializacion de la poblacion for (int i = 0; i < populationSize; i++) { individuo = new Individual(deployedAPs); individuo->printIndividual(); qDebug("individualId: %d", individuo->getIndividualId()); populationList.append(individuo); out << individuo->getIndividualAsQString() << endl; } qDebug("tamano de la poblacion: %d",populationList.count()); //return populationList; }
void Selection::addIndividualToOutOfGridIndividualList(Individual * outOfGridIndividual) { qDebug("Selection::addIndividualToOutOfGridIndividualList"); if (outOfGridList.empty()) { outOfGridList.append(outOfGridIndividual); qDebug("lista vacio, se inserto el individuo que cayo fuera de la grid"); return; } // verificar que el individuo no exista; si no existe se agrega en caso contrario se ignora Individual * auxIndividual; for (int i=0; i<outOfGridList.count(); i++) { auxIndividual = outOfGridList.at(i); if (auxIndividual->getIndividualId() == outOfGridIndividual->getIndividualId()) { qDebug("el individuo que cayo fuera de la grid ya se inserto en la lista y se ignora"); return; } } outOfGridList.append(outOfGridIndividual); qDebug("se inserto el individuo que cayo fuera de la grid a la lista"); }
bool ExternalFile::isIndividualInExternalFile(Individual * individual) { qDebug("->ExternalFile::isIndividualInExternalFile"); Individual * alreadyInsertedIndividual; for (int i = 0; i < externalFileNonDominatedList.count(); i++) { qDebug(" dentro del for"); alreadyInsertedIndividual = externalFileNonDominatedList.at(i); if (individual->getIndividualId() == alreadyInsertedIndividual->getIndividualId()) { qDebug("---> el individuo EXISTE en el arcvhivo"); return true; } } qDebug(" antes de salir"); return false; /* qDebug("->ExternalFile::isIndividualInExternalFile"); Individual * alreadyInsertedIndividual; for (int i = 0; i < externalFileNonDominatedList.count(); i++) { alreadyInsertedIndividual = externalFileNonDominatedList.at(i); // verificar si valores de F1 y F2 son iguales if ( (ind->getPerformanceDiscovery() == alreadyInsertedIndividual->getPerformanceDiscovery()) && (ind->getPerformanceLatency() == alreadyInsertedIndividual->getPerformanceLatency()) ) { qDebug(" F1 y F2 son iguales"); bool parameterFlagDifferent = false; for (int j=0; j<44; j++) { if (ind->getParameter(j) != alreadyInsertedIndividual->getParameter(j)) { qDebug(" parametro %d del individuo es igual", j); parameterFlagDifferent = true; } else { return false; } } } else{ return false; } } */ }
void ExternalFile::addNewIndividualAndCheck(Individual * newIndividual) { qDebug("->ExternalFile::addNewIndividualAndCheck"); Individual * nonDominatedindividual; bool newIndividualAlreadyInserted = false; // lista para mantener los indices de los individuos dominados que se deben eliminar QList<int> markedToRemove; for (int i = 0; i < externalFileNonDominatedList.count(); i++) { nonDominatedindividual = externalFileNonDominatedList.at(i); if (newIndividual->getIndividualId() == nonDominatedindividual->getIndividualId()) { continue; } if (individualDominate(newIndividual, nonDominatedindividual)) { // verificar que no esta insertado if (!newIndividualAlreadyInserted) { externalFileNonDominatedList.replace(i, newIndividual); newIndividualAlreadyInserted = true; qDebug("+ reemplazo individuo del archivo externo"); } else // newIndividual ya insertado, entonces marcar nonDominatedIndividual { //externalFileNonDominatedList.removeAt(i); markedToRemove.append(i); qDebug("marcado individuo duplicado con indice %d", i); } } } // eliminar los individuos marcados del archivo externo for (int j = 0; j < markedToRemove.count(); j++) { externalFileNonDominatedList.removeAt(j); } }
void ExternalFile::addNewIndividualAndCheck(Individual * newIndividual, int indexToReplace) { qDebug("-ExternalFile::addNewIndividualAndCheck"); Individual * nonDominatedindividual; // lista para mantener los indices de los individuos dominados que se deben eliminar QList<int> markedToRemove; // reemplazar el primer individuo domimnado con newIndividual externalFileNonDominatedList.replace(indexToReplace, newIndividual); qDebug("------> reemplazo de individuo dominado en el archivo externo"); // agregar el individuo nuevo en la lista de individuos de la generacion currentGenerationIndividualList.append(newIndividual); int i = indexToReplace+1; while (i < externalFileNonDominatedList.count()) //for (int i = indexToReplace+1; i < externalFileNonDominatedList.count(); i++) { nonDominatedindividual = externalFileNonDominatedList.at(i); if (individualDominate(newIndividual, nonDominatedindividual)) { markedToRemove.append(nonDominatedindividual->getIndividualId()); qDebug("marcado individuo duplicado con indice %d", i); } i++; } // eliminar los individuos marcados del archivo externo for (int j=0; j<markedToRemove.count(); j++) { for (int k=0; k<externalFileNonDominatedList.count(); k++) { if (externalFileNonDominatedList.at(k)->getIndividualId() == markedToRemove.at(j)) { externalFileNonDominatedList.removeAt(k); break; } } } }
void Simulation::addIndividualToOutOfGridIndividualList(Individual * outOfGridIndividual) { // verificar que el individuo no exista; si no existe se agrega en caso contrario se ignora Individual * auxIndividual; for (int i=0; i<outOfGridIndividualList.count(); i++) { auxIndividual = outOfGridIndividualList.at(i); if (auxIndividual->getIndividualId() == outOfGridIndividual->getIndividualId()) { } else { outOfGridIndividualList.append(outOfGridIndividual); } } }