begin process at 2012 05 28 08:04:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

cherche un algorithme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

cherche un algorithme

lundi 23 mai 2011 à 10:47:07 | cherche un algorithme

baster200x

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 .
mardi 24 mai 2011 à 14:23:36 | Re : cherche un algorithme

baster200x

Réponse acceptée !
ow!!! personne ne répondre ?
mardi 24 mai 2011 à 18:59:35 | Re : cherche un algorithme

elkasimi2007

Réponse acceptée !
Salut,
envoie moi l'algorithme en pseudo code svp ou même en JAVA j’essaierai de t'aider

mercredi 25 mai 2011 à 12:20:14 | Re : cherche un algorithme

baster200x

Réponse acceptée !
merci pour la réponse; voila l'algorithme,
Code Java :
package publication;

import biputil2.SequentialFile;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2010</p>
 * <p>Company: </p>
 * @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
mercredi 25 mai 2011 à 12:49:19 | Re : cherche un algorithme

elkasimi2007

Réponse acceptée !


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
mercredi 25 mai 2011 à 14:26:56 | Re : cherche un algorithme

baster200x

Réponse acceptée !
oui , vous pouvez utiliser la notion de fichier dans le c comme vous avez dites " type FILE* " ...
je n'oublierai pas votre aide, merci
mercredi 25 mai 2011 à 19:41:09 | Re : cherche un algorithme

elkasimi2007

Réponse acceptée !
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
mercredi 25 mai 2011 à 19:47:00 | Re : cherche un algorithme

elkasimi2007

Réponse acceptée !
[code]
#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;
}

[/code]
jeudi 26 mai 2011 à 09:47:08 | Re : cherche un algorithme

baster200x

Réponse acceptée !
merci beaucoup cher amie tu m'as souvé la vie ... je te dois une !
jeudi 26 mai 2011 à 10:28:02 | Re : cherche un algorithme

baster200x

Réponse acceptée !
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 ?

1 2

Cette discussion est classée dans : java, cherche, algorithme


Répondre à ce message

Sujets en rapport avec ce message

cherche equivalent des api java mais pour C [ par jjaime ] salut les gars , je cherche un listing avec une description des méthodes, fonctions,... du langage C . Si qqun pouvait me donner une lien ou autre c cherche le code source en c d'un algorithme en robotique [ par nedjima ] SOS. bonjour tout le mondeJe n'arrive pas à programmer en c un algorithme que j'ai lu dans un article ca conserne le domaine de planification de traje demande algorithme ou code java [ par hajjicheri ] hajjij'ai un image fixe.j'applique le phenomene de detecteur de harris qui permet d'extraire les coins de contours les points recuperes sont souvent u je cherche algorithme de data encryption standard DES qui traduit en c/c++ [ par jlassie17 ] svp qui me donne cette algorithme en c ou c++ je cherche un algorithme de l'indexation d'un texte [ par baster200x ] bonjour tout le monde, ben je cherche un algorithme qui fait l'indexation d'un texte par la méthode de "sac de mots".c-à-d : l'algorithme doit fournir Cherche programmeur C, C+, C++, Java ou peu importe [ par jorockstar ] Bonjours, je suis nouveau ici et je cherche à élargir mon niveau de connaissance en programmation (quoique il est pas mal à zéro [^^happy8]), donc je cherche à inclure un algorithme [ par baster200x ] bonjour tous le mande [^^happy13]; vue que je suis débutant en programmation (en terme générale), j'ai besoin toujours de votre aide, alors Réseau de neurone - Erreur avec ma propre fonction de transfert [ par sondos01 ] Bonjour, J'effectue un entrainement d' un Réseau de neurones dans lequel j'ajoute une fonction de transfert que j'ai moi même crée. La fonction de t algorithme de Shannon [ par chiheb1106 ] SVP je veux avoir le code de compression d'un fichier texte selon l'algorithme de Shannon


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales