Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
this was renamed
[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   PRINT_VAR(R_1_2_3);
82   PRINT_VAR(R_1);
83   PRINT_VAR(R_2);
84   PRINT_VAR(R_3);
85
86   DEBUG0("\n");
87
88
89   if(method==MAXMIN){
90     lmm_solve(Sys);
91 #ifdef HAVE_SDP
92   }else if(method==SDP){
93     sdp_solve(Sys);    
94 #endif
95   }else if(method==LAGRANGE_VEGAS){
96     //set default functions for TCP Vegas
97     lagrange_solve(Sys);  
98   }else if(method==LAGRANGE_RENO){
99     //set default functions for TCP Reno
100     lagrange_solve(Sys);  
101   }else{ 
102     xbt_assert0(0,"Invalid method");
103   }
104
105   PRINT_VAR(R_1_2_3);
106   PRINT_VAR(R_1);
107   PRINT_VAR(R_2);
108   PRINT_VAR(R_3);
109
110   lmm_system_free(Sys);
111
112
113 void test2(method_t method);
114 void test2(method_t method)
115 {
116   lmm_system_t Sys = NULL ;
117   lmm_constraint_t CPU1 = NULL;
118   lmm_constraint_t CPU2 = NULL;
119
120   lmm_variable_t T1 = NULL;
121   lmm_variable_t T2 = NULL;
122
123
124   if(method==LAGRANGE_VEGAS){
125     //set default functions for TCP Vegas
126     lmm_set_default_protocol_functions(func_vegas_f, func_vegas_fp, func_vegas_fpi, func_vegas_fpip);
127   }else if(method==LAGRANGE_RENO){
128     //set default functions for TCP Reno
129     lmm_set_default_protocol_functions(func_reno_f, func_reno_fp, func_reno_fpi, func_reno_fpip);
130   }
131
132   Sys = lmm_system_new();
133   CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
134   CPU2 = lmm_constraint_new(Sys, (void *) "CPU2", 100.0);
135
136   T1 = lmm_variable_new(Sys, (void *) "T1", 1.0 , -1.0 , 1);
137   T2 = lmm_variable_new(Sys, (void *) "T2", 1.0 , -1.0 , 1);
138
139   lmm_expand(Sys, CPU1, T1, 1.0);
140   lmm_expand(Sys, CPU2, T2, 1.0);
141
142   PRINT_VAR(T1);
143   PRINT_VAR(T2);
144
145   DEBUG0("\n");
146
147
148   if(method==MAXMIN){
149     lmm_solve(Sys);
150 #ifdef HAVE_SDP
151   }else if(method==SDP){
152     sdp_solve(Sys);    
153 #endif
154   }else if(method==LAGRANGE_VEGAS){
155     //set default functions for TCP Vegas
156     lagrange_solve(Sys);  
157   }else if(method==LAGRANGE_RENO){
158     //set default functions for TCP Reno
159     lagrange_solve(Sys);  
160   }else{ 
161     xbt_assert0(0,"Invalid method");
162   }
163
164   PRINT_VAR(T1);
165   PRINT_VAR(T2);
166
167   DEBUG0("\n");
168
169   lmm_system_free(Sys);
170 }
171
172 void test3(method_t method);
173 void test3(method_t method)
174 {
175   int flows=11;  //flows and conexions are synonnims ?
176   int links=10;  //topology info
177   
178   //just to be carefull
179   int i = 0;
180   int j = 0;
181
182   double **A;
183
184   lmm_system_t Sys = NULL ;
185   lmm_constraint_t *tmp_cnst = NULL;
186   lmm_variable_t   *tmp_var  = NULL;
187   char **tmp_name;
188
189
190   /*array to add the the constraints of fictiv variables */
191   double B[15] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
192
193                 1, 1, 1, 1, 1};
194
195   A = (double **)calloc(links+5, sizeof(double));
196  
197   for(i=0 ; i< links+5; i++){
198     A[i] = (double *)calloc(flows+5, sizeof(double));
199
200     for(j=0 ; j< flows+5; j++){
201       A[i][j] = 0.0;
202
203       if(i >= links || j >= flows){
204           A[i][j] = 0.0;
205       }
206     }
207   }
208
209   /*matrix that store the constraints/topollogy*/
210   /*double A[15][16]=
211     {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,    0, 0, 0, 0, 0},
212      {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,    0, 0, 0, 0, 0},
213      {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
214      {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
215      {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
216      {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
217      {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,    0, 0, 0, 0, 0},
218      {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,    0, 0, 0, 0, 0},
219      {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,    0, 0, 0, 0, 0},
220      {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,    0, 0, 0, 0, 0},
221      
222      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    1, 0, 0, 0, 0},
223      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 1, 0, 0, 0},
224      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 1, 0, 0},
225      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 1, 0},
226      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 1}
227      }; */
228
229   A[0][1]  = 1.0;
230   A[0][7]  = 1.0;
231   
232   A[1][1]  = 1.0;
233   A[1][7]  = 1.0;
234   A[1][8]  = 1.0;
235
236   A[2][1]  = 1.0;
237   A[2][8]  = 1.0;
238
239   A[2][1]  = 1.0;
240   A[2][8]  = 1.0;
241
242   A[3][8]  = 1.0;
243
244   A[4][0]  = 1.0;
245   A[4][3]  = 1.0;
246   A[4][9]  = 1.0;
247
248   A[5][0]  = 1.0;
249   A[5][3]  = 1.0;
250   A[5][4]  = 1.0;
251   A[5][9]  = 1.0;
252
253   A[6][0]  = 1.0;
254   A[6][4]  = 1.0;
255   A[6][9]  = 1.0;
256   A[6][10] = 1.0;
257
258   A[7][2]  = 1.0;
259   A[7][4]  = 1.0;
260   A[7][6]  = 1.0;
261   A[7][9]  = 1.0;
262   A[7][10] = 1.0;
263
264   A[8][2]  = 1.0;
265   A[8][10] = 1.0;
266
267   A[9][5]  = 1.0;
268   A[9][6]  = 1.0;
269   A[9][9]  = 1.0;
270
271   
272   A[10][11] = 1.0;
273   A[11][12] = 1.0;
274   A[12][13] = 1.0;
275   A[13][14] = 1.0;
276   A[14][15] = 1.0;
277
278
279   if(method==LAGRANGE_VEGAS){
280     //set default functions for TCP Vegas
281     lmm_set_default_protocol_functions(func_vegas_f, func_vegas_fp, func_vegas_fpi, func_vegas_fpip);
282   }else if(method==LAGRANGE_RENO){
283     //set default functions for TCP Reno
284     lmm_set_default_protocol_functions(func_reno_f, func_reno_fp, func_reno_fpi, func_reno_fpip);
285   }
286
287   Sys = lmm_system_new();
288   
289
290
291   tmp_name = (char **) calloc(31, sizeof(char *));
292   for(i=0; i<31; i++){
293     tmp_name[i] = (char *) calloc(10, sizeof(char));
294   }
295   
296   /*
297    * Creates the constraints
298    */
299   tmp_cnst = calloc(15, sizeof(lmm_constraint_t));
300   for(i=0; i<15; i++){
301     sprintf(tmp_name[i], "C_%03d", i); 
302     tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
303   }
304
305
306   /*
307    * Creates the variables
308    */
309   tmp_var = calloc(16, sizeof(lmm_variable_t));
310   for(j=0; j<16; j++){
311     sprintf(tmp_name[i+j], "X_%03d", j); 
312     tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i+j], 1.0, -1.0 , 15);
313   }
314
315   /*
316    * Link constraints and variables
317    */
318   for(i=0;i<15;i++) { 
319     for(j=0; j<16; j++){
320       if(A[i][j]){
321         lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0); 
322       }
323     }
324   }
325
326
327   lmm_print(Sys);
328
329
330   for(j=0; j<16; j++){
331     PRINT_VAR(tmp_var[j]);
332   }
333
334   if(method==MAXMIN){
335     lmm_solve(Sys);
336 #ifdef HAVE_SDP
337   }else if(method==SDP){
338     sdp_solve(Sys);    
339 #endif
340   }else if(method==LAGRANGE_VEGAS){
341     //set default functions for TCP Vegas
342     lagrange_solve(Sys);  
343   }else if(method==LAGRANGE_RENO){
344     //set default functions for TCP Reno
345     lagrange_solve(Sys);  
346   }else{ 
347     xbt_assert0(0,"Invalid method");
348   }
349
350   for(j=0; j<16; j++){
351     PRINT_VAR(tmp_var[j]);
352   }
353
354   free(tmp_var);
355   free(tmp_cnst);
356   free(tmp_name);
357   lmm_system_free(Sys);
358 }
359
360 #ifdef __BORLANDC__
361 #pragma argsused
362 #endif
363
364 int main(int argc, char **argv)
365 {
366   xbt_init(&argc,argv);
367
368
369
370   DEBUG0("***** Test 1 (Max-Min) ***** \n");
371   test1(MAXMIN);
372 #ifdef HAVE_SDP
373   DEBUG0("***** Test 1 (SDP) ***** \n");
374   test1(SDP);
375 #endif
376   DEBUG0("***** Test 1 (Lagrange - Vegas) ***** \n");
377   test1(LAGRANGE_VEGAS);
378   DEBUG0("***** Test 1 (Lagrange - Reno) ***** \n");
379   test1(LAGRANGE_RENO);
380
381   DEBUG0("***** Test 2 (Max-Min) ***** \n");
382   test2(MAXMIN);
383 #ifdef HAVE_SDP
384   DEBUG0("***** Test 2 (SDP) ***** \n");
385   test2(SDP);
386 #endif
387   DEBUG0("***** Test 2 (Lagrange - Vegas) ***** \n");
388   test2(LAGRANGE_VEGAS);
389   DEBUG0("***** Test 2 (Lagrange - Reno) ***** \n");
390   test2(LAGRANGE_RENO);
391
392   DEBUG0("***** Test 3 (Max-Min) ***** \n");
393   test3(MAXMIN);
394 #ifdef HAVE_SDP
395   DEBUG0("***** Test 3 (SDP) ***** \n");
396   test3(SDP);
397 #endif
398   DEBUG0("***** Test 3 (Lagrange - Vegas) ***** \n");
399   test3(LAGRANGE_VEGAS);
400   DEBUG0("***** Test 3 (Lagrange - Reno) ***** \n");
401   test3(LAGRANGE_RENO);
402
403   return 0;
404 }