MASON-INTEREST-L Archives

September 2013

MASON-INTEREST-L@LISTSERV.GMU.EDU

Options: Use Monospaced Font
Show HTML Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Norman Langner <[log in to unmask]>
Reply To:
MASON Multiagent Simulation Toolkit <[log in to unmask]>
Date:
Fri, 27 Sep 2013 12:12:18 +0200
Content-Type:
multipart/alternative
Parts/Attachments:
text/plain (3665 bytes) , text/html (5 kB)
The advantage of tonys approach is, that it avoids potential unnecessary
loops when it finds the neighbour. Your loop iterates always over all
edges. Maybe that could make a Difference performance wise...
Am 27.09.2013 11:22 schrieb "Beth Kar" <[log in to unmask]>:

> Thank you very much for your prompt response. And actually, before
> receiving
> your replies I kind of figured out a solution. My approach was the similar
> to the one that Tony proposed. But instead of using a while loop I did
> this:
>
> Bag edges = mynetwork.getEdges(agentA, null);
> int length = edges.size();
> boolean exists = false;
>
> for (int node=0; node<len; node++){
> Edge e = (Edge)(edges.get(node));
> if(e.getOtherNode(agentA) == agentB){
>         exists = true;
> }else{continue;}
> }
>
> if (!exists){
> mynetwork.addEdge(agentA, agentB, null);
> }
>
> Thank you again,
> Beth
>
> On Thu, 26 Sep 2013 15:24:26 -0400, Joey Harrison <[log in to unmask]> wrote:
>
> >Ahh, my mistake.
> >
> >Joey
> >
> >
> >On Thu, Sep 26, 2013 at 2:38 PM, Tony Bigbee <[log in to unmask]>
> wrote:
> >
> >> That won't work.  getEdges returns a bag of Edge not Node objects.  You
> >> have to inspect each Edge looking for the neighbor agentB.
> >> I made the same mistake in my first prototype, hoping I could chain
> calls
> >> together in one line...
> >>
> >>
> >>
> >> On Thu, Sep 26, 2013 at 12:05 PM, Joey Harrison <[log in to unmask]>
> wrote:
> >>
> >>> Bag has a contains method, so you can just do this:
> >>>
> >>> network.getEdges(agentA, null).contains(agentB)
> >>>
> >>> Joey
> >>>
> >>>
> >>> On Thu, Sep 26, 2013 at 12:07 PM, Tony Bigbee <[log in to unmask]
> >wrote:
> >>>
> >>>> I couldn't find a method in sim.field.network.Network like
> >>>> areNeighbors(Object o1, Object o2).
> >>>>
> >>>> So a starting point would be to use Network's getEdges method and
> >>>> iterate through the returned Bag looking for the other agent node in
> the
> >>>> edges.    You could write a thin wrapper method to do the job and you
> would
> >>>> have a reusable component, like:
> >>>>
> >>>> public boolean areNeighbors(Network network, Object agentA, Object
> >>>> agentB) {
> >>>>     Bag edges = network.getEdges(agentA, null);  //obtain all edges
> that
> >>>> have agentA; the bag may be empty but it won't be null
> >>>>     Iterator<Edge> iter = edges.iterator();
> >>>>     while (iter.hasNext()) {
> //iterate
> >>>> through all edges until we find agentB
> >>>>             Edge e = iter.next();
> >>>>             if (e.getOtherNode(agentA)==agentB) {  //use agentA as one
> >>>> node and see if the other node is agentB
> >>>>                 return true;
> >>>> //found it
> >>>>             }
> >>>>         }
> >>>>     return false; //did not find it
> >>>> }
> >>>>
> >>>> Then to achieve what you originally asked:
> >>>>
> >>>> if ( !areNeighbors(mynetwork, agentA,agentB)) {
> >>>>     mynetwork.addEdge(agentA,agentB,null);
> >>>> }
> >>>>
> >>>> Tony
> >>>>
> >>>>
> >>>>
> >>>> On Thu, Sep 26, 2013 at 3:54 AM, Beth Kar <[log in to unmask]> wrote:
> >>>>
> >>>>> Hello!
> >>>>> I am a newbie to mason (and java) and I am trying to dynamically
> create
> >>>>> an
> >>>>> undirected network. I want to add an edge between two nodes using the
> >>>>> following code:
> >>>>>
> >>>>> mynetwork.addEdge(AgentA, AgentB, null).
> >>>>>
> >>>>> How can I check with an if-then statement before hand if that edge
> >>>>> exists
> >>>>> before adding it?
> >>>>>
> >>>>> p.s. If ( edge between AgentA and AgentB doesn't exist) {
> >>>>> mynetwork.addEdge(AgentA, AgentB, null)}
> >>>>>
> >>>>> How do I represent the phrase 'edge between AgentA and AgentB doesn't
> >>>>> exist'
> >>>>> in java?
> >>>>>
> >>>>> Thank you in advance for your help!
> >>>>> Beth.
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >
>


ATOM RSS1 RSS2