1e8b2315
Francisco Coelho
Notas com AMartin...
|
3
4
5
6
7
8
9
10
11
12
13
14
15
|
## 2024-01-30
### Estrutura do Relatório
1. Introdução - programação lógica; redes bayesianas; programação lógica probabilística. Ferramentas. Problema
2. Desenvolvimento
1. Exposição - desenvolvimento
2. Crítica positiva - testes, documentação, funcionalidade
3. Crítica negativa
3. Conclusões
1. Balanço do que foi feito, comparando os +/-,
2. visão de problemas a resolver e outras tarefas futuras.
|
d080b400
Francisco Coelho
Paper draft: Exte...
|
16
17
18
19
20
21
22
23
24
|
## 2023-05-04
### Problemas
#### Tarefa 1A
1. Está a contar os nós "in" e os nós "out" ao contrário, certo? `len(children)` diz quantas arestas saem de `x`.
2. Em
```python
|
d080b400
Francisco Coelho
Paper draft: Exte...
|
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
|
```
porque o nó `x` é (mais) um descendente se tem ascendentes (e igualmente para ascendente).
#### Tarefa 1B
1. Não deve misturar o código para definir o grafo `G` com o código para o grafo `dot`. **Exceto** se quiser percorrer apenas uma vez `model.nodes` e `model.edges`.
### Sugestões
- **Use sempre, e só, o inglês no seu código**, não só porque não se podem usar acentos, como `nós_in`, mas também porque misturar português com inglês fica estranho (isto é, _feio_!). É melhor `nodes_in` do que `nos_in`.
- Use nomes descritivos nas suas variáveis: `node` em vez de `x`.
- Em vez de `asia = bn.import_DAG("asia2.bif")` talvez `dag = bn.import_DAG("asia2.bif")` seja melhor (**porquê?**)
- O código também fica mais simples se usar "f-strings": Em vez de
```python
print("Número de nós:", len(nos))
```
use
```python
print(f"Número de nós: {len(nos)}")
```
### Desafios
1. **Torne o seu código geral.**
1. Coloque a parte essencial da tarefa 1A numa função, `summary_dag(filename)`, que tem argumento uma `string` com o nome do ficheiro e devolve um `dict` com chaves `dag_file`, `nodes`, `count_parents`, `count_children`, `count_in_edges`, `count_out_edges`.
2. Use uma função `summary_str(d)` que tem argumento um `dict` como acima e devolve uma `string` com as perguntas e as respostas "bem formatadas". Por exemplo:
```text
DAG file: asia2.bif
Number of nodes: 8
Number of parents: 6
Number of children: 6
Average in-degree: 1.0
Average out-degree: 1.0
Nodes:
asia
tub
...
```
3. Por fim, combine as duas funções:
```python
summary = summary_dag("asia2.bif")
message = summary_str(summary)
print(message)
```
4. Coloque a parte essencial da tarefa 1B em funções `show_dag(model)` e `save_dag(model, target_filename)`.
2. **A biblioteca `bnlearn` é excessiva para estas tarefas.** Não só precisa de várias dependências irrelevantes para o que pretendemos, por exemplo o `pytorch`, como demora imenso tempo a ler o ficheiro. _Procure uma alternativa mais simples._ (**n.b.** não sei se existe!)
|