Hi Bijal,
without the net file its hard to run
your code.
Reasons for long running times can be
- loops in traversing the graph
- large values for loop boundaries
(e.g. 20*self.size ** 2)
I recommend to put debug statements to
see at which point your program goes in a loop
In the beginning a global variable
verbose = False
Where ever you need it something like
if verbose:
print('before Graph_mat')
In the get_option routine
optParser.add_option("--verbose",
action="", default=False, help="print some intermediate
steps")
...
verbose = options.verbose
Then you can call your script with the
--verbose option and you see the progress
Regards, Harald
Am 18.03.19 um 10:50 schrieb Bijal:
Dear
Sir,
Your
solution worked. I have used self.size = len(graph.edges).
But
now the issued is that this code stuck in some loop. and i
am not able to identify. Would you please help?
Code
is attached here with.
This
code will help others to know how to implement ant colony
optimization with sumo. as currently i am not getting this
kind of code anywhere. So If this would get done,would
help me and others.
Send sumo-user mailing
list submissions to
sumo-user@xxxxxxxxxxx
To subscribe or unsubscribe via the World Wide Web, visit
https://www.eclipse.org/mailman/listinfo/sumo-user
or, via email, send a message with subject or body 'help'
to
sumo-user-request@xxxxxxxxxxx
You can reach the person managing the list at
sumo-user-owner@xxxxxxxxxxx
When replying, please edit your Subject line so it is more
specific
than "Re: Contents of sumo-user digest..."
Today's Topics:
1. Re: Error In SumoLib Graph traversing (Harald
Schaefer)
----------------------------------------------------------------------
Message: 1
Date: Sun, 17 Mar 2019 09:36:53 +0100
From: Harald Schaefer <fechsaer@xxxxxxxxx>
To: sumo-user@xxxxxxxxxxx
Subject: Re: [sumo-user] Error In SumoLib Graph traversing
Message-ID: <bbfb588d-83e4-c672-ecb3-c6a82a4cdff4@xxxxxxxxx>
Content-Type: text/plain; charset="utf-8"
Hi Bijal,
as I understand your code graph is initialized like
?? graph = sumolib.net.readNet('Dijkstra1.net.xml')
you can asked either for the numbers of edges like
?? len(graph.getEdges())
or for the numbers of nodes like
? len(graph.getNodes())
See the SUMO wiki for methods of Net
https://sumo.dlr.de/daily/pydoc/sumolib.net.html
Best regards, Harald
Am 17.03.19 um 05:46 schrieb Bijal:
> Thanks for answer Harald & Jakob
>
> Actually I am trying to build adjecency matrix using
this code.
>
> Graph class has add vertex and add edge function.
>
> I have added first edges and then vertex.
>
> Plz help me to resolve the issue.
>
> Jakob I can solve this issue by myself,But for me
python is little new.?
>
> But as per your suggestion i have tried hard to solve
issue by my
> self. But unfortunatly failed.
>
> Thanks for reply once again.
>
> On Sun 17 Mar, 2019, 3:48 AM , <sumo-user-request@xxxxxxxxxxx
> <mailto:sumo-user-request@xxxxxxxxxxx>>
wrote:
>
> Send sumo-user mailing list submissions to
> ? ? ? ? sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
>
> To subscribe or unsubscribe via the World Wide
Web, visit
> ? ? ? ? https://www.eclipse.org/mailman/listinfo/sumo-user
> or, via email, send a message with subject or
body 'help' to
> ? ? ? ? sumo-user-request@xxxxxxxxxxx
> <mailto:sumo-user-request@xxxxxxxxxxx>
>
> You can reach the person managing the list at
> ? ? ? ? sumo-user-owner@xxxxxxxxxxx
> <mailto:sumo-user-owner@xxxxxxxxxxx>
>
> When replying, please edit your Subject line so
it is more specific
> than "Re: Contents of sumo-user digest..."
>
>
> Today's Topics:
>
> ? ?1. Re: Problem with changing lanes (Jakob
Erdmann)
> ? ?2. Re: Error In SumoLib Graph traversing
(Harald Schaefer)
>
>
>
----------------------------------------------------------------------
>
> Message: 1
> Date: Sat, 16 Mar 2019 17:45:03 +0100
> From: Jakob Erdmann <namdre.sumo@xxxxxxxxx
> <mailto:namdre.sumo@xxxxxxxxx>>
> To: Sumo project User discussions <sumo-user@xxxxxxxxxxx
> <mailto:sumo-user@xxxxxxxxxxx>>
> Subject: Re: [sumo-user] Problem with changing
lanes
> Message-ID:
> ? ? ? ?
> <CAMbUcbxbSgB8tGkWD6VPhW+qhP68J1HSOredi83NxeON063U2w@xxxxxxxxxxxxxx
> <mailto:CAMbUcbxbSgB8tGkWD6VPhW%2BqhP68J1HSOredi83NxeON063U2w@xxxxxxxxxxxxxx>>
> Content-Type: text/plain; charset="utf-8"
>
> Hello,
> the issue is now fixed (https://github.com/eclipse/sumo/issues/5309).
> Thanks for reporting.
>
> Regarding the effect of the duration:
> The longer duration does not change the urgency
of the lane change
> attempt.
> Rather it controls the time after which the
change attempt is
> aborted if
> unsuccessful.
> The urgency currently only has two levels (urgent
and non-urgent)
> which can
> be controlled using setLaneChangeMode
> https://sumo.dlr.de/wiki/TraCI/Change_Vehicle_State#lane_change_mode_.280xb6.29
> (bits 8 and 9 both set to 1)
>
> regards,
> Jakob
>
> Am Fr., 15. M?rz 2019 um 18:00 Uhr schrieb
H?bner, Karl <
> karl.huebner@xxxxxxxxxxxxxxxxxxx
> <mailto:karl.huebner@xxxxxxxxxxxxxxxxxxx>>:
>
> > Dear SUMO devs,
> >
> >
> >
> > I use changeLaneRelative(1, 3) for a vehicle
for changing its
> lane to the
> > left. If I would do this right before an
edge with more lanes
> than my
> > current edge, the vehicle would switch to
the left as expected
> but right
> > after driving onto the next edge it switches
back again to the
> next right
> > lane, since the lane index has changed. I
attached an example script
> > demonstrating this behavior.
> >
> >
> >
> > This is currently a huge problem for us, do
you have any idea
> how to solve
> > this?
> >
> >
> >
> > Another problem I have with the
changeLane-command is that with
> short
> > durations the lane change tends to be more
aggressive and
> distorts upstream
> > traffic. Therefore I thought I choose longer
durations in the
> hope that the
> > lane change model has more time to do
necessary safety checks.
> Is this even
> > the case?
> >
> >
> >
> > Thanks in advance and kind regards,
> >
> > Karl
> >
> >
> >
_______________________________________________
> > sumo-user mailing list
> > sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
> > To change your delivery options, retrieve
your password, or
> unsubscribe
> > from this list, visit
> > https://www.eclipse.org/mailman/listinfo/sumo-user
> >
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> <https://www.eclipse.org/mailman/private/sumo-user/attachments/20190316/6cb1606b/attachment.html>
>
> ------------------------------
>
> Message: 2
> Date: Sat, 16 Mar 2019 23:17:50 +0100
> From: Harald Schaefer <fechsaer@xxxxxxxxx
<mailto:fechsaer@xxxxxxxxx>>
> To: sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
> Subject: Re: [sumo-user] Error In SumoLib Graph
traversing
> Message-ID: <baebc87b-5d7d-39d8-f573-899893a621b6@xxxxxxxxx
> <mailto:baebc87b-5d7d-39d8-f573-899893a621b6@xxxxxxxxx>>
> Content-Type: text/plain; charset="utf-8"
>
> Hello Bijal
>
> you asked for the len of a graph.
> A graph consists of edges and nodes, I think you
need to specify
> whether
> you want to get the number of edges or nodes.
>
> Regards? Harald
>
> Am 16.03.19 um 15:39 schrieb Jakob Erdmann:
> > The error does not come from sumo but from
your own classes and I
> > cannot help you with those. I advise you to
find a programmer
> locally
> > who can guide your efforts.
> > regards,
> > Jakob
> >
> > Am Sa., 16. M?rz 2019 um 13:30?Uhr schrieb
Bijal
> > <bijal.varia88@xxxxxxxxx
<mailto:bijal.varia88@xxxxxxxxx>
> <mailto:bijal.varia88@xxxxxxxxx
<mailto:bijal.varia88@xxxxxxxxx>>>:
> >
> >? ? ?Dear Sir,
> >
> >? ? ?I am trying to set graph for Ant colony
algorithm
> implementation.
> >? ? ?But I am getting Error says :?
> >
> >? ? ? ? ?Traceback (most recent call last):
> >
> >? ? ? ? ?? File "hay4_ACO.py", line 317, in
<module>
> >
> >? ? ? ? ?? ? main()
> >
> >? ? ? ? ?? File "hay4_ACO.py", line 278, in
main
> >
> >? ? ? ? ?? ? aco.set_graph(Objgraph_mat)
> >
> >? ? ? ? ?? File "hay4_ACO.py", line 111, in
set_graph
> >
> >? ? ? ? ?? ? self.size = len(graph)
> >
> >? ? ? ? ?AttributeError: Graph_mat instance
has no attribute
> '__len__'
> >
> >
> >
> >? ? ?Please help me to resolve this issue. I
am new bee in this &
> Some
> >? ? ?how i have managed to get myself up to
this.
> >
> >? ? ?*Code Is :*
> >? ? ?*
> >? ? ?*
> >
> >
> >? ? ? ? ?import os, sys
> >
> >? ? ? ? ?import optparse
> >
> >? ? ? ? ?import subprocess
> >
> >? ? ? ? ?import random
> >
> >? ? ? ? ?from Queue import PriorityQueue
> >
> >? ? ? ? ?import xml.sax
> >
> >? ? ? ? ?from xml.sax import saxutils, parse,
make_parser, handler
> >
> >? ? ? ? ?from copy import copy
> >
> >? ? ? ? ?from itertools import *
> >
> >
> >? ? ? ? ?SUMO_HOME =
"/home/dhaval/sumo-1.0.0/"
> >
> >
> >? ? ? ? ?try:
> >
> >? ? ? ? ?? ?
sys.path.append(os.path.join(SUMO_HOME, "tools"))
> >
> >? ? ? ? ?? ? # import the library
> >
> >? ? ? ? ?? ? import sumolib
> >
> >? ? ? ? ?? ? from sumolib import checkBinary
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Net
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import NetReader
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Lane
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Edge
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Node
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Connection
> >
> >? ? ? ? ?? ? from sumolib.net
<http://sumolib.net>
> <http://sumolib.net>
import Roundabout
> >
> >? ? ? ? ?? ? ? ?
> >
> >? ? ? ? ?except ImportError:
> >
> >? ? ? ? ?? ? sys.exit("please declare
environment variable
> 'SUMO_HOME'
> >? ? ? ? ?as the root directory of your sumo
installation (it should
> >? ? ? ? ?contain folders 'bin', 'tools' and
'docs')")
> >
> >
> >? ? ? ? ?import random
> >
> >? ? ? ? ?graph =
sumolib.net.readNet('Dijkstra1.net.xml')
> >
> >
> >? ? ? ? ?import traci
> >
> >? ? ? ? ?# the port used for communicating
with your sumo instance
> >
> >? ? ? ? ?PORT = 8873
> >
> >
> >? ? ? ? ?# implementation of an undirected
graph using Adjacency
> >? ? ? ? ?Matrix, with weighted or unweighted
edges
> >
> >? ? ? ? ?class Vertex:
> >
> >? ? ? ? ?def __init__(self, n):
> >
> >? ? ? ? ?self.name
<http://self.name>
<http://self.name>
= n
> >
> >
> >? ? ? ? ?class Graph_mat:
> >
> >? ? ? ? ?vertices = {}
> >
> >? ? ? ? ?edges = []
> >
> >? ? ? ? ?edge_indices = {}
> >
> >
> >? ? ? ? ?def add_vertex(self, vertex):
> >
> >? ? ? ? ?if isinstance(vertex, Vertex) and vertex.name
> <http://vertex.name>
> >? ? ? ? ?<http://vertex.name>
not in self.vertices:
> >
> >? ? ? ? ?self.vertices[vertex.name
<http://vertex.name>
> <http://vertex.name>]
= vertex
> >
> >? ? ? ? ?for row in self.edges:
> >
> >? ? ? ? ?row.append(0)
> >
> >? ? ? ? ?self.edges.append([0] *
(len(self.edges)+1))
> >
> >? ? ? ? ?self.edge_indices[vertex.name
<http://vertex.name>
> <http://vertex.name>]
=
> >? ? ? ? ?len(self.edge_indices)
> >
> >? ? ? ? ?return True
> >
> >? ? ? ? ?else:
> >
> >? ? ? ? ?return False
> >
> >
> >? ? ? ? ?def add_edge(self, u, v, weight=1):
> >
> >? ? ? ? ?if u in self.vertices and v in
self.vertices:
> >
> >? ? ? ?
?self.edges[self.edge_indices[u]][self.edge_indices[v]] =
> weight
> >
> >? ? ? ?
?self.edges[self.edge_indices[v]][self.edge_indices[u]] =
> weight
> >
> >? ? ? ? ?return True
> >
> >? ? ? ? ?else:
> >
> >? ? ? ? ?return False
> >
> >? ? ? ? ?def print_graph(self):
> >
> >? ? ? ? ?for v, i in
sorted(self.edge_indices.items()):
> >
> >? ? ? ? ?print(v + ' ')
> >
> >? ? ? ? ?for j in range(len(self.edges)):
> >
> >? ? ? ? ?print(self.edges[i][j])
> >
> >? ? ? ? ?print(' ')
> >
> >
> >? ? ? ? ?class Ant():
> >
> >
> >? ? ? ? ?? ? def __init__(self):
> >
> >? ? ? ? ?? ? ? ? self.cost = 0
> >
> >? ? ? ? ?? ? ? ? self.trace = [0]
> >
> >
> >? ? ? ? ?? ? def start_travel(self):
> >
> >? ? ? ? ?? ? ? ? self.cost = 0
> >
> >? ? ? ? ?? ? ? ? self.trace = [0]
> >
> >
> >? ? ? ? ?? ? def add_vertex(self, _vertex,
_cost):
> >
> >? ? ? ? ?? ? ? ? self.trace.append(_vertex)
> >
> >? ? ? ? ?? ? ? ? self.cost += _cost
> >
> >
> >? ? ? ? ?? ? def get_position(self):
> >
> >? ? ? ? ?? ? ? ? return self.trace[-1]
> >
> >
> >? ? ? ? ?? ? def get_cost(self):
> >
> >? ? ? ? ?? ? ? ? return self.cost
> >
> >
> >? ? ? ? ?? ? def get_path(self):
> >
> >? ? ? ? ?? ? ? ? path = []
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.trace) - 1):
> >
> >? ? ? ? ?? ? ? ? ? ?
path.append((self.trace[i], self.trace[i + 1]))
> >
> >
> >? ? ? ? ?? ? ? ? return path
> >
> >
> >
> >? ? ? ? ?class ACOAlgorithm():
> >
> >? ? ? ? ?? ? '''
> >
> >? ? ? ? ?? ? Ant colony optimization
algorithms to find shortest path
> >
> >? ? ? ? ?? ? '''
> >
> >
> >? ? ? ? ?? ? def __init__(self):
> >
> >? ? ? ? ?? ? ? ? self.evaporation_rate = 0.8
> >
> >? ? ? ? ?? ? ? ? self.threshhold = 0.5
> >
> >? ? ? ? ?? ? ? ? self.remain_path = 0
> >
> >
> >? ? ? ? ?? ? def set_graph(self, graph):
> >
> >? ? ? ? ?? ? ? ? self.size = len(graph)
> >
> >
> >? ? ? ? ?? ? ? ? self.num_ant = 20*self.size
** 2
> >
> >? ? ? ? ?? ? ? ? self.ant = [Ant() for _ in
range(self.num_ant)]
> >
> >
> >
> >? ? ? ? ?? ? ? ? self.distance = graph
> >
> >? ? ? ? ?? ? ? ? self.pheromones = [[1.0]*
self.size for _ in
> >? ? ? ? ?range(self.size)]
> >
> >
> >? ? ? ? ?? ? ? ? max_distance = 0
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.distance)):
> >
> >? ? ? ? ?? ? ? ? ? ? for j in
range(len(self.distance[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? if
self.distance[i][j] > max_distance:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? max_distance =
self.distance[i][j]
> >
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.distance)):
> >
> >? ? ? ? ?? ? ? ? ? ? for j in
range(len(self.distance[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? if
self.distance[i][j] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.distance[i][j] /= max_distance*1.0
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? else:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.pheromones[i][j] = -1.0
> >
> >
> >? ? ? ? ?? ? def process(self):
> >
> >? ? ? ? ?? ? ? ? while True:
> >
> >? ? ? ? ?? ? ? ? ? ? self._start_travel()
> >
> >? ? ? ? ?? ? ? ? ? ? self._find_edge()
> >
> >? ? ? ? ?? ? ? ? ? ? if
self._finish_travel():
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? break
> >
> >
> >? ? ? ? ?? ? ? ? for i in
range(self.num_ant):
> >
> >? ? ? ? ?? ? ? ? ? ? if
len(self.ant[i].trace) == self.size:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? print 'trace %s' %
(self.ant[i].trace)
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? break
> >
> >
> >? ? ? ? ?? ? def _start_travel(self):
> >
> >? ? ? ? ?? ? ? ? for i in
range(self.num_ant):
> >
> >? ? ? ? ?? ? ? ? ? ?
self.ant[i].start_travel()
> >
> >
> >? ? ? ? ?? ? def _find_edge(self):
> >
> >? ? ? ? ?? ? ? ? while not
self._have_ant_completed():
> >
> >? ? ? ? ?? ? ? ? ? ? for i in
range(len(self.ant)):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? available_edge = 0
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for e in
range(self.size):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? if e not in
self.ant[i].trace and
> >? ? ? ?
?self.pheromones[self.ant[i].get_position()][e] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?
available_edge +=? (2.0 -
> >? ? ? ?
>
?self.distance[self.ant[i].get_position()][e])*self.pheromones[self.ant[i].get_position()][e]
> >
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? last_e = -1
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? prob_edge = 0
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? prob_random =
random.uniform(0.0, 1.0)
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for e in
range(self.size):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? if e not in
self.ant[i].trace and
> >? ? ? ?
?self.pheromones[self.ant[i].get_position()][e] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? prob_edge +=
(2.0 -
> >? ? ? ?
>
?self.distance[self.ant[i].get_position()][e])*self.pheromones[self.ant[i].get_position()][e]/available_edge
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? last_e = e
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? if prob_edge
>= prob_random:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? break
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? if last_e >= 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.ant[i].add_vertex(last_e,
> >? ? ? ?
?self.distance[self.ant[i].get_position()][last_e])
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? else:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.ant[i].start_travel()
> >
> >
> >? ? ? ? ?? ? def _finish_travel(self):
> >
> >? ? ? ? ?? ? ? ? # find short path
> >
> >? ? ? ? ?? ? ? ? avg_cost = 0
> >
> >? ? ? ? ?? ? ? ? ant_completed = 0
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.ant)):
> >
> >? ? ? ? ?? ? ? ? ? ? if
len(self.ant[i].trace) == self.size:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? avg_cost +=
self.ant[i].get_cost()
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ant_completed += 1
> >
> >? ? ? ? ?? ? ? ? avg_cost /= ant_completed
> >
> >
> >? ? ? ? ?? ? ? ? # update pheromones
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.pheromones)):
> >
> >? ? ? ? ?? ? ? ? ? ? for j in
range(len(self.pheromones[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? if
self.pheromones[i][j] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.pheromones[i][j] *= (1 -
> >? ? ? ? ?self.evaporation_rate)
> >
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.ant)):
> >
> >? ? ? ? ?? ? ? ? ? ? if
self.ant[i].get_cost() < avg_cost:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? update_pheromones =
self.ant[i].get_path()
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for x,y in
update_pheromones:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ?
self.pheromones[x][y]? +=
> >? ? ? ? ?avg_cost/self.ant[i].get_cost()
> >
> >
> >? ? ? ? ?? ? ? ? # remove path has small
pheromones
> >
> >? ? ? ? ?? ? ? ? if self.remain_path >
2*(self.size - 1):
> >
> >? ? ? ? ?? ? ? ? ? ? for i in
range(len(self.pheromones)):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for j in
range(len(self.pheromones[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? if
self.pheromones[i][j] <=
> self.threshhold:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?
self.pheromones[i][j] = -1.0
> >
> >? ? ? ? ?? ? ? ? else:
> >
> >? ? ? ? ?? ? ? ? ? ? min_pheromones =
999999.99
> >
> >? ? ? ? ?? ? ? ? ? ? for i in
range(len(self.pheromones)):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for j in
range(len(self.pheromones[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? if
min_pheromones >
> self.pheromones[i][j] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?
min_pheromones =
> self.pheromones[i][j]
> >
> >
> >? ? ? ? ?? ? ? ? ? ? for i in
range(len(self.pheromones)):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? for j in
range(len(self.pheromones[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? if
self.pheromones[i][j] <=
> min_pheromones:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?
self.pheromones[i][j] = -1.0
> >
> >
> >? ? ? ? ?? ? ? ? # check exist only one path
> >
> >? ? ? ? ?? ? ? ? self.remain_path = 0
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.pheromones)):
> >
> >? ? ? ? ?? ? ? ? ? ? for j in
range(len(self.pheromones[0])):
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? if
self.pheromones[i][j] > 0:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? ? ? self.remain_path
+= 1
> >
> >
> >? ? ? ? ?? ? ? ? return self.remain_path <
self.size
> >
> >
> >? ? ? ? ?? ? def _have_ant_completed(self):
> >
> >? ? ? ? ?? ? ? ? for i in
range(len(self.ant)):
> >
> >? ? ? ? ?? ? ? ? ? ? if
len(self.ant[i].trace) == self.size:
> >
> >? ? ? ? ?? ? ? ? ? ? ? ? return True
> >
> >? ? ? ? ?? ? ? ? return False
> >
> >
> >
> >
> >
> >? ? ? ? ?def AntColony(graph, start,
end=None):
> >
> >? ? ? ? ?? ? ? ? D = {}# dictionary of final
distances
> >
> >? ? ? ? ?P = {}# dictionary of predecessors
> >
> >
> >
> >
> >? ? ? ? ?return (D,P)
> >
> >? ? ? ? ?? ? ? ??
> >
> >? ? ? ? ?def shortestPath(graph, start, end):
> >
> >? ? ? ? ?"""
> >
> >? ? ? ? ?Find a single shortest path from the
given start vertex
> to the
> >? ? ? ? ?given end vertex.
> >
> >? ? ? ? ?The input has the same conventions
as Dijkstra().
> >
> >? ? ? ? ?The output is a list of the vertices
in order along the
> >? ? ? ? ?shortest path.
> >
> >? ? ? ? ?"""
> >
> >? ? ? ? ?? ? ? ? start = graph.getEdge(start)
> >
> >? ? ? ? ?? ? ? ? end = graph.getEdge(end)
> >
> >
> >? ? ? ? ?D,P = AntColony(graph, start, end)
> >
> >? ? ? ? ?Path = []
> >
> >
> >? ? ? ? ?#while 1:
> >
> >? ? ? ? ?#Path.append(end)
> >
> >? ? ? ? ?#if end == start: break
> >
> >? ? ? ? ?#end = P[end]
> >
> >? ? ? ? ?#Path.reverse()
> >
> >
> >? ? ? ? ?return Path
> >
> >
> >? ? ? ? ?def generate_routefile():
> >
> >? ? ? ? ?? ? with
open("dijkstra_000.rou.xml", "w") as routes:
> >
> >? ? ? ? ?? ? ? ? print >> routes,
"""<routes>
> >
> >? ? ? ? ?? ? ? ? <vType id="vehicle1"
accel="0.8" decel="4.5"
> >? ? ? ? ?sigma="0.5" length="5" minGap="2.5"
maxSpeed="16.67"
> >? ? ? ? ?guiShape="passenger"/>
> >
> >
> >? ? ? ? ?? ? ? ? <route id="1" edges="1 3
5 9" /> </routes>"""
> >
> >? ? ? ? ?def main():
> >
> >? ? ? ? ?? ? traci.init(PORT)
> >
> >? ? ? ? ?? ? Objgraph_mat = Graph_mat()
> >
> >? ? ? ? ?? ? aco = ACOAlgorithm()
> >
> >? ? ? ? ?? ? for edge in graph.getEdges():
> >
> >? ? ? ? ?? ? ? ?
> >? ? ? ?
?Objgraph_mat.add_vertex(Vertex(edge.getFromNode().getID()))
> >
> >? ? ? ? ?? ? ? ?
>
Objgraph_mat.add_vertex(Vertex(edge.getToNode().getID()))
> >
> >
> >
> >? ? ? ? ?? ? for edge in graph.getEdges():
> >
> >? ? ? ? ?? ? ? ?
Objgraph_mat.add_edge(edge.getFromNode().getID(),
> >? ? ? ? ?edge.getToNode().getID())
> >
> >
> >? ? ? ? ?? ? Objgraph_mat.print_graph()
> >
> >
> >? ? ? ? ?? ? aco.set_graph(Objgraph_mat)
> >
> >? ? ? ? ?? ? #aco.process()
> >
> >? ? ? ? ?? ? #route = shortestPath(graph,
'1', '18')
> >
> >? ? ? ? ?? ? #for x in range(len(route)):
> >
> >? ? ? ? ?? ? ?#? ?print route[x],
> >
> >
> >? ? ? ? ?? ? #edges = [str (edge.getID()) for
edge in route]
> >
> >? ? ? ? ?? ? #create the new route for
vehicle
> >
> >? ? ? ? ?? ? #traci.route.add("0", edges)
> >
> >? ? ? ? ?? ? #assign the new route for
vehicle with id vehicle1
> >
> >? ? ? ? ?? ?
#traci.vehicle.add("vehicle0","0")
> >
> >? ? ? ? ?? ? for i in range(1000):? ? #? or
whatever nulmber of steps
> >? ? ? ? ?you want to simulate
> >
> >? ? ? ? ?? ? ? ? traci.simulationStep()
> >
> >? ? ? ? ?? ? traci.close()
> >
> >? ? ? ? ?? ? sys.stdout.flush()
> >
> >? ? ? ? ?? ??
> >
> >
> >? ? ? ? ?def get_options():
> >
> >? ? ? ? ?? ? optParser =
optparse.OptionParser()
> >
> >? ? ? ? ?? ? optParser.add_option("--nogui",
action="",
> >? ? ? ? ?default=False, help="run the
commandline version of sumo")
> >
> >? ? ? ? ?? ? options, args =
optParser.parse_args()
> >
> >? ? ? ? ?? ? return options
> >
> >
> >
> >? ? ? ? ?# this is the main entry point of
this script
> >
> >? ? ? ? ?if __name__ == "__main__":
> >
> >? ? ? ? ?? ? options = get_options()
> >
> >? ? ? ? ?? ? # this script has been called
from the command line. It
> >? ? ? ? ?will start sumo as a
> >
> >? ? ? ? ?? ? # server, then connect and run
> >
> >? ? ? ? ?? ? if options.nogui:
> >
> >? ? ? ? ?? ? ? ?sumoBinary =
checkBinary('sumo')
> >
> >? ? ? ? ?? ? else:
> >
> >? ? ? ? ?? ? ? ?sumoBinary =
checkBinary('sumo-gui')
> >
> >
> >? ? ? ? ?? ? generate_routefile()
> >
> >
> >? ? ? ? ?? ? # this is the normal way of
using traci. sumo is
> started as a
> >
> >? ? ? ? ?? ? # subprocess and then the python
script connects and
> runs
> >
> >? ? ? ? ?? ? sumoProcess =
subprocess.Popen([sumoBinary, "-c",
> >? ? ? ? ?"dijkstra.sumo.cfg",
"--tripinfo-output", "tripinfo.xml",
> >? ? ? ? ?"--remote-port", str(PORT)],
stdout=sys.stdout,
> stderr=sys.stderr)
> >
> >? ? ? ? ?? ? main()
> >
> >? ? ? ? ?? ? sumoProcess.wait()
> >
> >
> >? ? ?--
> >? ? ?*:)*
> >? ? ?Bijal Varia
> >? ?
?_______________________________________________
> >? ? ?sumo-user mailing list
> >? ? ?sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
> <mailto:sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>>
> >? ? ?To change your delivery options,
retrieve your password, or
> >? ? ?unsubscribe from this list, visit
> >? ? ?https://www.eclipse.org/mailman/listinfo/sumo-user
> >
> >
> >
_______________________________________________
> > sumo-user mailing list
> > sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
> > To change your delivery options, retrieve
your password, or
> unsubscribe from this list, visit
> > https://www.eclipse.org/mailman/listinfo/sumo-user
>
>
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> <https://www.eclipse.org/mailman/private/sumo-user/attachments/20190316/2c8f2251/attachment.html>
>
> ------------------------------
>
> _______________________________________________
> sumo-user mailing list
> sumo-user@xxxxxxxxxxx
<mailto:sumo-user@xxxxxxxxxxx>
> To change your delivery options, retrieve your
password, or
> unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/sumo-user
>
>
> End of sumo-user Digest, Vol 21, Issue 64
> *****************************************
>
>
> _______________________________________________
> sumo-user mailing list
> sumo-user@xxxxxxxxxxx
> To change your delivery options, retrieve your
password, or unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/sumo-user
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.eclipse.org/mailman/private/sumo-user/attachments/20190317/d3defa25/attachment.html>
------------------------------
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To change your delivery options, retrieve your password,
or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/sumo-user
End of sumo-user Digest, Vol 21, Issue 66
*****************************************
--
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/sumo-user
|