Cherche un algorithme [Résolu]

baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 23 mai 2011 à 10:47 - Dernière réponse : baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention
- 26 mai 2011 à 12:14
bonjour
je cherche un algorithme nommé Vector Evaluation Genetic Algorithme (VEGA) mais en C/C++, je l'ai déjà en java mais puisque Il existe des concepts du C++ intranscriptible en Java (gestion fine de la mémoire, templates qui n'ont rien à voir avec les Generics de Java, RAII au lieu du gc, etc...).
merci de m'aider .
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 24 mai 2011 à 14:23
3
Merci
ow!!! personne ne répondre ?

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x
Meilleure réponse
elkasimi2007 20 Messages postés lundi 19 mars 2007Date d'inscription 26 mai 2011 Dernière intervention - 24 mai 2011 à 18:59
3
Merci
Salut,
envoie moi l'algorithme en pseudo code svp ou même en JAVA j’essaierai de t'aider

Merci elkasimi2007 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de elkasimi2007
Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 25 mai 2011 à 12:20
3
Merci
merci pour la réponse; voila l'algorithme,
package publication;

import biputil2.SequentialFile;

/**
 * Title: 


 * Description: 


 * Copyright: Copyright (c) 2010


 * Company: 


 * @author not attributable
 * @version 1.0
 */
public class ag {

/**
 * @param args
 */
static SequentialFile tempsAg = new SequentialFile();
static SequentialFile puisAg = new SequentialFile();
public static void main(String[] args) {

// TODO Auto-generated method stub
int nbTache = 10;
SequentialFile fichier = new SequentialFile();
SequentialFile cache = new SequentialFile();
SequentialFile temps_access = new SequentialFile();
SequentialFile puissance_access = new SequentialFile();
SequentialFile pop = new SequentialFile();

double T[][] = new double[50][nbTache];
double C[][] = new double[50][nbTache];
fichier.open("resultat.txt", 'r');
String ligne = new String();
ligne = fichier.read();
// Calcul C[configurations][taches]:
// Matrice T[configurations][tâches]dimension
// 5*5
pop.open("pop.txt", 'w');
for (int i = 0; i < 50; i++) {
for (int j = 0; j < nbTache; j++) {
ligne = fichier.read();
T[i][j] = Double.parseDouble(ligne);
ligne = fichier.read();
C[i][j] = Double.parseDouble(ligne);
ligne = fichier.read();
}
//      System.out.println();
}

fichier.close();

//System.out.println("T=");
for (int i = 0; i < 50; i++) {
for (int j = 0; j < nbTache; j++) {
//  System.out.print(T[i][j] + " ");
}
//System.out.println();
}
//System.out.println("C=");
//System.out.println();
for (int i = 0; i < 50; i++) {
for (int j = 0; j < nbTache; j++) {
//  System.out.print(C[i][j] + " ");
}
//System.out.println();
}
//System.out.println();

// Calcul Taille[configurations]

//System.out.println("Taille=");
double Taille[] = new double[50];
cache.open("cache.txt", 'r');
ligne = cache.read();
for (int h = 0; h < 50; h++) {
Taille[h] = Double.parseDouble(ligne);
//System.out.print(Taille[h] + "");
ligne = cache.read();
}
cache.close();
//System.out.println();

// Calcul T_acc[configurations]:
double Taccess[] = new double[50];
temps_access.open("temps_access.txt", 'r');
ligne = temps_access.read();
for (int h = 0; h < 50; h++) {
Taccess[h] = Double.parseDouble(ligne);
//System.out.print(Taccess[h] + "");
ligne = temps_access.read();

}
temps_access.close();
//System.out.println();

// Calcul P_acc[configurations]:
double Paccess[] = new double[50];
puissance_access.open("puissance_access.txt", 'r');
ligne = puissance_access.read();
for (int h = 0; h < 50; h++) {
Paccess[h] = Double.parseDouble(ligne);
//System.out.print(Paccess[h] + "");
ligne = puissance_access.read();

}
puissance_access.close();
//System.out.println();

// Calcul Tc[configurations][configurations]

double Tc[][] = new double[50][50];
//System.out.println("Tc=");
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
if (i == j) {
Tc[i][j] = 0;
//    System.out.print(Tc[i][j] + " ");
}
else if (Taille[i] < Taille[j]) {
Tc[i][j] = 0;
//  System.out.print(Tc[i][j] + " ");
}
else {
Tc[i][j] = Taccess[i] * (Taille[i] - Taille[j]);
//          System.out.print(Tc[i][j] + " ");
}
}
//System.out.println();
}
//System.out.println();

// Calcul Cc[configurations][configurations]

