Accueil > Forum > > > > cherche un algorithme
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 ? 
|
|
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
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|