-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbenchmark.h
More file actions
228 lines (204 loc) · 11.7 KB
/
Copy pathbenchmark.h
File metadata and controls
228 lines (204 loc) · 11.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#ifndef BENCHMARK_H
#define BENCHMARK_H
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include "heuristique.h"
#include "genetic.h"
#define SIZE_RESULT_BUFFER 200
typedef struct {
char filename[256]; // vns
double value; // vns
double time; // vns
int length; // vns
int k_perturbation; // vns
char* type ; // vns_aleatoire, vns_gloutonne, genetic, hybrid
int pop_size; // genetic
double mutation_rate; // genetic
int generations; // genetic
int vns_iterations; // hybrid
} ResultEntry;
typedef struct {
ResultEntry greedy_vns;
ResultEntry random_vns;
ResultEntry genetic;
ResultEntry hybrid;
} ExperimentalResultsKSM;
/**
* @brief Mesure le temps CPU écoulé depuis le démarrage du programme.
*
* @return Le temps CPU écoulé en secondes (type double).
*/
double get_cpu_time();
/**
* @brief Exécute une expérience sur une instance de sac à dos donnée.
*
* @param instance L'instance du problème du sac à dos à résoudre.
* @param initialization_function La fonction d'initialisation pour générer la solution initiale.
* Elle doit prendre un paramètre `KnapsackInstance *` et retourner un pointeur vers une solution de type `KnapsackSolution`.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @param vns_iteration Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param filename Le nom du fichier pour enregistrer les résultats.
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
*
* @return Les résultats expérimentaux, comprenant les valeurs de la solution et le temps CPU pour chaque étape.
*/
ResultEntry run_experiment(const KnapsackInstance *instance, KnapsackSolution *(*initialization_function)(const KnapsackInstance *), int temps_max, int vns_iteration, const char *filename, int k_perturbation);
/**
* @brief Exécute l'algorithme génétique sur une instance de sac à dos donnée.
*
* @param instance L'instance du problème du sac à dos à résoudre.
* @param population_size La taille de la population pour l'algorithme génétique.
* @param generations Le nombre de générations à exécuter.
* @param mutation_rate Le taux de mutation pour l'algorithme génétique.
* @param vns_iterations Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
* @param time_limit Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @param filename Le nom du fichier pour enregistrer les résultats.
*
* @return Les résultats de l'algorithme, comprenant la valeur de la solution, le temps CPU et la taille de la solution.
*
* @note Cette fonction exécute l'algorithme génétique sur l'instance donnée et retourne les résultats sous forme de structure `ResultEntry`.
* Elle mesure le temps CPU écoulé pendant l'exécution et calcule la taille de la solution.
*/
ResultEntry run_hybrid_algorithm(const KnapsackInstance *instance, int population_size, int generations, double mutation_rate, int vns_iterations, int k_perturbation, int time_limit, const char *filename);
/**
* @brief Exécute l'algorithme génétique sur une instance de sac à dos donnée.
*
* @param instance L'instance du problème du sac à dos à résoudre.
* @param population_size La taille de la population pour l'algorithme génétique.
* @param generations Le nombre de générations à exécuter.
* @param mutation_rate Le taux de mutation pour l'algorithme génétique.
* @param time_limit Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @param filename Le nom du fichier pour enregistrer les résultats.
*
* @return Les résultats de l'algorithme, comprenant la valeur de la solution, le temps CPU et la taille de la solution.
*
* @note Cette fonction exécute l'algorithme génétique sur l'instance donnée et retourne les résultats sous forme de structure `ResultEntry`.
* Elle mesure le temps CPU écoulé pendant l'exécution et calcule la taille de la solution.
*/
ResultEntry run_genetic_algorithm(const KnapsackInstance *instance, int population_size, int generations, double mutation_rate, int time_limit, const char *filename) ;
/**
* @brief Exécute toutes les expériences sur une instance de sac à dos donnée.
*
* @param instance L'instance du problème du sac à dos à résoudre.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @param filename Le nom du fichier pour enregistrer les résultats.
* @param population_size La taille de la population pour l'algorithme génétique.
* @param generations Le nombre de générations à exécuter.
* @param mutation_rate Le taux de mutation pour l'algorithme génétique.
* @param vns_iteration Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
*
* @return Les résultats expérimentaux, comprenant les valeurs de la solution et le temps CPU pour chaque étape.
*/
ExperimentalResultsKSM run_all_experiments(const KnapsackInstance *instance, int temps_max, const char *filename, int population_size, int generations, double mutation_rate,int vns_iteration, int k_perturbation);
/**
* @brief Affiche les résultats des expérimentations sous forme de tableau.
*
* @param results Les résultats expérimentaux à afficher (de type `ExperimentalResultsKSM`).
*/
void print_results_table(const ExperimentalResultsKSM *results);
/**
* @brief Exporte les résultats expérimentaux dans un fichier CSV.
*
* @param results Les résultats expérimentaux à exporter (de type `ResultEntry`).
* @param data_index L'index des données à exporter.
* @param filename Le nom du fichier CSV dans lequel les résultats seront exportés.
*/
void export_csv(ResultEntry *results, int data_index, const char *filename);
/**
* @brief Exécute les algorithmes VNS Gloutonne et VNS Aléatoire sur un répertoire d'instances de sac à dos.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @param iteration Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute les algorithmes sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*/
int vns_gloutonne_vs_aleatoire(const char *repertoire, int temps_max, int iteration, int k_perturbation); ;
/**
* @brief Exécute l'algorithme VNS Gloutonne et VNS Aléatoire sur un répertoire d'instances de sac à dos.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param fichiers Les noms des fichiers d'instances à traiter.
* @param num_fichiers Le nombre de fichiers d'instances à traiter.
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute les algorithmes sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*/
int vns_gloutonne_vs_aleatoire_vns_iteration(const char *repertoire, const char *fichiers[], int num_fichiers, int k_perturbation); ;
/**
* @brief Exécute l'algorithme VNS Gloutonne et VNS Aléatoire sur un répertoire d'instances de sac à dos.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param fichiers Les noms des fichiers d'instances à traiter.
* @param num_fichiers Le nombre de fichiers d'instances à traiter.
* @param iteration Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute les algorithmes sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*
*/
int vns_gloutonne_vs_aleatoire_time(const char *repertoire, const char *fichiers[], int num_fichiers, int iteration, int k_perturbation); ;
/**
* @brief Exécute l'algorithme VNS Gloutonne et VNS Aléatoire sur un répertoire d'instances de sac à dos.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param fichiers Les noms des fichiers d'instances à traiter.
* @param num_fichiers Le nombre de fichiers d'instances à traiter.
* @param iteration Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute les algorithmes sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*/
int vns_gloutonne_vs_aleatoire_k_perturbation(const char *repertoire, const char *fichiers[], int num_fichiers, int iteration, int temps_max) ;
/**
* @brief Exécute l'algorithme génétique sur un répertoire d'instances de sac à dos.
*
* @param chemin_fichier Le chemin du fichier d'instance de sac à dos.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute l'algorithme génétique sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*/
int genetic_algorithm_tests(const char *chemin_fichier, int temps_max);
/**
* @brief Exécute l'algorithme hybride sur un répertoire d'instances de sac à dos.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param population_size La taille de la population pour l'algorithme génétique.
* @param generations Le nombre de générations à exécuter.
* @param mutation_rate Le taux de mutation pour l'algorithme génétique.
* @param vns_iterations Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
*
* @note Cette fonction lit tous les fichiers d'instances dans le répertoire donné, exécute l'algorithme hybride sur chaque instance,
* * et exporte les résultats dans un fichier CSV.
*/
int run_hybrid_algorithm_test(const char *repertoire, int population_size, int generations, double mutation_rate, int vns_iterations, int k_perturbation, int temps_max);
/**
* @brief Exécute un test hybride entre l'algorithme génétique et l'algorithme VNS sur une instance de sac à dos donnée.
*
* @param repertoire Le chemin du répertoire contenant les fichiers d'instances.
* @param population_size La taille de la population pour l'algorithme génétique.
* @param generations Le nombre de générations à exécuter.
* @param mutation_rate Le taux de mutation pour l'algorithme génétique.
* @param vns_iterations Le nombre d'itérations pour l'algorithme de recherche à voisinage variable (VNS).
* @param k_perturbation Le paramètre de perturbation pour l'algorithme VNS.
* @param temps_max Le temps maximum autorisé pour l'exécution de l'algorithme (en secondes).
* @return 0 en cas de succès, 1 en cas d'erreur.
*/
int hybrid_vs_genetic_test(const char *repertoire, int population_size, int generations, double mutation_rate, int vns_iterations, int k_perturbation, int temps_max);
#endif // BENCHMARK_H