double Cc[][] = new double[50][50];
//System.out.println("Cc=");
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
if (i == j) {
Cc[i][j] = 0;
//    System.out.print(Cc[i][j] + " ");
}
else if (Taille[i] < Taille[j]) {
Cc[i][j] = 0;
//  System.out.print(Cc[i][j] + " ");
}
else {
Cc[i][j] = Paccess[i] * (Taille[i] - Taille[j]);
//System.out.print(Cc[i][j] + " ");
}
}
//      System.out.println();
}
//  System.out.println();
// Création d'une pop initiale
int p[][] = new int[100][nbTache];
//  System.out.println("p=");
for (int i = 0; i < 100; i++) {
//  System.out.print(i + " ");
for (int j = 0; j < nbTache; j++) {
p[i][j] = (int) (Math.random() * 50);
//System.out.print(p[i][j] + " ");
}
//System.out.println();
}

// Evaluation des individus ou calcul de Fitness
double Ft[] = new double[100];
double Fc[] = new double[100];
int par1[] = new int[nbTache];
int par2[] = new int[nbTache];
int enf1[] = new int[nbTache];
int enf2[] = new int[nbTache];
int p1[][] = new int[100][nbTache];
int p2[][] = new int[100][nbTache];
int In[] = new int[2];
// Evaluation des individus
f1(100, nbTache, p, T, Tc, Ft, p1);

f2(100, nbTache, p, C, Cc, Fc, p2);

selection(100, nbTache, p, Ft, Fc, par1, par2, In);
for (int i = 0; i < 100; i++) {
System.out.print(i + " ");
for (int j = 0; j < nbTache; j++) {

System.out.print(p[i][j] + " ");
}
System.out.println();
}
f1(100, nbTache, p, T, Tc, Ft, p1);

f2(100, nbTache, p, C, Cc, Fc, p2);

// Sélection

int k = 0;
int l = 1;
while (k < 500) { //nombre de génération
// croisement
croisement(100, nbTache, p, par1, par2, enf1, enf2, In, T, Tc, C, Cc);
//  System.out.println();

// Mutation
mutation(100, nbTache, p, T, Tc, C, Cc);
//    System.out.println();
// pop après reclassement, croisement et mutation
selection(100, nbTache, p, Ft, Fc, par1, par2, In);
//      System.out.println("p'=");
//c la j'ai ajoutée une condition qui teste si c la premiere itération alors
//imprimé ou si pair de 10 imprimer aussi car je veux avoir 1 10 20 30 40 50 60 70 80 90 100
if  (l % 50 == 0) {
System.out.println(l);
for (int i = 0; i < 100; i++) {
System.out.print(i + " ");
//        pop.write(""+i);
for (int j = 0; j < nbTache; j++) {
System.out.print(p[i][j] + " ");
//        pop.write(""+p[i][j]);
}
System.out.println();

}

f1(100, nbTache, p, T, Tc, Ft, p1);

f2(100, nbTache, p, C, Cc, Fc, p2);
} //jusque la
k++;
l++;
}

pop.close();
//    selection(100, nbTache, p, Ft, Fc, par1, par2, In);
//f1(100, nbTache, p, T, Tc, Ft, p1);

//f2(100, nbTache, p, C, Cc, Fc, p2);

} // fin main

