Just glancing at your work, I see you have curly braces around what looks like it should be a list. If you are concerned with the order of your output, dictionaries do not have a concept of order.
On Sat, Apr 26, 2014 at 3:16 PM, Suhana Vidyarthi <suhanavidyar...@gmail.com > wrote: > Hi Danny, > > Let me give you a high level brief of what I am doing: > I am working on doing "disaster aware routing" considering the 24-node US > network where I will be setting up connection between two any two nodes (I > will select the source and destination nodes randomly). Also I have some > links whose "probability of failure" is mentioned in the attached file. > Other links, which are not mentioned in the file - we suppose their > "probability of failure" is zero. So between the source-destination nodes, > there will be multiple paths and I will select the one which has "least > probability of failure". > > Now to setup the connection between two nodes, I have to select a path > whose "probability of failure" is least. To do that first I will calculate > the risk of each path from the attached file and then select the path with > least risk value. Did you get this part? I know it can be a bit confusing. > > Now I break the problem into parts: > > 1. I have to topology of the 24-node map > 2. I have the link values of each link - where risk values are the > "probability of failure" > 3. I calculate the total "probability of failure" of each path (a path may > have multiple links): Suppose my source node is "a" and destination node is > "b". I can setup a path between a to b via c or via d (a-c-b or a-d-c): > Here I will check the risk values of a-c and c-b; also risk values of a-d > and d-c. If the total risk valure of a-c-b is lower that risk value of > a-d-c, then I select the path a-c-d to setup the connection. (again risk > value = probability of failure) > > Now, I will first calculate the "total probability of failure" of each > link (using the file.txt) and since some links are repeated their values > will be added. The probabilities get added if a link is mentioned twice > or thrice. For example: link 3—5 is repeated 3 times: in line one, it > has a probability of failure as 0.03, in line two it is 0.11 and in line > three it is 0.04. So the probability of failure for link 3—5 is > 0.03+0.11+0.04 = 0.18 > > The length of each array will be same. You see the code I wrote: here is > the output for it: > > Links -> > > [('10', '13'), ('14', '18'), ('7', '8'), ('15', '20'), ('5', '8'), ('5', > '4'), ('11', '9'), ('21', '22'), ('12', '13'), ('21', '20'), ('17', '13'), > ('20', '21'), ('21', '16'), ('14', '10'), ('11', '12'), ('11', '19'), > ('14', '13'), ('3', '5'), ('11', '6'), ('19', '20')] > > > Probability -> > > [0.04, 0.06, 0.04, 0.24, 0.08, 0.15, 0.08, 0.27, 0.04, 0.29, 0.08, 0.27, > 0.27, 0.04, 0.08, 0.08, 0.08, 0.18000000000000002, 0.08, 0.24] > > > It means that link [10,13] has a "probability of failure" as [0.04] and > since the link [3-5] is repeated thrice with probability of 0.03, 0.11 and > 0.04, its "probability of failure" is [0.18] (third last element in the > Probability array). For some reason instead of 0.18 it is showing > 0.180000000002, which I cannot figure to why. > > > Please see the attached code. If you see the file.txt and my output: the > output is not displayed in sequence and that is what I need help with. I > want this to display : > > > Links = { [3,5] [5,4] [5,8] [7,8] [14,10] [14,13] [17,13] [14,18] [10,13] > [14,13] [17,13] [12,13] [11,6] [11,9] [11,12] [11,19] [19,20] [15,20] > [21,20] [20,21] [21,16] [21,22] } > > > Prob = {[0.18] [0.15] [0.08] [0.04] [0.04] [0.04] [0.08] [0.04] [0.08] > [0.08] [0.08] [0.08] [0.24] [0.24] [0.34] [0.27] [0.27]} > > > If you can figure why the output is not generated in same sequence as in > the file.txt for me, it will be very helpful. > > > let me know if I explained correctly, and if you have any questions or > doubts? > > > On Sat, Apr 26, 2014 at 11:41 AM, Danny Yoo <d...@hashcollision.org>wrote: > >> >>> I want to create two arrays using the above file (Links array and Prob >> >>> array) that should give following output: >> >>> >> >>> *Links *= { [3,5] [5,4] [5,8] [7,8] [14,10] [14,13] [17,13] [14,18] >> >>> [10,13] [14,13] [17,13] [12,13] [11,6] [11,9][11,12] [11,19] [19,20] >> >>> [15,20] [21,20] [20,21] [21,16] [21,22] } >> >>> >> >>> *Prob *= {[0.28] [0.15] [0.08] [0.04] [0.04] [0.04] [0.08] [0.04] >> [0.08] >> >>> [0.08] [0.08] [0.08] [0.24] [0.24] [0.34] [0.27] [0.27]} >> >> >> >> >> >> I don't understand how you develop this? The first list has 22 items >> the >> >> second 17. I would have expected them to be the same? >> > >> > >> > In the "Prob" array the elements are less because if you read the note >> > below: I said the links that are repeating for example [3,5] their >> > probabilities get added and stored as a single value in the "Prob" >> array. >> >> >> But what will you plan to do with these values afterwards? I think >> Alan's point here is that if there's no direct relationship between >> the elements in Links and the elements in Probs, those values aren't >> going to be very useful to solve the rest of the problem. >> >> >> One way to look at this problem is to simplify or normalize the input; >> the original structure in the file is slightly weird to process, since >> a single line of the input represents several link/failure pairs. >> >> One concrete example is: >> >> 4,10,13,14,13,17,13,12,13,0.04 >> >> where all these numbers are uninterpreted. >> >> You can imagine something that takes the line above, and breaks it >> down into a series of LinkFailure items. >> >> ###### >> class LinkFailure(object): >> """Represents a link and the probability of failure.""" >> def __init__(self, start, end, failure): >> self.start = start >> self.end = end >> self.failure = failure >> ###### >> >> which represent a link and failure structure. If we have a structure >> like this, then it explicitly represents a relationship between a link >> and its failure, and the string line: >> >> 4,10,13,14,13,17,13,12,13,0.04 >> >> can be distilled and represented as a collection of LinkFailure instances: >> >> [LinkFailure(10, 13, 0.04), LinkFailure(14, 13, 0.04), >> LinkFailure(17, 13, 0.04), LinkFailure(12, 13, 0.04)] >> >> Then the relationship is explicit. >> >> >> >> Also why do you want these two lists? What do you plan on doing with >> them? >> >> I would have thought a mapping of link to probability would be much >> more >> >> useful? (mapping => dictionary) >> > >> > >> > I want these two lists because using the links and probs array, I will >> check >> > which link has the lowest probability. Here lowest probability means the >> > risk of failure for that link. So based on which link has least >> probability >> > of failure, I will use it to setup a connection (I have a source and >> > destination and the links mentioned above are the paths between them) I >> want >> > to select the path which has least failure probability. >> > >> > Did it make sense? >> >> >> Unfortunately, I'm still confused. If you just have the Links and the >> Probs lists of unequal length, unless there's some additional >> information that you're represented, then I don't see the necessary >> connection between the two lists that lets you go any further in the >> problem. There's no one-to-one-ness: given a link in Links, which >> Probs do you want to look at? If you don't represent that linkage in >> some way, I don't understand yet where you go next. >> >> >> >>> So the first element in Links array is [3,5] and its probability of >> >>> failure is the first element in Prob array i.e. 0.28 >> >> But if the two lists are different lengths, what probability of >> failure is associates with the last element in the Prob array? >> >> >> The representation of data is important: if you choose an awkward >> representation, it makes solving this problem more difficult than it >> needs be. That is, if you're already compressing multiple elements in >> Prob that correspond to the same link, you also need some way to >> figure out what link that a compressed probability refer to. >> Otherwise, you don't have enough information to solve the problem >> anymore. >> > > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor