Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Here we go again.
[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
36 } method_t;
37
38 void test1(method_t method);
39 void test1(method_t method)
40 {
41   lmm_system_t Sys = NULL ;
42   lmm_constraint_t L1 = NULL;
43   lmm_constraint_t L2 = NULL;
44   lmm_constraint_t L3 = NULL;
45
46   lmm_variable_t R_1_2_3 = NULL;
47   lmm_variable_t R_1 = NULL;
48   lmm_variable_t R_2 = NULL;
49   lmm_variable_t R_3 = NULL;
50
51   Sys = lmm_system_new();
52   L1 = lmm_constraint_new(Sys, (void *) "L1", 1.0);
53   L2 = lmm_constraint_new(Sys, (void *) "L2", 10.0);
54   L3 = lmm_constraint_new(Sys, (void *) "L3", 1.0);
55
56   R_1_2_3 = lmm_variable_new(Sys, (void *) "R 1->2->3", 1.0 , -1.0 , 3);
57   R_1 = lmm_variable_new(Sys, (void *) "R 1", 1.0 , -1.0 , 1);
58   R_2 = lmm_variable_new(Sys, (void *) "R 2", 1.0 , -1.0 , 1);
59   R_3 = lmm_variable_new(Sys, (void *) "R 3", 1.0 , -1.0 , 1);
60
61   lmm_expand(Sys, L1, R_1_2_3, 1.0);
62   lmm_expand(Sys, L2, R_1_2_3, 1.0);
63   lmm_expand(Sys, L3, R_1_2_3, 1.0);
64
65   lmm_expand(Sys, L1, R_1, 1.0);
66
67   lmm_expand(Sys, L2, R_2, 1.0);
68
69   lmm_expand(Sys, L3, R_3, 1.0);
70
71   PRINT_VAR(R_1_2_3);
72   PRINT_VAR(R_1);
73   PRINT_VAR(R_2);
74   PRINT_VAR(R_3);
75
76   DEBUG0("\n");
77   if(method==MAXMIN)
78     lmm_solve(Sys);
79 #ifdef HAVE_SDP
80   else if(method==SDP)
81     sdp_solve(Sys);    
82 #endif
83   else if(method==LAGRANGE)
84     lagrange_solve(Sys);  
85   else 
86     xbt_assert0(0,"Invalid method");
87
88   PRINT_VAR(R_1_2_3);
89   PRINT_VAR(R_1);
90   PRINT_VAR(R_2);
91   PRINT_VAR(R_3);
92
93   lmm_system_free(Sys);
94
95
96 void test2(method_t method);
97 void test2(method_t method)
98 {
99   lmm_system_t Sys = NULL ;
100   lmm_constraint_t CPU1 = NULL;
101   lmm_constraint_t CPU2 = NULL;
102
103   lmm_variable_t T1 = NULL;
104   lmm_variable_t T2 = NULL;
105
106   Sys = lmm_system_new();
107   CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
108   CPU2 = lmm_constraint_new(Sys, (void *) "CPU2", 100.0);
109
110   T1 = lmm_variable_new(Sys, (void *) "T1", 1.0 , -1.0 , 1);
111   T2 = lmm_variable_new(Sys, (void *) "T2", 1.0 , -1.0 , 1);
112
113   lmm_expand(Sys, CPU1, T1, 1.0);
114   lmm_expand(Sys, CPU2, T2, 1.0);
115
116   PRINT_VAR(T1);
117   PRINT_VAR(T2);
118
119   DEBUG0("\n");
120   if(method==MAXMIN)
121     lmm_solve(Sys);
122 #ifdef HAVE_SDP
123   else if(method==SDP)
124     sdp_solve(Sys);    
125 #endif
126   else if(method==LAGRANGE)
127     lagrange_solve(Sys);  
128   else 
129     xbt_assert0(0,"Invalid method");
130
131   PRINT_VAR(T1);
132   PRINT_VAR(T2);
133
134   DEBUG0("\n");
135
136   lmm_system_free(Sys);
137 }
138
139 void test3(method_t method);
140 void test3(method_t method)
141 {
142   int flows=11;  //flows and conexions are synonnims ?
143   int links=10;  //topology info
144   
145   //just to be carefull
146   int i = 0;
147   int j = 0;
148
149   double **A;
150
151   lmm_system_t Sys = NULL ;
152   lmm_constraint_t *tmp_cnst = NULL;
153   lmm_variable_t   *tmp_var  = NULL;
154   char **tmp_name;
155
156
157   /*array to add the the constraints of fictiv variables */
158   double B[15] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
159                 1, 1, 1, 1, 1};
160
161   A = (double **)calloc(links+5, sizeof(double));
162  
163   for(i=0 ; i< links+5; i++){
164     A[i] = (double *)calloc(flows+5, sizeof(double));
165
166     for(j=0 ; j< flows+5; j++){
167       A[i][j] = 0.0;
168
169       if(i >= links || j >= flows){
170           A[i][j] = 0.0;
171       }
172     }
173   }
174
175   /*matrix that store the constraints/topollogy*/
176   /*double A[15][16]=
177     {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,    0, 0, 0, 0, 0},
178      {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,    0, 0, 0, 0, 0},
179      {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
180      {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
181      {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
182      {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
183      {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,    0, 0, 0, 0, 0},
184      {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,    0, 0, 0, 0, 0},
185      {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,    0, 0, 0, 0, 0},
186      {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,    0, 0, 0, 0, 0},
187      
188      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    1, 0, 0, 0, 0},
189      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 1, 0, 0, 0},
190      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 1, 0, 0},
191      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 1, 0},
192      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 1}
193      }; */
194
195   A[0][1]  = 1.0;
196   A[0][7]  = 1.0;
197   
198   A[1][1]  = 1.0;
199   A[1][7]  = 1.0;
200   A[1][8]  = 1.0;
201
202   A[2][1]  = 1.0;
203   A[2][8]  = 1.0;
204
205   A[2][1]  = 1.0;
206   A[2][8]  = 1.0;
207
208   A[3][8]  = 1.0;
209
210   A[4][0]  = 1.0;
211   A[4][3]  = 1.0;
212   A[4][9]  = 1.0;
213
214   A[5][0]  = 1.0;
215   A[5][3]  = 1.0;
216   A[5][4]  = 1.0;
217   A[5][9]  = 1.0;
218
219   A[6][0]  = 1.0;
220   A[6][4]  = 1.0;
221   A[6][9]  = 1.0;
222   A[6][10] = 1.0;
223
224   A[7][2]  = 1.0;
225   A[7][4]  = 1.0;
226   A[7][6]  = 1.0;
227   A[7][9]  = 1.0;
228   A[7][10] = 1.0;
229
230   A[8][2]  = 1.0;
231   A[8][10] = 1.0;
232
233   A[9][5]  = 1.0;
234   A[9][6]  = 1.0;
235   A[9][9]  = 1.0;
236
237   
238   A[10][11] = 1.0;
239   A[11][12] = 1.0;
240   A[12][13] = 1.0;
241   A[13][14] = 1.0;
242   A[14][15] = 1.0;
243
244
245   Sys = lmm_system_new();
246   
247
248
249   tmp_name = (char **) calloc(31, sizeof(char *));
250   for(i=0; i<31; i++){
251     tmp_name[i] = (char *) calloc(10, sizeof(char));
252   }
253   
254   /*
255    * Creates the constraints
256    */
257   tmp_cnst = calloc(15, sizeof(lmm_constraint_t));
258   for(i=0; i<15; i++){
259     sprintf(tmp_name[i], "C_%03d", i); 
260     tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
261   }
262
263
264   /*
265    * Creates the variables
266    */
267   tmp_var = calloc(16, sizeof(lmm_variable_t));
268   for(j=0; j<16; j++){
269     sprintf(tmp_name[i+j], "X_%03d", j); 
270     tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i+j], 1.0, -1.0 , 15);
271   }
272
273   /*
274    * Link constraints and variables
275    */
276   for(i=0;i<15;i++) { 
277     for(j=0; j<16; j++){
278       if(A[i][j]){
279         lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0); 
280       }
281     }
282   }
283
284
285   lmm_print(Sys);
286
287
288   for(j=0; j<16; j++){
289     PRINT_VAR(tmp_var[j]);
290   }
291
292   if(method==MAXMIN)
293     lmm_solve(Sys);
294 #ifdef HAVE_SDP
295   else if(method==SDP)
296     sdp_solve(Sys);    
297 #endif
298   else if(method==LAGRANGE)
299     lagrange_solve(Sys);  
300   else 
301     xbt_assert0(0,"Invalid method");
302
303   for(j=0; j<16; j++){
304     PRINT_VAR(tmp_var[j]);
305   }
306
307   free(tmp_var);
308   free(tmp_cnst);
309   free(tmp_name);
310   lmm_system_free(Sys);
311 }
312
313 #ifdef __BORLANDC__
314 #pragma argsused
315 #endif
316
317 int main(int argc, char **argv)
318 {
319   xbt_init(&argc,argv);
320
321 /*   DEBUG0("***** Test 1 (Max-Min) ***** \n"); */
322 /*   test1(MAXMIN); */
323 /* #ifdef HAVE_SDP */
324 /*   DEBUG0("***** Test 1 (SDP) ***** \n"); */
325 /*   test1(SDP); */
326 /* #endif */
327 /*   DEBUG0("***** Test 1 (Lagrange - dicotomi) ***** \n"); */
328 /*   test1(LAGRANGE); */
329
330
331 /*   DEBUG0("***** Test 2 (Max-Min) ***** \n"); */
332 /*   test2(MAXMIN); */
333 /* #ifdef HAVE_SDP */
334 /*   DEBUG0("***** Test 2 (SDP) ***** \n"); */
335 /*   test2(SDP); */
336 /* #endif */
337 /*   DEBUG0("***** Test 2 (Lagrange) ***** \n"); */
338 /*   test2(LAGRANGE); */
339
340
341 /*   DEBUG0("***** Test 3 (Max-Min) ***** \n"); */
342 /*   test3(MAXMIN); */
343 #ifdef HAVE_SDP
344   DEBUG0("***** Test 3 (SDP) ***** \n");
345   test3(SDP);
346 #endif
347   DEBUG0("***** Test 3 (Lagrange) ***** \n");
348   test3(LAGRANGE);
349
350
351   return 0;
352 }