public static void f1(int lig, int col, int p[][], double t[][],
double tc[][], double f[], int p1[][]) {
double s1 0, s2 0;
double S1[] = new double[lig];
double S2[] = new double[lig];
for (int i = 0; i < lig; i++) {
for (int j = 0; j < col; j++) {
s1 = s1 + t[p[i][j]][j]; // p[i]{j]= N°Configuration [j]=N° de la
// tache
}
S1[i] = s1;
s1 = 0;
}
for (int i = 0; i < lig; i++) {
for (int j = 0; j < col - 1; j++) {
s2 = s2 + tc[p[i][j]][p[i][j + 1]]; // p[i]{j]= N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}
S2[i] = s2;
s2 = 0;
}
tempsAg.open("tempsAg.txt", 'w');
System.out.println(" Ft");
for (int i = 0; i < lig; i++) {
f[i] = S1[i] + S2[i];
tempsAg.write("" + f[i]);
System.out.println(f[i] + " ");
}
tempsAg.close();
}

public static void f2(int lig, int col, int p[][], double c[][],
double cc[][], double f[], int p2[][]) {
double s1 0, s2 0;
double S1[] = new double[lig];
double S2[] = new double[lig];
for (int i = 0; i < lig; i++) {
for (int j = 0; j < col; j++) {
s1 = s1 + c[p[i][j]][j];
}
S1[i] = s1;
s1 = 0;
}
for (int i = 0; i < lig; i++) {
for (int j = 0; j < col - 1; j++) {
s2 = s2 + cc[p[i][j]][p[i][j + 1]];
}
S2[i] = s2;
s2 = 0;
}

puisAg.open("puisAg.txt", 'w');
System.out.println("Fc");
for (int i = 0; i < lig; i++) {
f[i] = S1[i] + S2[i];
System.out.println(f[i] + " ");
puisAg.write("" + f[i]);
}
puisAg.close();
}

// Appliquer l'algorithme VEGA pour la selection des individus qui feront
// objet d'un croisement et/ou Mutation
public static void selection(int lig, int col, int p[][], double f1[],
double f2[], int par1[], int par2[], int ind[]) {
// Sous pop 1 les 50 premiers individus sont classés selon F1
double z;
int x;
//Classement selon F1
for (int i = 0; i < ( (lig / 2) - 1); i++) {
for (int j = i + 1; j < lig / 2; j++) {
if (f1[j] < f1[i]) {
z = f1[i];
f1[i] = f1[j];
f1[j] = z;
for (int h = 0; h < col; h++) {
x = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x;
}

}
}
}
double z1;
int x1; //classement selon F2
for (int i = (lig / 2); i < lig - 1; i++) {
for (int j = i + 1; j < lig; j++) {
if (f2[j] < f2[i]) {
z1 = f2[i];
f2[i] = f2[j];
f2[j] = z1;
for (int h = 0; h < col; h++) {
x1 = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x1;
}

}
}
}

ind[0] = (int) (Math.random() * 50);
// int id1 = (int) (Math.random() * 10);

//System.out.println("id1=" + id1);
ind[1] = (int) (Math.random() * 50) + 50;

// int id2 = (int) (Math.random() * 10);
// ind[0]=id1;
// ind[1]=id2;
//System.out.println("id2=" + id2);
for (int i = 0; i < lig; i++) {
if (i == ind[0]) {
for (int j = 0; j < col; j++) {
par1[j] = p[i][j];
//System.out.print(par1[j]);
}
}

}
for (int i = 0; i < lig; i++) {
if (i == ind[1]) {
//    System.out.println();
for (int j = 0; j < col; j++) {
par2[j] = p[i][j];
//System.out.print(par2[j]);
}
}
}
//System.out.println();
} // fin selection

public static void croisement(int lig, int col, int p[][], int par1[],
int par2[], int enf1[], int enf2[], int ind[],
double t[][],
double tc[][], double c[][], double cc[][]) {

for (int j = 0; j < col / 2; j++) {
enf1[j] = par1[j];
enf2[j] = par2[j];

}
for (int j = col / 2; j < col; j++) {
enf1[j] = par2[j];
enf2[j] = par1[j];
}

if (fti(col, enf1, t, tc) < fti(col, par1, t, tc)) {
for (int j = 0; j < col; j++) {
p[ind[0]][j] = enf1[j];
// System.out.print(enf1[j]);
}
}
//    System.out.println();
if (fci(col, enf2, c, cc) < fci(col, par2, c, cc)) {
for (int j = 0; j < par1.length; j++) {
p[ind[1]][j] = enf2[j];
//      System.out.print(enf2[j]);
}
}

}

public static void mutation(int lig, int col, int p[][], double t[][],
double tc[][], double c[][], double cc[][]) {
int mut[] = new int[lig];
int mut1[] = new int[lig];
int id = (int) (Math.random() * 100);
//System.out.println(id);

for (int i = 0; i < lig; i++) {

if (i == id) {

for (int j = 0; j < col; j++) {
mut[j] = p[i][j];
mut1[j] = mut[j];
//    System.out.print(mut[j]);

}
}
}

//  System.out.println();
int id1 = (int) (Math.random() * col);
//System.out.println(id1);
for (int j = 0; j < col; j++) {

if (j == id1) {
mut1[j] = 49 - mut[j];
//
}
}
if ( (fti(col, mut1, t, tc) < fti(col, mut, t, tc)) &&
(fti(col, mut1, t, tc) < fti(col, mut, t, tc))) {
for (int j = 0; j < col; j++) {

p[id][j] = mut1[j];
//    System.out.print(mut1[j]);
}
}

}

public static double fti(int col, int individu[], double t[][],
double tc[][]) {
double s1 0, s2 0;

for (int j = 0; j < col; j++) {
s1 = s1 + t[individu[j]][j]; // p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++) {
s2 = s2 + tc[individu[j]][individu[j + 1]]; // p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
}

public static double fci(int col, int individu[], double c[][],
double cc[][]) {
double s1 0, s2 0;

for (int j = 0; j < col; j++) {
s1 = s1 + c[individu[j]][j]; // p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++) {
s2 = s2 + cc[individu[j]][individu[j + 1]]; // p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
}
}


je vous remercie beaucoup
cordiale salutation
j'attends votre réponse avec patience

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x
Meilleure réponse
elkasimi2007 20 Messages postés lundi 19 mars 2007Date d'inscription 26 mai 2011 Dernière intervention - 25 mai 2011 à 12:49
3
Merci
import biputil2.SequentialFile normalement doit être converti en C/C++ par
#include "SequentialFile.h"

donc j'aurai besoin du code de la classe biputil2.SequentialFile pour la traduire en C/C++ sinon je vais considérer que c'est un ficher normal et je vais utiliser que le type FILE* du C pour lire les données.


a bientôt

Merci elkasimi2007 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de elkasimi2007
Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 25 mai 2011 à 14:26
3
Merci
oui , vous pouvez utiliser la notion de fichier dans le c comme vous avez dites " type FILE* " ...
je n'oublierai pas votre aide, merci

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x
Meilleure réponse
elkasimi2007 20 Messages postés lundi 19 mars 2007Date d'inscription 26 mai 2011 Dernière intervention - 25 mai 2011 à 19:41
3
Merci
voila ce que j'ai réalisé :
le code compile bien chez moi si t'as des soucis ne t'hésite pas. Pourtant je crois que les deux fonctions f1 et f2 peuvent être groupé en une seule fonction f et en changeant que le paramètre p1 ou p2, même remarque pour fti et fci.

----------------------------------------------------------------------------------------


#include <stdio.h>
#include <stdlib.h>


int nbTache = 10;
FILE *fichier, *cache, *temps_access, *puissance_access, *pop, *tempsAg, *puisAg;

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1);
void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2);
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind);
void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc);
void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc);
double fti(int col, int * individu, double ** t, double ** tc);
double fci(int col, int * individu, double ** c, double ** cc);

