aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-07-05 12:52:36 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-07-05 12:52:36 +0000
commitb536843b7b700223eed2028f678d8c9fab4e444e (patch)
treee58af1d069fafd62a0d583fdf443290d41c81a95 /src/ats
parent510a2a8ba07d13a1ee5b1aef3e9a9e8b542acb98 (diff)
downloadgnunet-b536843b7b700223eed2028f678d8c9fab4e444e.tar.gz
gnunet-b536843b7b700223eed2028f678d8c9fab4e444e.zip
improved network switching for ats
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats-solver_mlp.c76
1 files changed, 38 insertions, 38 deletions
diff --git a/src/ats/gnunet-service-ats-solver_mlp.c b/src/ats/gnunet-service-ats-solver_mlp.c
index 24fe8e0ac..b93508406 100644
--- a/src/ats/gnunet-service-ats-solver_mlp.c
+++ b/src/ats/gnunet-service-ats-solver_mlp.c
@@ -452,9 +452,13 @@ mlp_create_problem_update_value (struct MLP_Problem *p,
452 452
453 if (0 == (c_elems = glp_get_mat_row (p->prob, row, ind_array, val_array))) 453 if (0 == (c_elems = glp_get_mat_row (p->prob, row, ind_array, val_array)))
454 { 454 {
455 GNUNET_free (ind_array); 455 ind_array[1] = col;
456 GNUNET_free (val_array); 456 val_array[1] = val;
457 return GNUNET_SYSERR; 457 LOG (GNUNET_ERROR_TYPE_DEBUG, "[P] Updating value in [%s : %s] to `%.2f'\n",
458 glp_get_row_name (p->prob, row), glp_get_col_name (p->prob, col),
459 val);
460 glp_set_mat_row (p->prob, row, 1, ind_array, val_array);
461 return GNUNET_YES;
458 } 462 }
459 463
460 /* Update the value */ 464 /* Update the value */
@@ -467,10 +471,11 @@ mlp_create_problem_update_value (struct MLP_Problem *p,
467 { 471 {
468 GNUNET_free (ind_array); 472 GNUNET_free (ind_array);
469 GNUNET_free (val_array); 473 GNUNET_free (val_array);
474 GNUNET_break (0);
470 return GNUNET_SYSERR; /* not found */ 475 return GNUNET_SYSERR; /* not found */
471 } 476 }
472 /* Update value */ 477 /* Update value */
473 LOG (GNUNET_ERROR_TYPE_ERROR, "[P] Updating value in [%s : %s] from `%.2f' to `%.2f'\n", 478 LOG (GNUNET_ERROR_TYPE_DEBUG, "[P] Updating value in [%s : %s] from `%.2f' to `%.2f'\n",
474 glp_get_row_name (p->prob, row), glp_get_col_name (p->prob, col), 479 glp_get_row_name (p->prob, row), glp_get_col_name (p->prob, col),
475 val_array[c1], val); 480 val_array[c1], val);
476 if (val != val_array[c1]) 481 if (val != val_array[c1])
@@ -1241,13 +1246,6 @@ GAS_mlp_address_property_changed (void *solver,
1241 return; /* quality index not found */ 1246 return; /* quality index not found */
1242 } 1247 }
1243 1248
1244 LOG (GNUNET_ERROR_TYPE_ERROR,
1245 _("Updating address property `%s' for peer `%s' %p\n"),
1246 GNUNET_ATS_print_property_type (type),
1247 GNUNET_i2s(&address->peer),
1248 address,
1249 type_index, mlp->p.r_q[type_index]);
1250
1251 /* Update c7) [r_q[index]][c_b] = f_q * q_averaged[type_index] */ 1249 /* Update c7) [r_q[index]][c_b] = f_q * q_averaged[type_index] */
1252 if (GNUNET_YES == mlp_create_problem_update_value (&mlp->p, 1250 if (GNUNET_YES == mlp_create_problem_update_value (&mlp->p,
1253 mlp->p.r_q[type_index], mlpi->c_b, rel_value, __LINE__)) 1251 mlp->p.r_q[type_index], mlpi->c_b, rel_value, __LINE__))
@@ -1366,33 +1364,35 @@ GAS_mlp_address_change_network (void *solver,
1366 GNUNET_i2s (&address->peer), 1364 GNUNET_i2s (&address->peer),
1367 GNUNET_ATS_print_network_type(current_network), 1365 GNUNET_ATS_print_network_type(current_network),
1368 GNUNET_ATS_print_network_type(new_network)); 1366 GNUNET_ATS_print_network_type(new_network));
1369#if 0 1367
1370 /* Get row for this address */ 1368 for (c1 = 0; c1 < GNUNET_ATS_NetworkTypeCount; c1++)
1371 rows = glp_get_num_rows(mlp->p.prob); 1369 {
1372 ind = GNUNET_malloc (rows * sizeof (int) + 1); 1370 if (mlp->pv.quota_index[c1] == current_network)
1373 val = GNUNET_malloc (rows * sizeof (double) + 1); 1371 {
1374 length = glp_get_mat_col (mlp->p.prob, mlpi->c_b, ind, val); 1372 /* Remove from old network */
1375 1373 mlp_create_problem_update_value (&mlp->p,
1376 /* Remove index from old network */ 1374 mlp->p.r_quota[c1],
1377 for (c1 = 1; c1 < length +1; c1 ++) 1375 mlpi->c_b, 0.0, __LINE__);
1378 { 1376 break;
1379 if (ind[c1] == mlp->p.r_quota[c1]) 1377 }
1380 break; /* Found index for old network */ 1378 }
1381 } 1379
1382 val[c1] = 0.0; /* Remove from previous network */ 1380 for (c1 = 0; c1 < GNUNET_ATS_NetworkTypeCount; c1++)
1383 glp_set_mat_col (mlp->p.prob, mlpi->c_b, length, ind, val); 1381 {
1384 ind[c1] = mlp->p.r_quota[new_network]; /* Add to new network */ 1382 if (mlp->pv.quota_index[c1] == new_network)
1385 val[c1] = 1.0; 1383 {
1386 glp_set_mat_col (mlp->p.prob, mlpi->c_b, length, ind, val); 1384 /* Remove from old network */
1387 GNUNET_free (ind); 1385 if (GNUNET_SYSERR == mlp_create_problem_update_value (&mlp->p,
1388 GNUNET_free (val); 1386 mlp->p.r_quota[c1],
1389 1387 mlpi->c_b, 1.0, __LINE__))
1390 length = glp_get_mat_col (mlp->p.prob, mlpi->c_b, ind, val); 1388 {
1391 for (c1 = 1; c1 < length + 1; c1 ++) 1389 /* This quota did not exist in the problem, recreate */
1392 { 1390 GNUNET_break (0);
1393 fprintf (stderr, "%u: %s\n", ind[c1], glp_get_row_name(mlp->p.prob, ind[c1])); 1391 }
1394 } 1392 break;
1395#endif 1393 }
1394 }
1395
1396 mlp->mlp_prob_changed = GNUNET_YES; 1396 mlp->mlp_prob_changed = GNUNET_YES;
1397} 1397}
1398 1398