diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-22 15:45:15 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-22 15:45:15 +0000 |
commit | 230f67b5290a2f16a08160537f68a1e3ed5f0240 (patch) | |
tree | 162e2f3b970d2b26fa515dedd6fe9d8b63ac16b5 | |
parent | 66da925f71d9812482308ed4f974209c79a1b05e (diff) | |
download | gnunet-230f67b5290a2f16a08160537f68a1e3ed5f0240.tar.gz gnunet-230f67b5290a2f16a08160537f68a1e3ed5f0240.zip |
create constrain function
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 65 |
1 files changed, 12 insertions, 53 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c index f10e88007..6a103c8b3 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.c +++ b/src/ats/gnunet-service-ats_addresses_mlp.c | |||
@@ -941,6 +941,9 @@ mlp_create_problem_create_constraint (struct MLP_Problem *p, char *name, | |||
941 | case GLP_DB: | 941 | case GLP_DB: |
942 | GNUNET_asprintf(&op, "%.2f <= x <= %.2f", lb, ub); | 942 | GNUNET_asprintf(&op, "%.2f <= x <= %.2f", lb, ub); |
943 | break; | 943 | break; |
944 | case GLP_FX: | ||
945 | GNUNET_asprintf(&op, "%.2f == x == %.2f", lb, ub); | ||
946 | break; | ||
944 | case GLP_LO: | 947 | case GLP_LO: |
945 | GNUNET_asprintf(&op, "%.2f <= x <= inf", lb); | 948 | GNUNET_asprintf(&op, "%.2f <= x <= inf", lb); |
946 | break; | 949 | break; |
@@ -1052,78 +1055,34 @@ mlp_create_problem_add_invariant_rows (struct GAS_MLP_Handle *mlp, struct MLP_Pr | |||
1052 | int c; | 1055 | int c; |
1053 | 1056 | ||
1054 | /* Row for c4) minimum connection */ | 1057 | /* Row for c4) minimum connection */ |
1055 | name = "c4"; | 1058 | |
1056 | int min = mlp->pv.n_min; | ||
1057 | /* Number of minimum connections is min(|Peers|, n_min) */ | 1059 | /* Number of minimum connections is min(|Peers|, n_min) */ |
1058 | if (mlp->pv.n_min > p->num_peers) | 1060 | p->r_c4 = mlp_create_problem_create_constraint (p, "c4", GLP_LO, (mlp->pv.n_min > p->num_peers) ? p->num_peers : mlp->pv.n_min, 0.0); |
1059 | min = p->num_peers; | ||
1060 | p->r_c4 = glp_add_rows (p->prob, 1); | ||
1061 | glp_set_row_name (p->prob, p->r_c4, name); | ||
1062 | glp_set_row_bnds (p->prob, p->r_c4, GLP_LO, min, min); | ||
1063 | #if DEBUG_MLP_PROBLEM_CREATION | ||
1064 | LOG (GNUNET_ERROR_TYPE_DEBUG, "[P]: Added row [%u] `%s': %s %u\n", | ||
1065 | p->r_c4, name, | ||
1066 | ">=", min); | ||
1067 | #endif | ||
1068 | 1061 | ||
1069 | /* Add row for c6) */ | 1062 | /* Add row for c6) */ |
1070 | name = "c6"; | 1063 | p->r_c6 = mlp_create_problem_create_constraint (p, "c6", GLP_FX, 0.0, 0.0); |
1071 | p->r_c6 = glp_add_rows (p->prob, 1); | ||
1072 | /* Set type type to fix */ | ||
1073 | glp_set_row_name (p->prob, p->r_c6, name); | ||
1074 | glp_set_row_bnds (p->prob, p->r_c6, GLP_FX, 0.0, 0.0); | ||
1075 | #if DEBUG_MLP_PROBLEM_CREATION | ||
1076 | LOG (GNUNET_ERROR_TYPE_DEBUG, "[P]: Added row [%u] `%s': %s %u\n", | ||
1077 | p->r_c6, name, | ||
1078 | "==", 0); | ||
1079 | #endif | ||
1080 | /* c6 )Setting -D */ | 1064 | /* c6 )Setting -D */ |
1081 | mlp_create_problem_set_value (p, p->r_c6, p->c_d, -1); | 1065 | mlp_create_problem_set_value (p, p->r_c6, p->c_d, -1); |
1082 | 1066 | ||
1083 | /* Add rows for c 10) */ | 1067 | /* Add rows for c 10) */ |
1084 | for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) | 1068 | for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) |
1085 | { | 1069 | { |
1086 | p->r_quota[c] = glp_add_rows (p->prob, 1); | 1070 | char * text; |
1087 | char * text; | 1071 | GNUNET_asprintf(&text, "quota_ats_%s", GNUNET_ATS_print_network_type(mlp->pv.quota_index[c])); |
1088 | GNUNET_asprintf(&text, "quota_ats_%s", GNUNET_ATS_print_network_type(mlp->pv.quota_index[c])); | 1072 | p->r_quota[c] = mlp_create_problem_create_constraint (p, text, GLP_DB, 0.0, mlp->pv.quota_out[c]); |
1089 | glp_set_row_name (p->prob, p->r_quota[c], text); | 1073 | GNUNET_free (text); |
1090 | /* Set bounds to 0 <= x <= quota_out */ | ||
1091 | glp_set_row_bnds (p->prob, p->r_quota[c], GLP_UP, 0.0, mlp->pv.quota_out[c]); | ||
1092 | #if DEBUG_MLP_PROBLEM_CREATION | ||
1093 | LOG (GNUNET_ERROR_TYPE_DEBUG, "[P]: Added row [%u] `%s': %s %u\n", | ||
1094 | p->r_quota[c], text, | ||
1095 | "<=", mlp->pv.quota_out[c]); | ||
1096 | #endif | ||
1097 | GNUNET_free (text); | ||
1098 | } | 1074 | } |
1099 | 1075 | ||
1100 | /* Adding rows for c 8) */ | 1076 | /* Adding rows for c 8) */ |
1101 | p->r_c8 = glp_add_rows (p->prob, p->num_peers); | 1077 | p->r_c8 = mlp_create_problem_create_constraint (p, "c8", GLP_FX, 0.0, 0.0); |
1102 | name = "c8"; | ||
1103 | glp_set_row_name (p->prob, p->r_c8, "c8"); | ||
1104 | /* Set row bound == 0 */ | ||
1105 | glp_set_row_bnds (p->prob, p->r_c8, GLP_FX, 0.0, 0.0); | ||
1106 | #if DEBUG_MLP_PROBLEM_CREATION | ||
1107 | LOG (GNUNET_ERROR_TYPE_DEBUG, "[P]: Added row [%u] `%s': %s %u\n", | ||
1108 | p->r_c8, name, | ||
1109 | "==", 0); | ||
1110 | #endif | ||
1111 | /* -u */ | 1078 | /* -u */ |
1112 | mlp_create_problem_set_value (p, p->r_c8, p->c_u, -1); | 1079 | mlp_create_problem_set_value (p, p->r_c8, p->c_u, -1); |
1113 | 1080 | ||
1114 | /* c 7) For all quality metrics */ | 1081 | /* c 7) For all quality metrics */ |
1115 | for (c = 0; c < mlp->pv.m_q; c++) | 1082 | for (c = 0; c < mlp->pv.m_q; c++) |
1116 | { | 1083 | { |
1117 | p->r_q[c] = glp_add_rows (p->prob, 1); | ||
1118 | GNUNET_asprintf(&name, "c7_q%i_%s", c, mlp_ats_to_string(mlp->pv.q[c])); | 1084 | GNUNET_asprintf(&name, "c7_q%i_%s", c, mlp_ats_to_string(mlp->pv.q[c])); |
1119 | glp_set_row_name (p->prob, p->r_q[c], name); | 1085 | p->r_q[c] = mlp_create_problem_create_constraint (p, name, GLP_FX, 0.0, 0.0); |
1120 | /* Set row bound == 0 */ | ||
1121 | glp_set_row_bnds (p->prob, p->r_q[c], GLP_FX, 0.0, 0.0); | ||
1122 | #if DEBUG_MLP_PROBLEM_CREATION | ||
1123 | LOG (GNUNET_ERROR_TYPE_DEBUG, "[P]: Added row [%u] `%s': %s %u\n", | ||
1124 | p->r_q[c], name, | ||
1125 | "==", 0); | ||
1126 | #endif | ||
1127 | GNUNET_free (name); | 1086 | GNUNET_free (name); |
1128 | mlp_create_problem_set_value (p, p->r_q[c], p->c_q[c], -1); | 1087 | mlp_create_problem_set_value (p, p->r_q[c], p->c_q[c], -1); |
1129 | } | 1088 | } |