int main(int argc, char ** argv)
{
double ** T = new double*[50];
for(int i 0;i < 50;++i) T[i] new double[nbTache];

double ** C = new double*[50];
for(int i 0;i < 50;++i) C[i] new double[nbTache];

pop = fopen("pop.txt", "r");

fichier = fopen("resultat.txt", "r");
for (int i = 0; i < 50; i++)
for (int j = 0; j < nbTache; j++)
fscanf(fichier, "%lf%lf", &T[i][j], &C[i][j]);

fclose(fichier);

double * Taille = new double[50];
cache = fopen("cache.txt", "r");
for (int h = 0; h < 50; h++) fscanf(cache, "%lf", &Taille[h]);
fclose(cache);

double *Taccess = new double[50];
temps_access = fopen("temps_access.txt", "r");
for (int h = 0; h < 50; h++) fscanf(temps_access, "%lf", &Taccess[h]);
fclose(temps_access);

double * Paccess = new double[50];
puissance_access = fopen("puissance_access.txt", "r");
for (int h = 0; h < 50; h++) fscanf(puissance_access, "%lf", &Paccess[h]);
fclose(puissance_access);

double ** Tc = new double*[50];
for(int i 0;i < 50;++i) Tc[i] new double[50];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
{
if (i j) Tc[i][j] 0;
else if (Taille[i] < Taille[j]) Tc[i][j] = 0;
else Tc[i][j] = Taccess[i] * (Taille[i] - Taille[j]);
}

double ** Cc = new double*[50];
for(int i 0;i < 50;++i) Cc[i] new double[50];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
{
if (i j) Cc[i][j] 0;
else if (Taille[i] < Taille[j]) Cc[i][j] = 0;
else Cc[i][j] = Paccess[i] * (Taille[i] - Taille[j]);
}


int ** p = new int*[100];
for(int i 0;i < 100;++i) p[i] new int[nbTache];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
p[i][j] = rand();

// Evaluation des individus ou calcul de Fitness
double * Ft = new double[100];
double * Fc = new double[100];
int * par1 = new int[nbTache];
int * par2 = new int[nbTache];
int * enf1 = new int[nbTache];
int * enf2 = new int[nbTache];
int ** p1 = new int*[100];
for(int i 0;i < 100;++i) p1[i] new int[nbTache];
int ** p2 = new int*[100];
for(int i 0;i < 100;++i) p2[i] new int[nbTache];
int * In = new int[2];

// Evaluation des individus
f1(100, nbTache, p, T, Tc, Ft, p1);
f2(100, nbTache, p, C, Cc, Fc, p2);
selection(100, nbTache, p, Ft, Fc, par1, par2, In);

for (int i = 0; i < 100; i++)
{
printf("%d ", i);

for (int j = 0; j < nbTache; j++) printf("%d ", p[i][j]);
printf("\n");
}

f1(100, nbTache, p, T, Tc, Ft, p1);
f2(100, nbTache, p, C, Cc, Fc, p2);

// Sélection
int k = 0;
int l = 1;

while (k < 500)
{
//nombre de génération
// croisement
croisement(100, nbTache, p, par1, par2, enf1, enf2, In, T, Tc, C, Cc);
// Mutation
mutation(100, nbTache, p, T, Tc, C, Cc);
// pop après reclassement, croisement et mutation

selection(100, nbTache, p, Ft, Fc, par1, par2, In);
//c la j'ai ajoutée une condition qui teste si c la premiere itération alors
//imprimé ou si pair de 10 imprimer aussi car je veux avoir 1 10 20 30 40 50 60 70 80 90 100

if (l % 50 == 0)
{
printf("%d\n", l);
for (int i = 0; i < 100; i++)
{
printf( "%d ", i);

for (int j = 0; j < nbTache; j++)
{
printf("%d ", p[i][j]);
}

printf("\n");

}

f1(100, nbTache, p, T, Tc, Ft, p1);

f2(100, nbTache, p, C, Cc, Fc, p2);
}

k++;
l++;
}

fclose(pop);
}

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1)
{
double s1, s2;
double * S1 = new double[lig];
double * S2 = new double[lig];

for (int i = 0; i < lig; i++)
{
s1 = 0;

for (int j = 0; j < col; j++)
s1 += t[p[i][j]][j];

S1[i] = s1;
}

for (int i = 0; i < lig; i++)
{
s2 = 0;

for (int j = 0; j < col-1; j++)
s2 += tc[p[i][j]][p[i][j + 1]];

S2[i] = s2;
}

tempsAg = fopen("tempsAg.txt", "w");
printf(" Ft\n");

for (int i = 0; i < lig; i++)
{
f[i] = S1[i] + S2[i];
fprintf(tempsAg, "%lf\n", f[i]);
}

fclose(tempsAg);
}

