-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathS-ALOHA.py
executable file
·53 lines (46 loc) · 1.8 KB
/
S-ALOHA.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: jairo
# @Date: 2015-12-04 22:06:44
# @Last Modified by: jairo
# @Last Modified time: 2015-12-17 12:49:04
import numpy as np
import argparse
from scipy import misc as sc
import sys
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--sigma', type=float, required=True,
help='Probabilidad de envío')
parser.add_argument('-t', '--tau', type=float, required=True,
help='Probabilidad de reenvío')
parser.add_argument('-m', '--nodes', type=int, required=True,
help='Cantidad de nodos')
parser.add_argument('-f', '--file', type=argparse.FileType('w'),
required=False, default=sys.stdout,
help='Archivo de salida (usado con la opción -o)')
args = parser.parse_args()
P = np.array([0.]*(args.nodes+1)**2)
P.shape = (args.nodes+1, args.nodes+1,)
tau = args.tau
sigma = args.sigma
M = args.nodes
for i in range(args.nodes+1):
for j in range(args.nodes+1):
if j < (i-1):
pr = 0.
elif j == (i-1):
pr = i*tau*(1.-tau)**(i-1)*(1.-sigma)**(M-i)
elif j == i:
pr = (1.-(i*tau*(1.-tau)**(i-1)))*(1.-sigma)**(M-i) + \
(M-i)*sigma*(1.-sigma)**(M-i-1)*(1.-tau)**i
elif j == (i+1):
pr = (M-i)*sigma*(1.-sigma)**(M-i-1)*(1.-(1.-tau)**i)
elif j > (i+1):
pr = sc.comb(M-i, j-i)*sigma**(j-i)*(1.-sigma)**(M-j)
P[i, j] = pr
# Imprime a la salida (archivo o stdout) con precision de 8 decimales
# y separados por comas (CSV)
np.savetxt(args.file, P, delimiter=',', fmt='%.8f')
if __name__ == '__main__':
main()