Hi Yi,

by debugging a bit your code, it seems that the problem is in the
pre-processing step and more specifically in the filtering you do on the
self edges, in the helper transferGraph method.

I will have to dig a bit more to figure out the issue, but until then you
should be able to work around this in one of the following ways:
- use the original Edge DataSet (distanceEdges) as the Edge DataSet of the
vertex-centric iteration input graph.
- skip the filter entirely and check for self-edges inside the messaging /
vertexUpdate functions, so that you do a no-op for these.

Let me know if any of these workarounds solve your problem!

Cheers,
-Vasia.

On 19 April 2015 at 15:00, Yi ZHOU <zhouyi0...@hotmail.com> wrote:

> Hello everyone,
> I need some suggestions about debuging the Affinity Appropogation
> algorithm for gelly.
>
> In my implementation, there is a problem with the MessagingFunction in
> Vertex Centric Iteration
>
> The test graph is a completed directed graph (25 vertices in total), i.e.
> there are two opposite directed edges between every two vertices.
> The value of each vertex is a hashmap, in which contians information of
> all of the vertex's neigbor vertices.
>
> My MessagingFunction is implemented as follow,
>
>            if (getSuperstepNumber() % 2 == 1){
>                 /*Odd step: Propagate availability*/
>                 int msgCnt = 0;     //Debug variable, count out going edge
> number
>                 for (Edge<Long, Double> e: getOutgoingEdges()){
>                     Long dest = e.getTarget();
>                     sendMessageTo(dest, new Tuple2<Long,
> Double>(vertexKey, vertexValue.get(dest).f2));
>                     msgCnt++;
>                 }
>                 System.err.format("Step %d: Vertex %d send %d\n",
> getSuperstepNumber(), vertexKey, msgCnt);
>            }else{
>                 /*Even step: propagate responsibility*/
>                 for (Edge<Long, Double> e: getOutgoingEdges()){
>                     Long dest = e.getTarget();
>                     sendMessageTo(dest, new Tuple2<Long,
> Double>(vertexKey, vertexValue.get(dest).f1));
>                 }
>             }
>
> I use a msgCnt for conuting the neigbor edges in the odd step. However,
> even during the 1st super step , the result is quite strange. For some
> vertices, they appropogate messages to all the adjacent vertices. however,
> for serveral other vertices, they send nothing or only part of their
> neighbors. i.e the getOutgoingEdges() returns none.
>
>
> Step 1: Vertex 3 send 0
> Step 1: Vertex 1 send 0
> Step 1: Vertex 5 send 0
> Step 1: Vertex 8 send 0
> Step 1: Vertex 14 send 0
> Step 1: Vertex 16 send 0
> Step 1: Vertex 2 send 24
> Step 1: Vertex 7 send 18
> Step 1: Vertex 9 send 24
> Step 1: Vertex 6 send 24
> Step 1: Vertex 11 send 0
> Step 1: Vertex 15 send 0
> Step 1: Vertex 12 send 0
> Step 1: Vertex 21 send 0
> Step 1: Vertex 13 send 0
> Step 1: Vertex 25 send 0
> Step 1: Vertex 22 send 24
> Step 1: Vertex 18 send 0
> Step 1: Vertex 23 send 24
> Step 1: Vertex 19 send 0
> Step 1: Vertex 20 send 0
> Step 1: Vertex 24 send 24
>
> I do not know how to detect the problem, can anyone give me some
> suggestions?
> I attached the code and data also. The iteration is loaded in line 118 in
> AffinityPropogation.java
>
> Thank you
> Best regards.
>
> ZHOU Yi
>
>

Reply via email to