void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2)
{
double s1, s2;
double * S1 = new double[lig];
double * S2 = new double[lig];

for (int i = 0; i < lig; i++)
{
s1 = 0;
for (int j = 0; j < col; j++) s1 += c[p[i][j]][j];
S1[i] = s1;
}

for (int i = 0; i < lig; i++)
{
s2 = 0;
for (int j = 0; j < col - 1; j++) s2 += cc[p[i][j]][p[i][j + 1]];
S2[i] = s2;
}

puisAg = fopen("puisAg.txt", "w");
printf("Fc\n");

for (int i = 0; i < lig; i++)
{
f[i] = S1[i] + S2[i];
fprintf(puisAg, "%lf\n", f[i]);
printf("%lf\n", f[i]);
}

fclose(puisAg);
}

// Appliquer l'algorithme VEGA pour la selection des individus qui feront
// objet d'un croisement et/ou Mutation
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind)
{
// Sous pop 1 les 50 premiers individus sont classés selon F1
double z;
int x;

//Classement selon F1
for (int i = 0; i < ( (lig / 2) - 1); i++)
{
for (int j = i + 1; j < lig / 2; j++) {
if (f1[j] < f1[i]) {
z = f1[i];
f1[i] = f1[j];
f1[j] = z;
for (int h = 0; h < col; h++) {
x = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x;
}

}
}
}

double z1;
int x1; //classement selon F2
for (int i = (lig / 2); i < lig - 1; i++) {
for (int j = i + 1; j < lig; j++) {
if (f2[j] < f2[i]) {
z1 = f2[i];
f2[i] = f2[j];
f2[j] = z1;
for (int h = 0; h < col; h++) {
x1 = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x1;
}

}
}
}

ind[0] = rand() % 50;
ind[1] = rand() % 50;

for (int i = 0; i < lig; i++)
{
if (i == ind[0])
{
for (int j = 0; j < col; j++)
{
par1[j] = p[i][j];
}
}

}
for (int i = 0; i < lig; i++)
{
if (i == ind[1])
{
for (int j = 0; j < col; j++)
{
par2[j] = p[i][j];
}
}
}
}

void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc)
{

for (int j = 0; j < col / 2; j++)
{
enf1[j] = par1[j];
enf2[j] = par2[j];
}
for (int j = col / 2; j < col; j++)
{
enf1[j] = par2[j];
enf2[j] = par1[j];
}

if (fti(col, enf1, t, tc) < fti(col, par1, t, tc))
{
for (int j = 0; j < col; j++)
{
p[ind[0]][j] = enf1[j];
}
}

if (fci(col, enf2, c, cc) < fci(col, par2, c, cc))
{
for (int j = 0; j < nbTache; j++)
{
p[ind[1]][j] = enf2[j];
}
}

}

