notas.md 3.06 KB

Notas com Alice Martins

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.

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 if len(parents) != 0: asc += 1 if len(children) != 0: des += 1 deve ser python 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

  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!)