gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19266 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r19266 - gnunet/src/ats
Date: Thu, 19 Jan 2012 18:29:18 +0100

Author: wachs
Date: 2012-01-19 18:29:18 +0100 (Thu, 19 Jan 2012)
New Revision: 19266

Added:
   gnunet/src/ats/perf_ats_mlp.c
Modified:
   gnunet/src/ats/Makefile.am
   gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
   gnunet/src/ats/gnunet-service-ats_addresses_mlp.h
   gnunet/src/ats/test_ats_mlp.c
Log:
- latest changes


Modified: gnunet/src/ats/Makefile.am
===================================================================
--- gnunet/src/ats/Makefile.am  2012-01-19 16:51:10 UTC (rev 19265)
+++ gnunet/src/ats/Makefile.am  2012-01-19 17:29:18 UTC (rev 19266)
@@ -17,6 +17,7 @@
   GN_LIBGLPK = -lglpk
   GN_MLP_SRC = gnunet-service-ats_addresses_mlp.c 
gnunet-service-ats_addresses_mlp.h
   GN_MLP_TEST = test_ats_mlp
+  GN_MLP_PERF = perf_ats_mlp
 endif
 
 lib_LTLIBRARIES = libgnunetats.la
@@ -52,7 +53,8 @@
 
 check_PROGRAMS = \
  test_ats_api_scheduling \
- $(GN_MLP_TEST)
+ $(GN_MLP_TEST) \
+ $(GN_MLP_PERF)
 # test_ats_api_scheduling_get_type
 # test_ats_api_bandwidth_consumption
 
@@ -68,6 +70,14 @@
   $(GN_LIBGLPK) \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la
+  
+perf_ats_mlp_SOURCES = \
+ $(GN_MLP_SRC) \
+ perf_ats_mlp.c
+perf_ats_mlp_LDADD = \
+  $(GN_LIBGLPK) \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  $(top_builddir)/src/statistics/libgnunetstatistics.la  
 endif
 
 test_ats_api_scheduling_SOURCES = \

Modified: gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-01-19 16:51:10 UTC 
(rev 19265)
+++ gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-01-19 17:29:18 UTC 
(rev 19266)
@@ -32,7 +32,7 @@
 #include "glpk.h"
 
 #define WRITE_MLP GNUNET_NO
-#define DEBUG_ATS GNUNET_YES
+#define DEBUG_ATS GNUNET_NO
 #define VERBOSE_GLPK GNUNET_NO
 
 /**
@@ -314,7 +314,7 @@
 mlp_add_constraints_all_addresses (struct GAS_MLP_Handle *mlp, struct 
GNUNET_CONTAINER_MultiHashMap * addresses)
 {
   unsigned int n_addresses;
-  //int c;
+  int c;
   char *name;
 
   /* Problem matrix*/
@@ -356,7 +356,7 @@
    *
    * c 7) quality
    * #rows: |quality properties|
-   * #indices:|quality properties| + |n_addresses|
+   * #indices: |n_addresses| + |quality properties|
    *
    * c 8) utilization
    * #rows: 1
@@ -367,7 +367,8 @@
    * #indices: |n_addresses| + |peers|
    * */
 
-  int pi = ((7 * n_addresses) + (3 * n_addresses +  mlp->m_q + 2));
+  /* last +1 caused by glpk index starting with one */
+  int pi = ((7 * n_addresses) + (4 * n_addresses +  mlp->m_q + mlp->c_p + 2) + 
1);
   mlp->cm_size = pi;
   mlp->ci = 1;
 
@@ -453,7 +454,6 @@
     /* Set row bound == 1 */
     glp_set_row_bnds (mlp->prob, peer->r_c2, GLP_FX, 1.0, 1.0);
 
-
     /* Adding rows for c 9) */
     peer->r_c9 = glp_add_rows (mlp->prob, 1);
     GNUNET_asprintf(&name, "c9_%s", GNUNET_i2s(&peer->id));
@@ -492,23 +492,44 @@
     peer = peer->next;
   }
 
+  /* c 7) For all quality metrics */
 