void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc)
{
int * mut = new int[lig];
int * mut1 = new int[lig];
int id = rand() % 100;

for (int i = 0; i < lig; i++)
{

if (i == id)
{
for (int j = 0; j < col; j++)
{
mut[j] = p[i][j];
mut1[j] = mut[j];
}
}
}

int id1 = rand() % col;

for (int j = 0; j < col; j++)
{
if (j == id1)
{
mut1[j] = 49 - mut[j];
}
}

if ( (fti(col, mut1, t, tc) < fti(col, mut, t, tc)) && (fti(col, mut1, t, tc) < fti(col, mut, t, tc)))
{
for (int j = 0; j < col; j++)
{
p[id][j] = mut1[j];
}
}

}

double fti(int col, int * individu, double ** t, double ** tc)
{
double s1 0, s2 0;

for (int j = 0; j < col; j++)
{
s1 += t[individu[j]][j];
// p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++)
{
s2 += tc[individu[j]][individu[j + 1]];
// p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
}

double fci(int col, int * individu, double ** c, double ** cc)
{
double s1 0, s2 0;

for (int j = 0; j < col; j++)
{
s1 += c[individu[j]][j];
// p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++)
{
s2 += cc[individu[j]][individu[j + 1]]; // p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
}
--------------------------------------------------------------------------------------

à bientôt

Merci elkasimi2007 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de elkasimi2007
Meilleure réponse
elkasimi2007 20 Messages postés lundi 19 mars 2007Date d'inscription 26 mai 2011 Dernière intervention - 25 mai 2011 à 19:47
3
Merci
#include <stdio.h>
#include <stdlib.h>


int nbTache = 10;
FILE *fichier, *cache, *temps_access, *puissance_access, *pop, *tempsAg, *puisAg;

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1);
void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2);
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind);
void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc);
void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc);
double fti(int col, int * individu, double ** t, double ** tc);
double fci(int col, int * individu, double ** c, double ** cc);

int main(int argc, char ** argv)
{
    double ** T = new double*[50];
    for(int i 0;i < 50;++i) T[i] new double[nbTache];

    double ** C = new double*[50];
    for(int i 0;i < 50;++i) C[i] new double[nbTache];

    pop = fopen("pop.txt", "r");

    fichier = fopen("resultat.txt", "r");
    for (int i = 0; i < 50; i++)
        for (int j = 0; j < nbTache; j++)
            fscanf(fichier, "%lf%lf", &T[i][j], &C[i][j]);

    fclose(fichier);

    double * Taille = new double[50];
    cache = fopen("cache.txt", "r");
    for (int h = 0; h < 50; h++) fscanf(cache, "%lf", &Taille[h]);
    fclose(cache);

    double *Taccess = new double[50];
    temps_access = fopen("temps_access.txt", "r");
    for (int h = 0; h < 50; h++) fscanf(temps_access, "%lf", &Taccess[h]);
    fclose(temps_access);

    double * Paccess = new double[50];
    puissance_access = fopen("puissance_access.txt", "r");
    for (int h = 0; h < 50; h++) fscanf(puissance_access, "%lf", &Paccess[h]);
    fclose(puissance_access);

    double ** Tc = new double*[50];
    for(int i 0;i < 50;++i) Tc[i] new double[50];

    for (int i = 0; i < 50; i++)
        for (int j = 0; j < 50; j++)
        {
            if (i j) Tc[i][j] 0;
            else if (Taille[i] < Taille[j]) Tc[i][j] = 0;
            else  Tc[i][j] = Taccess[i] * (Taille[i] - Taille[j]);
        }

    double ** Cc = new double*[50];
    for(int i 0;i < 50;++i) Cc[i] new double[50];

    for (int i = 0; i < 50; i++)
        for (int j = 0; j < 50; j++)
        {
            if (i j) Cc[i][j] 0;
            else if (Taille[i] < Taille[j]) Cc[i][j] = 0;
            else  Cc[i][j] = Paccess[i] * (Taille[i] - Taille[j]);
        }


    int ** p = new int*[100];
    for(int i 0;i < 100;++i) p[i] new int[nbTache];

    for (int i = 0; i < 50; i++)
        for (int j = 0; j < 50; j++)
            p[i][j] = rand();

    // Evaluation des individus ou calcul de Fitness
    double * Ft = new double[100];
    double * Fc = new double[100];
    int * par1 = new int[nbTache];
    int * par2 = new int[nbTache];
    int * enf1 = new int[nbTache];
    int * enf2 = new int[nbTache];
    int ** p1 = new int*[100];
    for(int i 0;i < 100;++i) p1[i] new int[nbTache];
    int ** p2 = new int*[100];
    for(int i 0;i < 100;++i) p2[i] new int[nbTache];
    int * In = new int[2];

    // Evaluation des individus
    f1(100, nbTache, p, T, Tc, Ft, p1);
    f2(100, nbTache, p, C, Cc, Fc, p2);
    selection(100, nbTache, p, Ft, Fc, par1, par2, In);

    for (int i = 0; i < 100; i++)
    {
        printf("%d ", i);

        for (int j = 0; j < nbTache; j++) printf("%d ", p[i][j]);
        printf("\n");
    }

    f1(100, nbTache, p, T, Tc, Ft, p1);
    f2(100, nbTache, p, C, Cc, Fc, p2);

    // Sélection
    int k = 0;
    int l = 1;

    while (k < 500)
    {
        //nombre de génération
        // croisement
        croisement(100, nbTache, p, par1, par2, enf1, enf2, In, T, Tc, C, Cc);
        // Mutation
        mutation(100, nbTache, p, T, Tc, C, Cc);
        // pop après reclassement, croisement et mutation

        selection(100, nbTache, p, Ft, Fc, par1, par2, In);
        //c la j'ai ajoutée une condition qui teste si c la premiere itération alors
        //imprimé ou si pair de 10 imprimer aussi car je veux avoir 1 10 20 30 40 50 60 70 80 90 100

        if  (l % 50 == 0)
        {
            printf("%d\n", l);
            for (int i = 0; i < 100; i++)
            {
                printf( "%d ", i);

                for (int j = 0; j < nbTache; j++)
                {
                    printf("%d ", p[i][j]);
                }

                printf("\n");

            }

            f1(100, nbTache, p, T, Tc, Ft, p1);

            f2(100, nbTache, p, C, Cc, Fc, p2);
        }

        k++;
        l++;
    }

    fclose(pop);
}

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1)
{
    double s1, s2;
    double * S1 = new double[lig];
    double * S2 = new double[lig];

    for (int i = 0; i < lig; i++)
    {
        s1 = 0;

        for (int j = 0; j < col; j++)
            s1 += t[p[i][j]][j];

        S1[i] = s1;
    }

    for (int i = 0; i < lig; i++)
    {
        s2 = 0;

        for (int j = 0; j < col-1; j++)
            s2 += tc[p[i][j]][p[i][j + 1]];

        S2[i] = s2;
    }

    tempsAg = fopen("tempsAg.txt", "w");
    printf(" Ft\n");

    for (int i = 0; i < lig; i++)
    {
        f[i] = S1[i] + S2[i];
        fprintf(tempsAg, "%lf\n", f[i]);
    }

    fclose(tempsAg);
}

