aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-03-08 14:26:59 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-03-08 14:26:59 +0000
commit34c29bd7e3766d96c784e399e49b4a62831e7ab0 (patch)
tree135b51b6ee439a94ac8e3e158c57ed7a5898b010 /src
parentea0e0d2f150110ab95da3ee208965333581e3454 (diff)
downloadgnunet-34c29bd7e3766d96c784e399e49b4a62831e7ab0.tar.gz
gnunet-34c29bd7e3766d96c784e399e49b4a62831e7ab0.zip
writing solutions and MPS dumps
Diffstat (limited to 'src')
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c29
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.h11
-rw-r--r--src/ats/test_ats_mlp.c3
3 files changed, 29 insertions, 14 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c
index 185d24f7d..f8ac71bca 100644
--- a/src/ats/gnunet-service-ats_addresses_mlp.c
+++ b/src/ats/gnunet-service-ats_addresses_mlp.c
@@ -136,11 +136,6 @@
136#define LOG(kind,...) GNUNET_log_from (kind, "ats-mlp",__VA_ARGS__) 136#define LOG(kind,...) GNUNET_log_from (kind, "ats-mlp",__VA_ARGS__)
137 137
138/** 138/**
139 * Write MLP problem to disk
140 */
141#define WRITE_MLP GNUNET_NO
142
143/**
144 * Print debug output for mlp problem creation 139 * Print debug output for mlp problem creation
145 */ 140 */
146#define DEBUG_MLP_PROBLEM_CREATION GNUNET_YES 141#define DEBUG_MLP_PROBLEM_CREATION GNUNET_YES
@@ -917,6 +912,7 @@ int
917GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses) 912GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses)
918{ 913{
919 struct GAS_MLP_Handle *mlp = solver; 914 struct GAS_MLP_Handle *mlp = solver;
915 char *filename;
920 int res_lp = 0; 916 int res_lp = 0;
921 int res_mip = 0; 917 int res_mip = 0;
922 struct GNUNET_TIME_Absolute start_build; 918 struct GNUNET_TIME_Absolute start_build;
@@ -985,17 +981,20 @@ GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addr
985 if ((GNUNET_OK == res_lp) && (GNUNET_OK == res_mip)) 981 if ((GNUNET_OK == res_lp) && (GNUNET_OK == res_mip))
986 GNUNET_CONTAINER_multihashmap_iterate (addresses, &mlp_propagate_results, mlp); 982 GNUNET_CONTAINER_multihashmap_iterate (addresses, &mlp_propagate_results, mlp);
987 983
988 /* Write problem and solution to disk */
989#if WRITE_MLP
990 char *filename;
991 struct GNUNET_TIME_Absolute time = GNUNET_TIME_absolute_get(); 984 struct GNUNET_TIME_Absolute time = GNUNET_TIME_absolute_get();
992 GNUNET_asprintf (&filename, "problem_%llu.lp", time.abs_value); 985 if (GNUNET_YES == mlp->write_mip_mps)
993 glp_write_lp(mlp->p.prob, 0, filename); 986 {
994 GNUNET_free (filename); 987 /* Write problem and solution to disk */
995 GNUNET_asprintf (&filename, "problem_%llu.mip", time.abs_value); 988 GNUNET_asprintf (&filename, "problem_p_%u_a%u_%llu.mps", mlp->p.num_peers, mlp->p.num_addresses, time.abs_value);
996 glp_print_mip (mlp->p.prob, filename ); 989 glp_write_mps(mlp->p.prob, GLP_MPS_FILE, NULL, filename);
997 GNUNET_free (filename); 990 GNUNET_free (filename);
998#endif 991 }
992 if (GNUNET_YES == mlp->write_mip_sol)
993 {
994 GNUNET_asprintf (&filename, "problem_p_%u_a%u_%llu.sol", mlp->p.num_peers, mlp->p.num_addresses, time.abs_value);
995 glp_print_mip (mlp->p.prob, filename );
996 GNUNET_free (filename);
997 }
999 998
1000 /* Reset change and update marker */ 999 /* Reset change and update marker */
1001 mlp->control_param_lp.presolve = GLP_NO; 1000 mlp->control_param_lp.presolve = GLP_NO;
@@ -1778,6 +1777,8 @@ GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1778 mlp->pv.b_min = b_min; 1777 mlp->pv.b_min = b_min;
1779 mlp->pv.n_min = n_min; 1778 mlp->pv.n_min = n_min;
1780 mlp->pv.m_q = GNUNET_ATS_QualityPropertiesCount; 1779 mlp->pv.m_q = GNUNET_ATS_QualityPropertiesCount;
1780 mlp->write_mip_mps = GNUNET_NO;
1781 mlp->write_mip_sol = GNUNET_NO;
1781 mlp->mlp_prob_changed = GNUNET_NO; 1782 mlp->mlp_prob_changed = GNUNET_NO;
1782 mlp->mlp_prob_updated = GNUNET_NO; 1783 mlp->mlp_prob_updated = GNUNET_NO;
1783 mlp->mlp_auto_solve = GNUNET_YES; 1784 mlp->mlp_auto_solve = GNUNET_YES;
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.h b/src/ats/gnunet-service-ats_addresses_mlp.h
index 0c608b1d3..81b8a4d0a 100644
--- a/src/ats/gnunet-service-ats_addresses_mlp.h
+++ b/src/ats/gnunet-service-ats_addresses_mlp.h
@@ -273,6 +273,17 @@ struct GAS_MLP_Handle
273 * Can be disabled for test and measurements 273 * Can be disabled for test and measurements
274 */ 274 */
275 int mlp_auto_solve; 275 int mlp_auto_solve;
276
277 /**
278 * Write MILP problem to a MPS file
279 */
280 int write_mip_mps;
281
282 /**
283 * Write MILP problem to a MPS file
284 */
285 int write_mip_sol;
286
276}; 287};
277 288
278 289
diff --git a/src/ats/test_ats_mlp.c b/src/ats/test_ats_mlp.c
index c110fad29..4ba295ad5 100644
--- a/src/ats/test_ats_mlp.c
+++ b/src/ats/test_ats_mlp.c
@@ -272,6 +272,9 @@ check (void *cls, char *const *args, const char *cfgfile,
272 GAS_mlp_get_preferred_address (mlp, addresses, &p[0]); 272 GAS_mlp_get_preferred_address (mlp, addresses, &p[0]);
273 GAS_mlp_get_preferred_address (mlp, addresses, &p[1]); 273 GAS_mlp_get_preferred_address (mlp, addresses, &p[1]);
274 274
275 mlp->write_mip_mps = GNUNET_YES;
276 mlp->write_mip_sol = GNUNET_YES;
277
275 GAS_mlp_solve_problem (mlp, addresses); 278 GAS_mlp_solve_problem (mlp, addresses);
276} 279}
277 280