-
Notifications
You must be signed in to change notification settings - Fork 6
/
README-es
133 lines (90 loc) · 4.2 KB
/
README-es
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
= Redes Bayesianas para Ruby ( bn4r )
bn4r es una librería de redes bayesianas en Ruby que proporciona
al usuario clases para crear redes bayesianas y varios algoritmos
para resolverlas.
La implementación de los algoritmos está basada en: S.Russell, P.Norving, "Artificial
Intelligence, A Modern Approach", 2nd Edition.
Página web:
http://bn4r.rubyforge.org/es
Página web (versión inglesa):
http://bn4r.rubyforge.org
Proyecto en Rubyforge:
http://rubyforge.org/projects/bn4r
== Dependencias
* rgl-0.2.3 ( Ruby Graph Library ), http://rgl.rubyforge.org
== Principios de diseño
La librería consiste en el objeto BayesNet pensado para llenarse con
objetos del tipo BayesNetNode, estos objetos están definidos en bn.rb.
El objeto BayesNet es una especialización de RGL::DirectedAdjacencyGraph ( http://rgl.rubyforge.org ).
En el archivo bn_algorithms.rb está la implementación de los algorimos de inferencia
que resuelven las estructuras BayesNet creadas con la librería.
Los archivos bn_export.rb y bn_import.rb contienen métodos para importar y exportar las
redes bayesianas en varios formatos.
Finalmente se distribuyen unos métodos para rellenar automáticamente las tablas
de probabilidades condicionadas de los nodos de la red bayesiana (BayesNetNode)
== Jugando un poco ...
1. Instalar la ruby gem ( bn4r-0.1.2.gem )
gem install bn4r
2. Incluir bn4r
require 'bn4r'
3. Crear tu primera red bayesiana
# Create BayesNet
bn_aima = BayesNet.new
# Create nodes for the Bayes Net (BayesNetNodes)
burglary = BayesNetNode.new("Burglary")
earthquake = BayesNetNode.new("Earthquake")
alarm = BayesNetNode.new("Alarm")
john_calls = BayesNetNode.new("JohnCalls")
mary_calls = BayesNetNode.new("MaryCalls")
# Add nodes ( vertex ) to the BayesNet
bn_aima.add_vertex(burglary)
bn_aima.add_vertex(earthquake)
bn_aima.add_vertex(alarm)
bn_aima.add_vertex(john_calls)
bn_aima.add_vertex(mary_calls)
# Add relations ( edges ) between nodes in the BayesNet
bn_aima.add_edge(burglary,alarm)
bn_aima.add_edge(earthquake,alarm)
bn_aima.add_edge(alarm,john_calls)
bn_aima.add_edge(alarm,mary_calls)
# Assign probabilities to each node
burglary.set_probability_table([], [0.001, 0.999] )
earthquake.set_probability_table([], [0.002, 0.998] )
alarm.set_probability_table([burglary,earthquake], [0.95, 0.05, 0.94, 0.06, 0.29, 0.71, 0.001,0.999] )
john_calls.set_probability_table([alarm], [0.90,0.10,0.05,0.95])
mary_calls.set_probability_table([alarm], [0.70,0.30,0.01,0.99])
6. Resolverla!
# John and Mary are calling ...
john_calls.set_value(true)
mary_calls.set_value(true)
# Why?
is_there_a_burglary = bn_aima.enumeration_ask( burglary, [john_calls, mary_calls] )
puts "Call the police!" if is_there_a_burglary[0] > is_there_a_burglary[1]
is_the_alarm_on = bn_aima.enumeration_ask( alarm, [john_calls, mary_calls] )
puts "Run home, your alarm is distubing the neigborhood!" if is_the_alarm_on[0] > is_the_alarm_on[1]
is_there_a_earthquake = bn_aima.enumeration_ask( earthquake, [john_calls, mary_calls] )
puts "Calm yourself, there isn't a earthquake ;)" if is_there_a_earthquake[0] < is_there_a_earthquake[1]
7. Ver que pinta tiene la red bayesiana creada
# In .dot format
bn_aima.to_dot
# In Microsoft Belief Networks (.xbn) format
# (download for free in: http://research.microsoft.com/adapt/MSBNx )
bn_aima.to_xbn
== Documentación
Se puede encontrar Documentación en ingles en la dirección
http://bn4r.rubyforge.org/rdoc
o se puede generar con rdoc con el comando:
rdoc README lib
== Creditos
Gracias a Núria Bel ( http://www.upf.edu/pdi/iula/nuria.bel ) por su trabajo en este proyecto
sin ella no se podría haber hecho.
Gracias a Ryan Dahl por su trabajo en http://www.math.rochester.edu/people/grads/rld/bayesnets,
fue la idea base del proyecto.
También gracias a toda la comunidad Ruby.
== Copyright
Este trabajo esta desarrollado por Sergio Espeja ( http://www.upf.edu/pdi/iula/sergio.espeja, sergio.espeja en gmail.com )
principalmente en el Institut Universitari de Lingüística Aplicada de la Universitat Pompeu Fabra ( http://www.iula.upf.es ),
y en bee.com.es ( http://bee.com.es ).
Es software libre y debe distribuirse bajo la licencia GPL.
== Soporte
Contactarme en http://rubyforge.org/projects/bn4r.