void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2)
{
    double s1, s2;
    double * S1 = new double[lig];
    double * S2 = new double[lig];

    for (int i = 0; i < lig; i++)
    {
        s1 = 0;
        for (int j = 0; j < col; j++) s1 += c[p[i][j]][j];
        S1[i] = s1;
    }

    for (int i = 0; i < lig; i++)
    {
        s2 = 0;
        for (int j = 0; j < col - 1; j++) s2 += cc[p[i][j]][p[i][j + 1]];
        S2[i] = s2;
    }

    puisAg = fopen("puisAg.txt", "w");
    printf("Fc\n");

    for (int i = 0; i < lig; i++)
    {
        f[i] = S1[i] + S2[i];
        fprintf(puisAg, "%lf\n", f[i]);
        printf("%lf\n", f[i]);
    }

    fclose(puisAg);
}

// Appliquer l'algorithme VEGA pour la selection des individus qui feront
// objet d'un croisement et/ou Mutation
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind)
{
    // Sous pop 1 les 50 premiers individus sont classés selon F1
    double z;
    int x;

    //Classement selon F1
    for (int i = 0; i < ( (lig / 2) - 1); i++)
    {
        for (int j = i + 1; j < lig / 2; j++) {
            if (f1[j] < f1[i]) {
                z = f1[i];
                f1[i] = f1[j];
                f1[j] = z;
                for (int h = 0; h < col; h++) {
                    x = p[i][h];
                    p[i][h] = p[j][h];
                    p[j][h] = x;
                }

            }
        }
    }

    double z1;
    int x1; //classement selon F2
    for (int i = (lig / 2); i < lig - 1; i++) {
        for (int j = i + 1; j < lig; j++) {
            if (f2[j] < f2[i]) {
                z1 = f2[i];
                f2[i] = f2[j];
                f2[j] = z1;
                for (int h = 0; h < col; h++) {
                    x1 = p[i][h];
                    p[i][h] = p[j][h];
                    p[j][h] = x1;
                }

            }
        }
    }

    ind[0] = rand() % 50;
    ind[1] = rand() % 50;

    for (int i = 0; i < lig; i++)
    {
        if (i == ind[0])
        {
            for (int j = 0; j < col; j++)
            {
                par1[j] = p[i][j];
            }
        }

    }
    for (int i = 0; i < lig; i++)
    {
        if (i == ind[1])
        {
            for (int j = 0; j < col; j++)
            {
                par2[j] = p[i][j];
            }
        }
    }
}

