MASON-INTEREST-L Archives

September 2013

MASON-INTEREST-L@LISTSERV.GMU.EDU

Options: Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

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

Print Reply
Mime-Version:
1.0
Sender:
MASON Multiagent Simulation Toolkit <[log in to unmask]>
Subject:
From:
Beth Kar <[log in to unmask]>
Date:
Fri, 27 Sep 2013 05:22:35 -0400
Content-Transfer-Encoding:
8bit
Content-Type:
text/plain; charset="windows-1252"
Reply-To:
MASON Multiagent Simulation Toolkit <[log in to unmask]>
Parts/Attachments:
text/plain (114 lines)
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