diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-07-05 12:52:36 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-07-05 12:52:36 +0000 |
commit | b536843b7b700223eed2028f678d8c9fab4e444e (patch) | |
tree | e58af1d069fafd62a0d583fdf443290d41c81a95 /src/ats | |
parent | 510a2a8ba07d13a1ee5b1aef3e9a9e8b542acb98 (diff) | |
download | gnunet-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.c | 76 |
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 | ||