Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
75941f1c3286c4055a47a0f4d03975ccf548ea9c
[simgrid.git] / testsuite / surf / simeng_usage.c
1 /*      $Id$     */
2
3 /* A few tests for the maxmin library                                       */
4
5 /* Copyright (c) 2004 Arnaud Legrand. All rights reserved.                  */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10 #ifdef __BORLANDC__
11 #pragma hdrstop
12 #endif
13
14 #include "xbt/sysdep.h"
15 #include "surf/maxmin.h"
16 #include "surf/maxmin_private.h"
17
18 #include "xbt/log.h"
19 #include "xbt/module.h"
20
21
22 XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,"Messages specific for surf example");
23
24 #define PRINT_VAR(var) DEBUG1(#var " = %g",lmm_variable_getvalue(var));
25
26 /*                               */
27 /*        ______                 */
28 /*  ==l1==  L2  ==L3==           */
29 /*        ------                 */
30 /*                               */
31
32 typedef enum {
33   MAXMIN,
34   SDP,
35   LAGRANGE_RENO,
36   LAGRANGE_VEGAS,
37 } method_t;
38
39 void test1(method_t method);
40 void test1(method_t method)
41 {
42   lmm_system_t Sys = NULL ;
43   lmm_constraint_t L1 = NULL;
44   lmm_constraint_t L2 = NULL;
45   lmm_constraint_t L3 = NULL;
46
47   lmm_variable_t R_1_2_3 = NULL;
48   lmm_variable_t R_1 = NULL;
49   lmm_variable_t R_2 = NULL;
50   lmm_variable_t R_3 = NULL;
51
52   if(method==LAGRANGE_VEGAS){
53     //set default functions for TCP Vegas
54     lmm_set_default_protocol_functions(func_vegas_f, func_vegas_fp, func_vegas_fpi, func_vegas_fpip);
55   }else if(method==LAGRANGE_RENO){
56     //set default functions for TCP Reno
57     lmm_set_default_protocol_functions(func_reno_f, func_reno_fp, func_reno_fpi, func_reno_fpip);
58   }
59
60
61   Sys = lmm_system_new();
62   L1 = lmm_constraint_new(Sys, (void *) "L1", 1.0);
63   L2 = lmm_constraint_new(Sys, (void *) "L2", 10.0);
64   L3 = lmm_constraint_new(Sys, (void *) "L3", 1.0);
65
66   R_1_2_3 = lmm_variable_new(Sys, (void *) "R 1->2->3", 1.0 , -1.0 , 3);
67   R_1 = lmm_variable_new(Sys, (void *) "R 1", 1.0 , -1.0 , 1);
68   R_2 = lmm_variable_new(Sys, (void *) "R 2", 1.0 , -1.0 , 1);
69   R_3 = lmm_variable_new(Sys, (void *) "R 3", 1.0 , -1.0 , 1);
70
71   lmm_expand(Sys, L1, R_1_2_3, 1.0);
72   lmm_expand(Sys, L2, R_1_2_3, 1.0);
73   lmm_expand(Sys, L3, R_1_2_3, 1.0);
74
75   lmm_expand(Sys, L1, R_1, 1.0);
76
77   lmm_expand(Sys, L2, R_2, 1.0);
78
79   lmm_expand(Sys, L3, R_3, 1.0);
80
81
82   if(method==MAXMIN){
83     lmm_solve(Sys);
84 #ifdef HAVE_SDP
85   }else if(method==SDP){
86     sdp_solve(Sys);    
87 #endif
88   }else if(method==LAGRANGE_VEGAS){
89     //set default functions for TCP Vegas
90     lagrange_solve(Sys);  
91   }else if(method==LAGRANGE_RENO){
92     //set default functions for TCP Reno
93     lagrange_solve(Sys);  
94   }else{ 
95     xbt_assert0(0,"Invalid method");
96   }
97
98   PRINT_VAR(R_1_2_3);
99   PRINT_VAR(R_1);
100   PRINT_VAR(R_2);
101   PRINT_VAR(R_3);
102
103   lmm_system_free(Sys);
104
105
106 void test2(method_t method);
107 void test2(method_t method)
108 {
109   lmm_system_t Sys = NULL ;
110   lmm_constraint_t CPU1 = NULL;
111   lmm_constraint_t CPU2 = NULL;
112
113   lmm_variable_t T1 = NULL;
114   lmm_variable_t T2 = NULL;
115
116
117   if(method==LAGRANGE_VEGAS){
118     //set default functions for TCP Vegas
119     lmm_set_default_protocol_functions(func_vegas_f, func_vegas_fp, func_vegas_fpi, func_vegas_fpip);
120   }else if(method==LAGRANGE_RENO){
121     //set default functions for TCP Reno
122     lmm_set_default_protocol_functions(func_reno_f, func_reno_fp, func_reno_fpi, func_reno_fpip);
123   }
124
125   Sys = lmm_system_new();
126   CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
127   CPU2 = lmm_constraint_new(Sys, (void *) "CPU2", 100.0);
128
129   T1 = lmm_variable_new(Sys, (void *) "T1", 1.0 , -1.0 , 1);
130   T2 = lmm_variable_new(Sys, (void *) "T2", 1.0 , -1.0 , 1);
131
132   lmm_expand(Sys, CPU1, T1, 1.0);
133   lmm_expand(Sys, CPU2, T2, 1.0);
134
135
136
137   if(method==MAXMIN){
138     lmm_solve(Sys);
139 #ifdef HAVE_SDP
140   }else if(method==SDP){
141     sdp_solve(Sys);    
142 #endif
143   }else if(method==LAGRANGE_VEGAS){
144     //set default functions for TCP Vegas
145     lagrange_solve(Sys);  
146   }else if(method==LAGRANGE_RENO){
147     //set default functions for TCP Reno
148     lagrange_solve(Sys);  
149   }else{ 
150     xbt_assert0(0,"Invalid method");
151   }
152
153   PRINT_VAR(T1);
154   PRINT_VAR(T2);
155
156   DEBUG0("\n");
157
158   lmm_system_free(Sys);
159 }
160
161 void test3(method_t method);
162 void test3(method_t method)
163 {
164   int flows=11;  //flows and conexions are synonnims ?
165   int links=10;  //topology info
166   
167   //just to be carefull
168   int i = 0;
169   int j = 0;
170
171   double **A;
172
173   lmm_system_t Sys = NULL ;
174   lmm_constraint_t *tmp_cnst = NULL;
175   lmm_variable_t   *tmp_var  = NULL;
176   char **tmp_name;
177
178
179   /*array to add the the constraints of fictiv variables */
180   double B[15] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
181
182                 1, 1, 1, 1, 1};
183
184   A = (double **)calloc(links+5, sizeof(double));
185  
186   for(i=0 ; i< links+5; i++){
187     A[i] = (double *)calloc(flows+5, sizeof(double));
188
189     for(j=0 ; j< flows+5; j++){
190       A[i][j] = 0.0;
191
192       if(i >= links || j >= flows){
193           A[i][j] = 0.0;
194       }
195     }
196   }
197
198   /*matrix that store the constraints/topollogy*/
199   /*double A[15][16]=
200     {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,    0, 0, 0, 0, 0},
201      {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,    0, 0, 0, 0, 0},
202      {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
203      {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
204      {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
205      {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
206      {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,    0, 0, 0, 0, 0},
207      {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,    0, 0, 0, 0, 0},
208      {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,    0, 0, 0, 0, 0},
209      {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,    0, 0, 0, 0, 0},
210      
211      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    1, 0, 0, 0, 0},
212      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 1, 0, 0, 0},
213      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 1, 0, 0},
214      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 1, 0},
215      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 1}
216      }; */
217
218   A[0][1]  = 1.0;
219   A[0][7]  = 1.0;
220   
221   A[1][1]  = 1.0;
222   A[1][7]  = 1.0;
223   A[1][8]  = 1.0;
224
225   A[2][1]  = 1.0;
226   A[2][8]  = 1.0;
227
228   A[2][1]  = 1.0;
229   A[2][8]  = 1.0;
230
231   A[3][8]  = 1.0;
232
233   A[4][0]  = 1.0;
234   A[4][3]  = 1.0;
235   A[4][9]  = 1.0;
236
237   A[5][0]  = 1.0;
238   A[5][3]  = 1.0;
239   A[5][4]  = 1.0;
240   A[5][9]  = 1.0;
241
242   A[6][0]  = 1.0;
243   A[6][4]  = 1.0;
244   A[6][9]  = 1.0;
245   A[6][10] = 1.0;
246
247   A[7][2]  = 1.0;
248   A[7][4]  = 1.0;
249   A[7][6]  = 1.0;
250   A[7][9]  = 1.0;
251   A[7][10] = 1.0;
252
253   A[8][2]  = 1.0;
254   A[8][10] = 1.0;
255
256   A[9][5]  = 1.0;
257   A[9][6]  = 1.0;
258   A[9][9]  = 1.0;
259
260   
261   A[10][11] = 1.0;
262   A[11][12] = 1.0;
263   A[12][13] = 1.0;
264   A[13][14] = 1.0;
265   A[14][15] = 1.0;
266
267
268   if(method==LAGRANGE_VEGAS){
269     //set default functions for TCP Vegas
270     lmm_set_default_protocol_functions(func_vegas_f, func_vegas_fp, func_vegas_fpi, func_vegas_fpip);
271   }else if(method==LAGRANGE_RENO){
272     //set default functions for TCP Reno
273     lmm_set_default_protocol_functions(func_reno_f, func_reno_fp, func_reno_fpi, func_reno_fpip);
274   }
275
276   Sys = lmm_system_new();
277   
278
279
280   tmp_name = (char **) calloc(31, sizeof(char *));
281   for(i=0; i<31; i++){
282     tmp_name[i] = (char *) calloc(10, sizeof(char));
283   }
284   
285   /*
286    * Creates the constraints
287    */
288   tmp_cnst = calloc(15, sizeof(lmm_constraint_t));
289   for(i=0; i<15; i++){
290     sprintf(tmp_name[i], "C_%03d", i); 
291     tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
292   }
293
294
295   /*
296    * Creates the variables
297    */
298   tmp_var = calloc(16, sizeof(lmm_variable_t));
299   for(j=0; j<16; j++){
300     sprintf(tmp_name[i+j], "X_%03d", j); 
301     tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i+j], 1.0, -1.0 , 15);
302   }
303
304   /*
305    * Link constraints and variables
306    */
307   for(i=0;i<15;i++) { 
308     for(j=0; j<16; j++){
309       if(A[i][j]){
310         lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0); 
311       }
312     }
313   }
314
315
316
317   if(method==MAXMIN){
318     lmm_solve(Sys);
319 #ifdef HAVE_SDP
320   }else if(method==SDP){
321     sdp_solve(Sys);    
322 #endif
323   }else if(method==LAGRANGE_VEGAS){
324     //set default functions for TCP Vegas
325     lagrange_solve(Sys);  
326   }else if(method==LAGRANGE_RENO){
327     //set default functions for TCP Reno
328     lagrange_solve(Sys);  
329   }else{ 
330     xbt_assert0(0,"Invalid method");
331   }
332
333   for(j=0; j<16; j++){
334     PRINT_VAR(tmp_var[j]);
335   }
336
337   free(tmp_var);
338   free(tmp_cnst);
339   free(tmp_name);
340   lmm_system_free(Sys);
341 }
342
343 #ifdef __BORLANDC__
344 #pragma argsused
345 #endif
346
347 int main(int argc, char **argv)
348 {
349   xbt_init(&argc,argv);
350
351
352   DEBUG0("**************************** \n");
353   DEBUG0("*****                  ***** \n");
354   DEBUG0("*****      TEST 1      ***** \n");
355   DEBUG0("*****                  ***** \n");
356   DEBUG0("**************************** \n");
357
358
359   DEBUG0("***** Test 1 (Max-Min) ***** \n");
360   test1(MAXMIN);
361 #ifdef HAVE_SDP
362   DEBUG0("***** Test 1 (SDP) ***** \n");
363   test1(SDP);
364 #endif
365   DEBUG0("***** Test 1 (Lagrange - Vegas) ***** \n");
366   test1(LAGRANGE_VEGAS);
367   DEBUG0("***** Test 1 (Lagrange - Reno) ***** \n");
368   test1(LAGRANGE_RENO);
369
370
371   DEBUG0("**************************** \n");
372   DEBUG0("*****                  ***** \n");
373   DEBUG0("*****      TEST 2      ***** \n");
374   DEBUG0("*****                  ***** \n");
375   DEBUG0("**************************** \n");
376
377
378   DEBUG0("***** Test 2 (Max-Min) ***** \n");
379   test2(MAXMIN);
380 #ifdef HAVE_SDP
381   DEBUG0("***** Test 2 (SDP) ***** \n");
382   test2(SDP);
383 #endif
384   DEBUG0("***** Test 2 (Lagrange - Vegas) ***** \n");
385   test2(LAGRANGE_VEGAS);
386   DEBUG0("***** Test 2 (Lagrange - Reno) ***** \n");
387   test2(LAGRANGE_RENO);
388
389
390
391   DEBUG0("**************************** \n");
392   DEBUG0("*****                  ***** \n");
393   DEBUG0("*****      TEST 3      ***** \n");
394   DEBUG0("*****                  ***** \n");
395   DEBUG0("**************************** \n");
396
397
398   DEBUG0("***** Test 3 (Max-Min) ***** \n");
399   test3(MAXMIN);
400 #ifdef HAVE_SDP
401   DEBUG0("***** Test 3 (SDP) ***** \n");
402   test3(SDP);
403 #endif
404   DEBUG0("***** Test 3 (Lagrange - Vegas) ***** \n");
405   test3(LAGRANGE_VEGAS);
406   DEBUG0("***** Test 3 (Lagrange - Reno) ***** \n");
407   test3(LAGRANGE_RENO);
408
409   return 0;
410 }