Пример #1
0
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;
}
Пример #2
0
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");
}
Пример #3
0
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;
        }
    }
*/
}
Пример #4
0
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);
    }
}
Пример #5
0
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;
            }
        }
    }

}
Пример #6
0
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);
        }
    }
}