void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc)
{

    for (int j = 0; j < col / 2; j++)
    {
        enf1[j] = par1[j];
        enf2[j] = par2[j];
    }
    for (int j = col / 2; j < col; j++)
    {
        enf1[j] = par2[j];
        enf2[j] = par1[j];
    }

    if (fti(col, enf1, t, tc) < fti(col, par1, t, tc))
    {
        for (int j = 0; j < col; j++)
        {
            p[ind[0]][j] = enf1[j];
        }
    }

    if (fci(col, enf2, c, cc) < fci(col, par2, c, cc))
    {
        for (int j = 0; j < nbTache; j++)
        {
            p[ind[1]][j] = enf2[j];
        }
    }

}

void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc)
{
    int * mut = new int[lig];
    int * mut1 = new int[lig];
    int id = rand() % 100;

    for (int i = 0; i < lig; i++)
    {

        if (i == id)
        {
            for (int j = 0; j < col; j++)
            {
                mut[j] = p[i][j];
                mut1[j] = mut[j];
            }
        }
    }

    int id1 = rand() % col;

    for (int j = 0; j < col; j++)
    {
        if (j == id1)
        {
            mut1[j] = 49 - mut[j];
        }
    }

    if ( (fti(col, mut1, t, tc) < fti(col, mut, t, tc)) && (fti(col, mut1, t, tc) < fti(col, mut, t, tc)))
    {
        for (int j = 0; j < col; j++)
        {
            p[id][j] = mut1[j];
        }
    }

}

double fti(int col, int * individu, double ** t, double ** tc)
{
    double s1 0, s2 0;

    for (int j = 0; j < col; j++)
    {
        s1 += t[individu[j]][j];
        // p[i]{j]= N°Configuration [j]=N° de la
        // tache
    }

    for (int j = 0; j < col - 1; j++)
    {
        s2 += tc[individu[j]][individu[j + 1]];
        // p[i]{j]=
        // N°Configuration
        // [j+1]=N°configuration
        // suivante dans la solution
        // en cours
    }

    return s1 + s2;
}

double fci(int col, int * individu, double ** c, double ** cc)
{
    double s1 0, s2 0;

    for (int j = 0; j < col; j++)
    {
        s1 += c[individu[j]][j];
        // p[i]{j]= N°Configuration [j]=N° de la
        // tache
    }

    for (int j = 0; j < col - 1; j++)
    {
        s2 += cc[individu[j]][individu[j + 1]]; // p[i]{j]=
        // N°Configuration
        // [j+1]=N°configuration
        // suivante dans la solution
        // en cours
    }

    return s1 + s2;
}

Merci elkasimi2007 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de elkasimi2007
Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 26 mai 2011 à 09:47
3
Merci
merci beaucoup cher amie tu m'as souvé la vie ... je te dois une !

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x
Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 26 mai 2011 à 10:28
3
Merci
re-bonjour mon amie,
j'ai des problème lors de la compilation du fichier; il m'affiche les messages suivants:

je crois que je dois mettre
int i; avant la boucle ... que voyez vous ?

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x
Meilleure réponse
elkasimi2007 20 Messages postés lundi 19 mars 2007Date d'inscription 26 mai 2011 Dernière intervention - 26 mai 2011 à 10:43
3
Merci
pour moi je l'ai compilé en tant que fichier C++
càd portant l'extension .cpp normalement tu copie coller le code dans un ficher pourtant l'extension .cpp tu le compile avec un compilateur dev-C++ ou codeblocks ou visual studio c++ express normalement ça doit marcher.

je crois que l'origine de ton erreur réside dans le fait que tu as nommer ton fichier .c au lieu de .cpp n'est ce pas ??

A bientôt

Merci elkasimi2007 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de elkasimi2007
Meilleure réponse
baster200x 47 Messages postés vendredi 7 mars 2008Date d'inscription 24 juillet 2011 Dernière intervention - 26 mai 2011 à 12:14
3
Merci
c bon j'ai pas fait attention à l'extension .cpp avant j'ai utilisé .c c'est pour ça sa n'a pas marché
--------------------------------------------------------------------
Compiling: main.cpp
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings

--------------------------------------------------------------------
merci encore ...

Merci baster200x 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de baster200x

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.