# [Tutor] Help needed

Suhana Vidyarthi suhanavidyarthi at gmail.com
Sat Apr 26 21:48:13 CEST 2014

```Thanks for the response Smith, I was thinking make be I have done something
incorrect and if there is some other function that can be used to display
the output in desired order but don't see it possible thats why was
wondering if any of you Python gurus have any inputs for me :-)

On Sat, Apr 26, 2014 at 12:36 PM, C Smith <illusiontechniques at gmail.com>wrote:

> err, set also is unordered. I can see you are using set for a reason, but
> has no concept of order.
>
>
> On Sat, Apr 26, 2014 at 3:20 PM, C Smith <illusiontechniques at gmail.com>wrote:
>
>> 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 <
>> suhanavidyarthi at 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
>>> 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:
>>>
>>>
>>> [('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 <dyoo at 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.
>>>>
>>>> ######
>>>>     """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:
>>>>
>>>>
>>>> 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
>>>> 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 at python.org
>>> To unsubscribe or change subscription options:
>>> https://mail.python.org/mailman/listinfo/tutor
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140426/4fa49633/attachment.html>
```