[Tutor] Help needed

C Smith illusiontechniques at gmail.com
Sat Apr 26 21:36:52 CEST 2014


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
>> 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 <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.
>>>
>>> ######
>>> 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 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/f0b8a429/attachment-0001.html>


More information about the Tutor mailing list