1. Aleatório
Como o aluno_1.py da monitoria: sorteia um vértice livre. Serve de base de comparação.
função ALEATÓRIO(grafo)
livres ← { v : time(v) = 0 }
devolva um vértice de livres sorteado
Projeto da disciplina · demonstração
Esta página serve para treinar para a competição do projeto. Você escolhe um grafo e duas estratégias, ou joga você mesmo, e acompanha cada lance com a explicação de quem ficou com cada vértice e por quê.
As duas equipes, a vermelha e a preta, se alternam. Em cada lance, a equipe da vez escolhe um vértice livre, que vira um centro seu.
A distância é o número de arestas do menor caminho. Se as duas equipes têm centros à mesma distância, o peso do vértice se divide ao meio.
Depois do 6º lance, cada equipe soma os pesos dos seus vértices. O confronto tem duas partidas, e cada equipe começa uma delas.
Estas são as regras da documentação do projeto, escrita pela monitoria. Se houver diferença, vale a documentação.
Deslize para o lado para ver os 13 grafos.
Para jogar, escolha “Você” numa equipe; escolha nas duas para disputar com um colega no mesmo computador.
Passe o mouse ou toque num vértice para ver a que distância ele está do centro mais próximo de cada equipe.
Quer comparar todas as estratégias no grafo escolhido de uma vez?
Todos contra todos
Cinco estratégias
São as estratégias que você escolhe no passo 2. Leia o pseudocódigo, aperte “Testar no tabuleiro” e acompanhe, lance a lance, por que ela escolheu cada vértice. Em todas, time(v) vale 0 para vértice livre, 1 para centro próprio e 2 para centro do adversário, como na documentação, e d(u, v) é o número de arestas do menor caminho; empates ficam com o vértice de maior peso e, persistindo, com o primeiro em ordem alfabética.
Como o aluno_1.py da monitoria: sorteia um vértice livre. Serve de base de comparação.
função ALEATÓRIO(grafo)
livres ← { v : time(v) = 0 }
devolva um vértice de livres sorteado
Como o aluno_2.py: pega o vértice livre mais pesado e ignora onde ele está no grafo.
função MAIOR_PESO(grafo)
livres ← { v : time(v) = 0 }
devolva o v de livres com maior peso(v)
Testa cada vértice livre e fica com o que dá mais pontos logo depois do lance, contando a posição dos centros já colocados.
função GANHO_IMEDIATO(grafo)
meus ← { c : time(c) = 1 }
deles ← { c : time(c) = 2 }
para cada v com time(v) = 0
ganho(v) ← PONTOS(meus ∪ {v}, deles)
devolva o v de maior ganho(v)
função PONTOS(meus, deles)
total ← 0
para cada vértice u
a ← min { d(c, u) : c ∈ meus }
b ← min { d(c, u) : c ∈ deles }
se a < b então total ← total + peso(u)
senão se a = b < ∞ então
total ← total + peso(u)/2
devolva total
▹ o mínimo de um conjunto vazio é ∞
Procura o vértice livre mais perto, em média, de todo o peso do grafo: a mediana do grafo. Não olha o adversário.
função MEDIANA(grafo)
para cada v com time(v) = 0
custo(v) ← Σ peso(u) · d(v, u)
▹ soma sobre todos os vértices u
devolva o v de menor custo(v)
Supõe que o adversário vai responder com o seu melhor ganho imediato e escolhe o lance com o melhor saldo depois dessa resposta: um minimax de profundidade 2.
função ANTECIPAÇÃO(grafo)
meus ← { c : time(c) = 1 }
deles ← { c : time(c) = 2 }
para cada v com time(v) = 0
M ← meus ∪ {v}; D ← deles
se |deles| < 3 então
r ← o w livre, w ≠ v, que maximiza
PONTOS(deles ∪ {w}, M)
D ← deles ∪ {r}
saldo(v) ← PONTOS(M, D) − PONTOS(D, M)
devolva o v de maior saldo(v)
Estas estratégias são exemplos para estudo e comparação. O código entregue no projeto precisa ser de autoria do grupo, sem código gerado por IA nem copiado de outras fontes, como manda a documentação.
Use a demonstração para testar ideias: o que acontece na estrela, no haltere ou quando a sua equipe começa a segunda partida? Uma sugestão de exercício: rode o torneio em vários grafos e explique por que a mediana ponderada vai bem em uns e mal em outros.
A competição da turma
Dez grupos se inscreveram no aviso da monitoria no Classroom até 15/10. O prazo de inscrição já passou: quem não se inscreveu só pode pedir a liberação diretamente ao monitor bolsista, Gabriel Nobrega da Silva Barros (gnsb@cin.ufpe.br). A entrega do resposta.py é até 30/11, no Classroom, e a apresentação, em 03/12. As entradas oficiais da competição e os seus SHA-256 saem em novembro.
Os grupos estão numerados pela ordem de inscrição, e os nomes, como cada grupo os escreveu no Classroom. Correções vão para a monitoria.