notas.md
2.66 KB
Notas com Alice Martins
2023-05-04
Problemas
Tarefa 1A
- Está a contar os nós "in" e os nós "out" ao contrário, certo?
len(children)
diz quantas arestas saem dex
. - Em
python if len(parents) != 0: asc += 1 if len(children) != 0: des += 1
deve serpython if len(parents) != 0: des += 1 if len(children) != 0: asc += 1
porque o nóx
é (mais) um descendente se tem ascendentes (e igualmente para ascendente).
Tarefa 1B
- Não deve misturar o código para definir o grafo
G
com o código para o grafodot
. Exceto se quiser percorrer apenas uma vezmodel.nodes
emodel.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!). É melhornodes_in
do quenos_in
. - Use nomes descritivos nas suas variáveis:
node
em vez dex
. - Em vez de
asia = bn.import_DAG("asia2.bif")
talvezdag = 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))
usepython print(f"Número de nós: {len(nos)}")
### Desafios
- Torne o seu código geral.
- Coloque a parte essencial da tarefa 1A numa função,
summary_dag(filename)
, que tem argumento umastring
com o nome do ficheiro e devolve umdict
com chavesdag_file
,nodes
,count_parents
,count_children
,count_in_edges
,count_out_edges
. - Use uma função
summary_str(d)
que tem argumento umdict
como acima e devolve umastring
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 ...
- Por fim, combine as duas funções:
python summary = summary_dag("asia2.bif") message = summary_str(summary) print(message)
- Coloque a parte essencial da tarefa 1B em funções
show_dag(model)
esave_dag(model, target_filename)
.
- Coloque a parte essencial da tarefa 1A numa função,
- A biblioteca
bnlearn
é excessiva para estas tarefas. Não só precisa de várias dependências irrelevantes para o que pretendemos, por exemplo opytorch
, como demora imenso tempo a ler o ficheiro. Procure uma alternativa mais simples. (n.b. não sei se existe!)