-  /* For all quality metrics */
-/*
   for (c = 0; c < mlp->m_q; c++)
   {
     struct ATS_Peer *p = mlp->peer_head;
+    struct ATS_Address *addr = p->head;
+    struct MLP_information * mlpi;
+    double value = 1.0;
+
     while (p != NULL)
     {
-      ia[mlp->ci] = row_index;
+      /* Adding rows for c 7) */
+      mlp->r_q[c] = glp_add_rows (mlp->prob, 1);
+      GNUNET_asprintf(&name, "c7_q%i_atsi_%i", c, mlp->q[c]);
+      glp_set_row_name (mlp->prob, mlp->r_q[c], name);
+      GNUNET_free (name);
+      /* Set row bound == 0 */
+      glp_set_row_bnds (mlp->prob, mlp->r_q[c], GLP_LO, 0.0, 0.0);
+
+      /* Set -q_m */
+      ia[mlp->ci] = mlp->r_q[c];
       ja[mlp->ci] = mlp->c_q[c];
-      ar[mlp->ci] = mlp->;
+      ar[mlp->ci] = -1;
       mlp->ci++;
 
+      while (addr != NULL)
+      {
+        mlpi = addr->mlp_information;
+        ia[mlp->ci] = mlp->r_q[c];
+        ja[mlp->ci] = mlpi->c_b;
+        ar[mlp->ci] = p->f * value;
+        mlp->ci++;
+
+        addr = addr->next;
+      }
       p = p->next;
     }
   }
-*/
 }
 
 
@@ -575,12 +596,10 @@
 mlp_create_problem (struct GAS_MLP_Handle *mlp, struct 
GNUNET_CONTAINER_MultiHashMap * addresses)
 {
   int res = GNUNET_OK;
-
   int col;
-/*
   int c;
   char *name;
-*/
+
   GNUNET_assert (mlp->prob == NULL);
 
   /* create the glpk problem */
@@ -625,7 +644,7 @@
   glp_set_obj_coef (mlp->prob, col, mlp->co_R);
   /* Column lower bound = 0.0 */
   glp_set_col_bnds (mlp->prob, col, GLP_LO, 0.0, 0.0);
-#if 0
+
   /* Quality metric columns */
   col = glp_add_cols(mlp->prob, mlp->m_q);
   for (c = 0; c < mlp->m_q; c++)
@@ -639,7 +658,7 @@
     /* Coefficient == Qm */
     glp_set_obj_coef (mlp->prob, col + c, mlp->co_Q[c]);
   }
-#endif
+
   /* Add columns for addresses */
   GNUNET_CONTAINER_multihashmap_iterate (addresses, create_columns_it, mlp);
 
