-/* $Id$ */
-
/* A few tests for the maxmin library */
-/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <math.h>
XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,
- "Messages specific for surf example");
+ "Messages specific for surf example");
-#define PRINT_VAR(var) DEBUG1(#var " = %g",lmm_variable_getvalue(var));
-#define SHOW_EXPR(expr) DEBUG1(#expr " = %g",expr);
+#define PRINT_VAR(var) XBT_DEBUG(#var " = %g",lmm_variable_getvalue(var));
+#define SHOW_EXPR(expr) XBT_DEBUG(#expr " = %g",expr);
/* */
/* ______ */
typedef enum {
MAXMIN,
- SDP,
LAGRANGE_RENO,
- LAGRANGE_VEGAS,
+ LAGRANGE_VEGAS
} method_t;
static double dichotomy(double func(double), double min, double max,
- double min_error)
+ double min_error)
{
double middle;
double min_func, max_func, middle_func;
while (overall_error > min_error) {
SHOW_EXPR(overall_error);
if ((min_func > 0 && max_func > 0) ||
- (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
+ (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
abort();
}
} else if (middle_func > 0) {
max = middle;
max_func = middle_func;
- overall_error = middle_func-min_func;
+ overall_error = middle_func - min_func;
} else {
overall_error = 0;
}
static double diff_lagrange_test_1(double x)
{
return -(3 / (1 + 3 * x * x / 2) -
- 3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
- 3 / (2 *
- (3 * (b_test_1 - a_test_1 + x) *
- (b_test_1 - a_test_1 + x) / 2 + 1)));
+ 3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
+ 3 / (2 *
+ (3 * (b_test_1 - a_test_1 + x) *
+ (b_test_1 - a_test_1 + x) / 2 + 1)));
}
void test1(method_t method);
if (method == LAGRANGE_VEGAS)
lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ func_vegas_fpi);
else if (method == LAGRANGE_RENO)
lmm_set_default_protocol_function(func_reno_f, func_reno_fpi,
- func_reno_fpi);
+ func_reno_fpi);
- Sys = lmm_system_new();
+ Sys = lmm_system_new(1);
L1 = lmm_constraint_new(Sys, (void *) "L1", a);
L2 = lmm_constraint_new(Sys, (void *) "L2", b);
L3 = lmm_constraint_new(Sys, (void *) "L3", a);
if (method == MAXMIN) {
lmm_solve(Sys);
-#ifdef HAVE_SDP
- } else if (method == SDP) {
- sdp_solve(Sys);
-#endif
} else if (method == LAGRANGE_VEGAS) {
double x = 3 * a / 4 - 3 * b / 8 +
- sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
+ sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
/* Computed with mupad and D_f=1.0 */
double max_deviation = 0.0;
if (x > a) {
lagrange_solve(Sys);
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
if (max_deviation > MAXMIN_PRECISION) {
- WARN1("Max Deviation from optimal solution : %g", max_deviation);
- WARN1("Found x = %1.20f", x);
- WARN2("Deviation from optimal solution (R_1 = %g): %1.20f", x,
- lmm_variable_getvalue(R_1) - x);
- WARN2("Deviation from optimal solution (R_2 = %g): %1.20f",
- b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
- WARN2("Deviation from optimal solution (R_3 = %g): %1.20f", x,
- lmm_variable_getvalue(R_3) - x);
- WARN2("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
- a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
+ XBT_WARN("Found x = %1.20f", x);
+ XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_1) - x);
+ XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
+ b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
+ XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_3) - x);
+ XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
+ a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
}
} else if (method == LAGRANGE_RENO) {
double x;
lagrange_solve(Sys);
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
if (max_deviation > MAXMIN_PRECISION) {
- WARN1("Max Deviation from optimal solution : %g", max_deviation);
- WARN1("Found x = %1.20f", x);
- WARN2("Deviation from optimal solution (R_1 = %g): %1.20f", x,
- lmm_variable_getvalue(R_1) - x);
- WARN2("Deviation from optimal solution (R_2 = %g): %1.20f",
- b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
- WARN2("Deviation from optimal solution (R_3 = %g): %1.20f", x,
- lmm_variable_getvalue(R_3) - x);
- WARN2("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
- a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
+ XBT_WARN("Found x = %1.20f", x);
+ XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_1) - x);
+ XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
+ b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
+ XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_3) - x);
+ XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
+ a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
}
} else {
- xbt_assert0(0, "Invalid method");
+ xbt_die( "Invalid method");
}
PRINT_VAR(R_1_2_3);
PRINT_VAR(R_2);
PRINT_VAR(R_3);
+ lmm_variable_free(Sys, R_1_2_3);
+ lmm_variable_free(Sys, R_1);
+ lmm_variable_free(Sys, R_2);
+ lmm_variable_free(Sys, R_3);
lmm_system_free(Sys);
}
if (method == LAGRANGE_VEGAS)
lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ func_vegas_fpi);
else if (method == LAGRANGE_RENO)
lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
- func_reno_fpi);
+ func_reno_fpi);
- Sys = lmm_system_new();
+ Sys = lmm_system_new(1);
CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
CPU2 = lmm_constraint_new(Sys, (void *) "CPU2", 100.0);
if (method == MAXMIN) {
lmm_solve(Sys);
-#ifdef HAVE_SDP
- } else if (method == SDP) {
- sdp_solve(Sys);
-#endif
} else if (method == LAGRANGE_VEGAS) {
lagrange_solve(Sys);
} else if (method == LAGRANGE_RENO) {
lagrange_solve(Sys);
} else {
- xbt_assert0(0, "Invalid method");
+ xbt_die("Invalid method");
}
PRINT_VAR(T1);
PRINT_VAR(T2);
+ lmm_variable_free(Sys, T1);
+ lmm_variable_free(Sys, T2);
lmm_system_free(Sys);
}
1, 1, 1, 1, 1
};
-
- /*A = xbt_new0(double*, links + 5);*/
- A = xbt_new0(double*, links + 5);
+
+ A = xbt_new0(double *, links + 5);
for (i = 0; i < links + 5; i++) {
A[i] = xbt_new0(double, flows + 5);
A[i][j] = 0.0;
if (i >= links || j >= flows) {
- A[i][j] = 0.0;
+ A[i][j] = 0.0;
}
}
}
if (method == LAGRANGE_VEGAS)
lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ func_vegas_fpi);
else if (method == LAGRANGE_RENO)
lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
- func_reno_fpi);
+ func_reno_fpi);
- Sys = lmm_system_new();
+ Sys = lmm_system_new(1);
- tmp_name = xbt_new0(char *,31);
+ tmp_name = xbt_new0(char *, 31);
/*
* Creates the constraints
*/
- tmp_cnst = xbt_new0(lmm_constraint_t,15);
+ tmp_cnst = xbt_new0(lmm_constraint_t, 15);
for (i = 0; i < 15; i++) {
tmp_name[i] = bprintf("C_%03d", i);
tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
/*
* Creates the variables
*/
- tmp_var = xbt_new0(lmm_variable_t,16);
+ tmp_var = xbt_new0(lmm_variable_t, 16);
for (j = 0; j < 16; j++) {
tmp_name[i + j] = bprintf("X_%03d", j);
tmp_var[j] =
- lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
+ lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
lmm_update_variable_weight(Sys, tmp_var[j], 1.0);
}
for (i = 0; i < 15; i++) {
for (j = 0; j < 16; j++) {
if (A[i][j]) {
- lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0);
+ lmm_expand(Sys, tmp_cnst[i], tmp_var[j], 1.0);
}
}
}
if (method == MAXMIN) {
lmm_solve(Sys);
-#ifdef HAVE_SDP
- } else if (method == SDP) {
- sdp_solve(Sys);
-#endif
} else if (method == LAGRANGE_VEGAS) {
lagrange_solve(Sys);
} else if (method == LAGRANGE_RENO) {
lagrange_solve(Sys);
} else {
- xbt_assert0(0, "Invalid method");
+ xbt_die("Invalid method");
}
for (j = 0; j < 16; j++) {
PRINT_VAR(tmp_var[j]);
}
- free(tmp_var);
- free(tmp_cnst);
- free(tmp_name);
+ for (j = 0; j < 16; j++)
+ lmm_variable_free(Sys, tmp_var[j]);
+ xbt_free(tmp_var);
+ xbt_free(tmp_cnst);
+ for (i = 0; i < 31; i++)
+ xbt_free(tmp_name[i]);
+ xbt_free(tmp_name);
lmm_system_free(Sys);
+ for (i = 0; i < links + 5; i++)
+ xbt_free(A[i]);
+ xbt_free(A);
}
#ifdef __BORLANDC__
{
xbt_init(&argc, argv);
- INFO0("***** Test 1 (Max-Min)");
+ XBT_INFO("***** Test 1 (Max-Min)");
test1(MAXMIN);
-#ifdef HAVE_SDP
- INFO0("***** Test 1 (SDP)");
- test1(SDP);
-#endif
- INFO0("***** Test 1 (Lagrange - Vegas)");
+ XBT_INFO("***** Test 1 (Lagrange - Vegas)");
test1(LAGRANGE_VEGAS);
- INFO0("***** Test 1 (Lagrange - Reno)");
+ XBT_INFO("***** Test 1 (Lagrange - Reno)");
test1(LAGRANGE_RENO);
-
-
- INFO0("***** Test 2 (Max-Min)");
+
+
+ XBT_INFO("***** Test 2 (Max-Min)");
test2(MAXMIN);
-#ifdef HAVE_SDP
- INFO0("***** Test 2 (SDP)");
- test2(SDP);
-#endif
- INFO0("***** Test 2 (Lagrange - Vegas)");
+ XBT_INFO("***** Test 2 (Lagrange - Vegas)");
test2(LAGRANGE_VEGAS);
- INFO0("***** Test 2 (Lagrange - Reno)");
+ XBT_INFO("***** Test 2 (Lagrange - Reno)");
test2(LAGRANGE_RENO);
- INFO0("***** Test 3 (Max-Min)");
+ XBT_INFO("***** Test 3 (Max-Min)");
test3(MAXMIN);
-#ifdef HAVE_SDP
- INFO0("***** Test 3 (SDP)");
- test3(SDP);
-#endif
- INFO0("***** Test 3 (Lagrange - Vegas)");
+ XBT_INFO("***** Test 3 (Lagrange - Vegas)");
test3(LAGRANGE_VEGAS);
- INFO0("***** Test 3 (Lagrange - Reno)");
+ XBT_INFO("***** Test 3 (Lagrange - Reno)");
test3(LAGRANGE_RENO);
return 0;