@@ -1130,6 +1149,8 @@
 #if DEBUG_ATS
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Updating existing address to peer 
`%s'\n", GNUNET_i2s (&address->peer));
 #endif
+    mlpi = address->mlp_information;
+
   }
 
   /* Recalculate */

Modified: gnunet/src/ats/gnunet-service-ats_addresses_mlp.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_mlp.h   2012-01-19 16:51:10 UTC 
(rev 19265)
+++ gnunet/src/ats/gnunet-service-ats_addresses_mlp.h   2012-01-19 17:29:18 UTC 
(rev 19266)
@@ -207,6 +207,9 @@
   /* column index quality metrics  */
   int c_q[GNUNET_ATS_QualityPropertiesCount];
 
+  /* column index quality metrics  */
+  int r_q[GNUNET_ATS_QualityPropertiesCount];
+
   /* quality metric coefficients*/
   double co_Q[GNUNET_ATS_QualityPropertiesCount];
 

Added: gnunet/src/ats/perf_ats_mlp.c
===================================================================
--- gnunet/src/ats/perf_ats_mlp.c                               (rev 0)
+++ gnunet/src/ats/perf_ats_mlp.c       2012-01-19 17:29:18 UTC (rev 19266)
@@ -0,0 +1,138 @@
+/*
+     This file is part of GNUnet.
+     (C) 2010,2011 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+/**
+ * @file ats/test_ats_mlp.c
+ * @brief test for the MLP solver
+ * @author Christian Grothoff
+ * @author Matthias Wachs
+
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_statistics_service.h"
+#include "gnunet-service-ats_addresses_mlp.h"
+
+#define VERBOSE GNUNET_YES
+#define VERBOSE_ARM GNUNET_EXTRA_LOGGING
+
+#define MLP_MAX_EXEC_DURATION   
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 3)
+#define MLP_MAX_ITERATIONS      INT_MAX
+
+
+static int ret;
+
+struct GNUNET_STATISTICS_Handle * stats;
+
+struct GNUNET_CONTAINER_MultiHashMap * addresses;
+
+struct GAS_MLP_Handle *mlp;
+
+static void
+check (void *cls, char *const *args, const char *cfgfile,
+       const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+#if !HAVE_LIBGLPK
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "GLPK not installed!");
+  ret = 1;
+  return;
+#endif
+  struct ATS_Address addr[10];
+
+  stats = GNUNET_STATISTICS_create("ats", cfg);
+
+  addresses = GNUNET_CONTAINER_multihashmap_create (10);
+
+  GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, 
&addr[0].peer.hashPubKey);
+  addr[0].mlp_information = NULL;
+  addr[0].next = NULL;
+  addr[0].prev = NULL;
+  addr[0].plugin = strdup ("dummy");
+
+  addr[1].peer = addr[0].peer;
+  addr[1].mlp_information = NULL;
+  addr[1].next = NULL;
+  addr[1].prev = NULL;
+  addr[1].plugin = strdup ("dummy2");
+
+  GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, 
&addr[0], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+
+  mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
+
+  /* Add a new address */
+#if 0
+  GAS_mlp_address_update (mlp, addresses, &addr[0]);
+
+  GNUNET_assert (mlp != NULL);
+  GNUNET_assert (mlp->addr_in_problem == 1);
+
+  /* Update an new address */
+  GAS_mlp_address_update (mlp, addresses, &addr[0]);
+  GNUNET_assert (mlp->addr_in_problem == 1);
+
+  /* Add a second address for same peer */
+  GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, 
&addr[1], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+  GAS_mlp_address_update (mlp, addresses, &addr[1]);
+  GNUNET_assert (mlp->addr_in_problem == 2);
+
+  /* Delete an address */
+  GNUNET_CONTAINER_multihashmap_remove (addresses, &addr[0].peer.hashPubKey, 
&addr[0]);
+  GAS_mlp_address_delete (mlp, addresses, &addr[0]);
+  GAS_mlp_address_delete (mlp, addresses, &addr[1]);
+#endif
+  GAS_mlp_done (mlp);
+
+  GNUNET_free (addr[0].plugin);
+  GNUNET_free (addr[1].plugin);
+  GNUNET_CONTAINER_multihashmap_destroy (addresses);
+  GNUNET_STATISTICS_destroy(stats, GNUNET_NO);
+
+  ret = 0;
+  return;
+}
+
+
+int
+main (int argc, char *argv[])
+{
+
+  static char *const argv2[] = { "test_ats_mlp",
+    "-c",
+    "test_ats_api.conf",
+#if VERBOSE
+    "-L", "DEBUG",
+#else
+    "-L", "WARNING",
+#endif
+    NULL
+  };
+
+  static struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
+
+  GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2,
+                      "test_ats_mlp", "nohelp", options,
+                      &check, NULL);
+
+
+  return ret;
+}
+
+/* end of file test_ats_api_bandwidth_consumption.c */

Modified: gnunet/src/ats/test_ats_mlp.c
===================================================================
--- gnunet/src/ats/test_ats_mlp.c       2012-01-19 16:51:10 UTC (rev 19265)
+++ gnunet/src/ats/test_ats_mlp.c       2012-01-19 17:29:18 UTC (rev 19266)
@@ -65,7 +65,7 @@
   addr[0].prev = NULL;
   addr[0].plugin = strdup ("dummy");
 
-  addr[1].peer = addr[0].peer;
+  GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, 
&addr[1].peer.hashPubKey);
   addr[1].mlp_information = NULL;
   addr[1].next = NULL;
   addr[1].prev = NULL;
@@ -86,7 +86,7 @@
   GNUNET_assert (mlp->addr_in_problem == 1);
 
   /* Add a second address for same peer */
-  GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, 
&addr[1], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+  GNUNET_CONTAINER_multihashmap_put(addresses, &addr[1].peer.hashPubKey, 
&addr[1], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
   GAS_mlp_address_update (mlp, addresses, &addr[1]);
   GNUNET_assert (mlp->addr_in_problem == 2);
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]