Ideias de Projeto de Pesquisa

Nesta página apresento informações relevantes para alunos que desejam ser orientados por mim. Informações tais como: área de pesquisa, dinâmica de trabalho, possibilidade de bolsa e etc. Além disso, apresento alguns projetos de trabalho que tenho em mente. Essa não é uma lista completa, ela serve apenas como um mostruário das possibilidades de trabalho.

Orientações

Eu procuro bons alunos para orientação de Iniciação Científica, Trabalho de Conclusão de Curso (PGC), Mestrado e Doutorado. Alunos que tenham brio, sejam organizados e responsáveis.

Minha área principal de pesquisa é em Teoria dos Grafos. Se você nunca ouviu falar nessa área, eu escrevi um texto intitulado "Prazer, me chamo Teoria dos Grafos" no qual explico exatamente qual o seu o objeto de estudo, como surgiu, e como se faz pesquisa nela. Se você gosta de quebra-cabeças (puzzles), vai adorar a área de Teoria dos Grafos.

Além de trabalhar com Teoria dos Grafos, eu trabalho e oriento em áreas afins, como combinatória, algoritmos e otimização. Em suma, os trabalhos orientados por mim são de cunho teórico que objetivam demonstrar teoremas e/ou desenvolver algoritmos. A única exceção a essa regra são os Trabalhos de Conclusão de Curso (PGC). Nesse caso, estou mais aberto a trabalhar em projetos aplicados que envolvam implementações e tecnologia.

A razão para essa distinção é que o PGC é uma atividade obrigatória para todos os alunos do Bacharelado em Ciência da Computação, o que gera uma grande demanda por orientação. Assim, para ajudar a suprir essa demanda e não sobrecarregar meus pares, eu decidi ser mais flexível com relação a essa requisição de orientação.

Orientações de Iniciação Científica (IC)

A Iniciação Científica é uma atividade de formação complementar e não obrigatória. Por isso, eu imponho as seguintes exigências para orientação de Iniciação Científica de forma a garantir a qualidade do resultado final.

  • Eu não oriento alunos que trabalhem ou façam estágio. Ao acordarmos uma orientação de Iniciação Científica, você estará comprometendo-se a dedicar-se exclusivamente à universidade durante toda a duração do projeto (12 meses). É possível receber uma bolsa (remuneração) durante a realização da IC, mas isso não é garantido. Veja a Seção Bolsas.
  • A IC requer 20 horas de dedicação semanal, das quais:
    • 1h ou 2h horas serão gastas em uma reunião semanal/quinzenal comigo.
    • Ao menos 8h (duas tardes) deverão ser gastas no TOCA (Laboratório de Teoria da computação, Otimização, Combinatória e Algoritmos)

Orientações de PDPD (Pesquisando Desde o Primeiro Dia)

No momento não estou aceitando alunos de PDPD

Bolsas

É possível requisitar e concorrer a bolsas (remuneração financeira) para PDPD, Iniciação Científica, Mestrado e Doutorado. Algumas bolsas para mestrado e doutorado não requerem nada além do preenchimento de um formulário de requisição. Outras, e todas as de Iniciação Científica, requerem a elaboração de um pequeno texto explicando o seu projeto de pesquisa (quem é o seu orientador, qual o seu problema, o que você pretende fazer, qual o cronograma de execução, por que esse problema é importante e etc).

Esse texto é elaborado em conjunto com o seu orientador – no caso, eu – e leva em média um pouco mais de um mês para ficar pronto (escrevemos um primeira versão, lemos, reescrevemos algumas partes, lemos novamente, corrigimos alguns pontos e repetimos o processo até o texto convergir para um projeto de pesquisa campeão). Uma vez finalizada a escrita do projeto, enviar-o-emos para análise de mérito pela instituição provedora da bolsa pleiteada (geralmente UFABC ou FAPESP) e aguardaremos a resposta. Tal resposta pode levar de um a três meses, a depender da bolsa pleiteada e da instituição provedora. Após a aprovação da concessão da bolsa, ainda leva em torno de 40 dias até o dinheiro ser depositado na conta bancária pela primeira vez, pois leva-se em torno de 4 dias para finalizar a documentação necessária para iniciar a bolsa (criar conta bancária no banco requisitado pela agência pagadora da bolsa, preencher e assinar o contrato) e o primeiro pagamento só é feito após 30 dias trabalhados.

Reforço que existem processos de obtenção de bolsas que são bem menos burocráticos e rápidos do que o descrito acima, mas de qualquer forma, é aconselhável começar o planejamento com antecedência, principalmente se o edital da bolsa requer o envio de um projeto de pesquisa.

Duração

A bolsa de Iniciação Científica e PDPD tem duração de 12 meses; a de mestrado, 24 meses; e a de doutorado, 48 meses.

Valor

O valor da bolsa depende da agência para o qual o pedido de financiamento foi realizado. As principais financiadoras são a UFABC (atráves do CNPQ e Capes) e a FAPESP (mais sobre a FAPESP a seguir). Os valores em 07/04/2023 são

Categoria UFABC FAPESP
PDPD 700,00 --
Iniciação Científica 700,00 800,00
Mestrado 2.100,00 2.349,00
Doutorado 3.100,00 3.462,00

FAPESP

A bolsa mais prestigiosa que você pode obter é a bolsa fornecida pela Fundação de Amparo à Pesquisa do Estado de São Paulo (FAPESP). Essa bolsa é fornecida apenas para os melhores estudantes e, com frequência, ser um bom estudante não é suficiente para obter essa honraria. Por esse motivo, ser um (ex-)bolsista FAPESP, de certa forma, é como ostentar um prêmio/certificado de excelência acadêmica.

Além disso, as bolsas da FAPESP possuem, geralmente, um valor expressivamente maior do que as de outras agências e os seus valores são atualizados com uma frequência muito maior do que as de outras agências. Atualmente (08/04/2023) essa diferença não é tão expressiva devido ao fato do governo federal ter reajustado os valores das bolsas federais recentemente em 40%, mas no passado essa diferença já passou de 50% com relação a outras bolsas.

Além disso, as bolsas FAPESP possuem duas vantagens que outras bolsas geralmente não tem: Taxa de Bancanda e BEPE.

Taxa de Bancada

A taxa de bancada é uma verba extra, além do "salário" mensal, cujo uso é destinado para a compra de equipamentos para o desenvolvimento do projeto, pagamento de passagens aéreas, inscrições em eventos, pagamento de diárias de hotéis para participação em conferências e etc.

Bolsa Estágio de Pesquisa no Exterior (BEPE)

Um bolsista FAPESP pode requisitar a "realização do BEPE". O BEPE é uma bolsa extra (na moeda do país de destino) para realizar uma visita/estágio de pesquisa em uma universidade no exterior.

O período da duração do BEPE depende do tipo de bolsa contemplada no Brasil. Um bolsista de Iniciação Científica pode ficar até 4 meses no exterior, enquanto que um de doutorado, até 12 meses. Ademais, o período de realização de BEPE não é contabilizado no período da bolsa original, sendo assim um tempo adicional de bolsa.

Procedimento para requisição

Para obter uma bolsa FAPESP é necessário preencher um formulário de requisição de bolsa com seus dados pessoais e anexar à requisição um projeto de pesquisa e o seu histórico escolar. Geralmente a FAPESP não concede bolsa a alunos que tenham reprovações no histórico escolar.

Projetos em Teoria dos Grafos (IC/PGC/Mestrado/Doutorado)

Os problemas que mais me chamam atenção em Teoria dos Grafos são problemas de coloração. Basicamente em um problema de coloração estamos interessados em pintar os vértices ou arestas de um grafo de forma a satisfazer alguma restrição, e geralmente estamos interessados em usar o menor número de cores possível.

Uma coloração de vértices é uma atribuição de cores aos vértices do grafo. Dizemos que uma coloração é própria se para toda aresta \(uv\) do grafo temos que a cor atribuída ao vértice \(u\) é distinta da cor atribuída ao \(v\). A Figura abaixo ilustra duas colorações do mesmo grafo. A coloração à esquerda é uma coloração própria. Note que toda aresta na coloração à esquerda toca em vértices com cores distintas. Já a coloração exibida à direita não é própria, por exemplo, note que a aresta \(v_2v_7\) toca nos vértices \(v_2\) e \(v_7\) e ambos possuem a mesma cor.

k7-colorido.svg
Figure 1: Exemplo de coloração própria (grafo à esquerda) e não própria (grafo à direita).

Note que é bem fácil mostrar que todo grafo admite uma coloração própria de vértices, basta pintar cada vértice com uma cor diferente. Então é natural perguntar-se qual seria o menor número de cores necessárias em uma coloração própria de vértices para um dado grafo \(G\). Esse número é chamado de número cromático e o número cromático de um grafo \(G\) é denotado por \(\chi(G)\). Analisando o grafo exibido na figura acima, não é difícil perceber que o número cromático dele é \(4\), ou seja, esse grafo não admite uma coloração de vértices própria com menos de quatro cores.

Quando o número de cores aumenta, fica difícil distinguir entre elas, por isso é comum usarmos números para representar as cores. Isso também facilita a formalização de coloração de vértices. Formalmente, definimos uma coloração de vértices de um grafo \(G\) como sendo uma função \(c \colon V(G) \to \{1, 2, \ldots, k\}\). Decodificando o matematiquês: é uma função \(c\) que associa os elementos do conjunto \(V(G)\) (os vértices) a elementos do conjunto \(\{1, 2, \ldots, k\}\). Em particular, nesse caso, também dizemos que \(c\) é uma \(k-\text{coloração}\) de vértices de \(G\), assim deixamos explícito que no máximo \(k\) cores foram usadas em \(c\). Agora podemos definir formalmente uma coloração de vértices própria de um grafo \(G\) como sendo uma coloração \(c\) tal que \(c(u) \neq c(v)\) para toda aresta \(uv \in E(G)\).

Calcular \(\chi(G)\) para um grafo arbitrário \(G\) é um problema computacionalmente muito difícil, NP-difícil para ser mais preciso. Entretanto, conhecemos diversas propriedades com relação ao número cromático. Para citar duas:

Além de conhecer várias propriedades sobre o número cromático, temos várias perguntas sem respostas. Para citar duas, temos a Conjectura de Hadwiger e a Conjectura de Erdős–Faber–Lovász,

Já em uma coloração de arestas, estamos interessados em pintar as arestas do grafo. Dizemos que uma coloração de arestas é própria se todas as arestas que tocam um determinado vértice possuem cores distintas e essa propriedade vale para todos os vértices do grafo. A figura a seguir exibe duas colorações de arestas de um mesmo grafo. O desenho à esquerda exibe uma coloração de arestas própria. Note como todas as arestas tocando o vértice \(v_3\) possuem cores distintas. Ademais, note que essa propriedade não vale apenas para o vértice \(v_3\), mas sim para todos os vértices do grafo. O desenho à direita exibe uma coloração de arestas que não é própria. Note como, por exemplo, existem diversas arestas com a cor vermelha tocando o vértice \(v_2\).

coloracao-aresta.svg

Formalmente, definimos uma coloração de arestas como uma função \(c \colon E(G) \to \{1, 2, \ldots, k\}\), i.e., uma função que associa os elementos de \(E(G)\) (arestas) aos elementos de \(\{1, 2, \ldots, k\}\) (cores representadas por números). Já uma coloração de arestas própria é definida como uma coloração de arestas \(c\) tal que \(c(uv) \neq c(uw)\) para toda aresta \(uv \in E(G)\) e \(uw \in E(G)\), com \(v \neq w\).

Novamente, é fácil perceber que todo grafo admite uma coloração própria de arestas, basta pintar cada aresta com uma cor diferente. Chamamos de índice cromático de um grafo \(G\), denotado por \(\chi'(G)\), o menor número de cores usadas em uma coloração de arestas própria de \(G\).

Como todas as arestas que tocam um determinado vértice precisam ter cores distintas, é fácil perceber que \(\chi'(G)\) precisa ser ao menos tão grande quanto o maior grau de um vértice do grafo \(G\), i.e., \(\chi'(G) \geq \Delta(G)\). Graças ao Teorema de Vizing, sabemos que \(\Delta(G) \leq \chi'(G) \leq \Delta(G) + 1\) para qualquer grafo \(G\). Surpreendentemente, decidir se \(\chi'(G) = \Delta(G)\) ou \(\chi'(G) = \Delta + 1\) para um grafo arbitrário \(G\) é um problema computacional muito difícil, NP-completo para ser preciso novamente.

Voltando novamente a coloração de arestas da Figura 2, embora não seja uma coloração própria, percebemos com um olhar mais cuidadoso que essa coloração também não é arbitrária. Ao olharmos para as arestas pintadas com a cor azul, por exemplo, percebemos que essas arestas formam uma estrutura de "estrela", onde temos um vértice central com as arestas formando "raios" que saem desse vértice. Essa estrutura também emerge quando analisamos as arestas pintadas com as outras cores. Esse tipo de coloração é chamado de decomposição em estrela. Você pode estar estranhando o nome decomposição em estrela ao invés de algo como coloração de arestas em estrelas. Isso se deve ao fato do problema ter sido originalmente declarado usando o conceito de decomposição de grafos, conceito esse que pode ser traduzido na terminologia de coloração de arestas. O índice cromático estelar de um grafo \(G\), denotado por \(\chi'_{es}(G)\), é o menor número de cores necessárias em uma decomposição de estrelas de \(G\).

Note que as mesmas perguntas realizadas para uma coloração de arestas (ou vértices) própria podem ser feitas para o problema de decomposição em estrelas:

  • Todo grafo admite uma decomposição em estrelas?
  • É possível estabelecer um valor \(C\) tal que \(\chi'_{es}(G) \leq C\)?
  • Computar o valor de \(\chi'_{es}(G)\) para um grafo arbitrário \(G\) é um problema computacionalmente fácil ou difícil?

E essas são apenas algumas perguntas que podemos fazer sobre um dado tipo de coloração de arestas (ou vértices), existem muitas outras.

Além das coloração de vértices própria, coloração de arestas própria e decomposição em estrelas, existem dezenas de outros tipos de colorações, cada uma delas com um potencial para diversas perguntas interessante. A seguir listarei 3 problemas de coloração que tenho interesse em trabalhar e um outro problema que não é de coloração.

Coloração Ímpar

Uma coloração ímpar é uma coloração própria \(c \colon V(G) \to \{1, 2, \ldots, k\}\) tal que, para todo vértice não isolado \(u \in V(G)\), temos que existe uma cor \(t\) tal que \(|\{v \in N(G) \colon c(v) = t\}|\) é ímpar. Em outras palavras, para todo vértice não isolado \(u \in V(G)\), existe uma cor que aparece um número ímpar de vezes na vizinhança de \(u\). A figura abaixo exibe um exemplo de uma coloração ímpar. Note que para cada vértice, existe uma cor em sua vizinhança que aparece um número ímpar de vezes. Por exemplo, fixando o vértice \(v_2\) e analisando a sua vizinhança, temos que as cores azul e vermelho aparecem duas vezes, que é um número par, e a preta aparece uma vez (um número ímpar). Assim, a condição é satisfeita para o vértice \(v_2\). Fazendo uma análise semelhante para os vértices restantes, concluímos que a condição é satisfeita para todos os demais e, portanto, essa coloração é uma coloração ímpar.

coloracao-impar.svg

O número cromático ímpar de um grafo \(G\), denotado por \(\chi_o(G)\), é o menor número de cores de uma coloração ímpar de \(G\). Como uma coloração ímpar é uma coloração própria com uma restrição extra, não é difícil perceber que \(\chi(G) \leq \chi_o(G)\) para todo grafo \(G\).

Com relação a este problema, gostaria de investigar perguntas como as apresentadas a seguir. Lembre-se que mencionei que, devido ao Teorema de Brooks, quase todos os grafos satisfazem \(\chi(G) \leq \Delta(G)\). Note que esse resultado é para uma coloração própria. Como a coloração ímpar é uma coloração própria com uma condição extra, acredita-se que é necessário mais cores para colorir todos os grafos, mas não muitas. De fato, acredita-se que apenas uma cor extra é suficiente.

Pergunta 1: Se \(G\) é um grafo com grau mínimo ao menos \(3\), então \(\chi_o(G) \leq \Delta(G) + 1\)?

Também mencionei que, devido ao celebrado Teorema das Quatro Cores, quatro cores eram suficientes para colorir propriamente qualquer grafo planar. Por causa disso, acredita-se que cinco cores são suficientes para colorir com uma coloração ímpar qualquer grafo planar.

Pergunta 2: Se \(G\) é um grafo planar, então \(\chi_o(G) \leq 5\)?

Sabemos que \(\chi(G) \leq \chi_o(G)\) para qualquer grafo \(G\). O que ainda não se sabe é se o valor de \(\chi_o(G)\) pode ser muito maior do que o valor de \(\chi(G)\). Ou seja, estamos interessados em responder a seguinte pergunta.

Pergunta 3: Para quais grafos \(G\), vale que \(\chi_o(G) \leq C \times \chi(G)\)? onde \(C\) é uma constante.

Coloração Aditiva

Dado um grafo \(G\), uma coloração \(c \colon V(G) \to \{1, 2, \ldots, k\}\) (não necessariamente própria) e um vértice \(u \in V(G)\), definimos \(S(u) = \sum_{v \in N(u)} c(v)\), ou seja, \(S(u)\) é a soma da cor dos vizinhos de \(u\). Note que \(S\) é uma função \(S \colon V(G) \to \mathbb{N}\), i.e., uma função que associa os elementos de \(V(G)\) (vértices) aos elementos do conjunto dos naturais. Portanto, \(S\) também é uma coloração (não necessariamente própria), mas ao invés de definirmos \(S\) diretamente estabelecendo a cor de cada vértice, construímos \(S\) de forma indireta, derivando \(S\) de uma outra coloração.

Uma coloração aditiva é uma coloração \(c \colon V(G) \to \{1, 2, \ldots, k\}\) tal que \(S(u) \neq S(v)\) para toda aresta \(uv \in E(G)\), isto é, \(c\) é uma coloração aditiva se a coloração derivada \(S\) é uma coloração própria. O número da sorte, denotado por \(\eta(G)\), é o menor \(k\) para o qual existe uma coloração aditiva para \(G\) com \(k\) cores.

A figura a seguir ilustra duas coloração de um mesmo grafo, uma aditiva (à esquerda) e outra não aditiva (à direita). Nessa figura, os valores circunscritos no vértice denotam a coloração \(c \colon V(G) \to \{1, 2, \ldots, k\}\). Já os números anotados do lado externo dos vértices, denotam \(S \colon V(G) \to \mathbb{N}\). Primeiro vamos analisar a coloração \(c\) exibida à esquerda. Note que essa coloração não é própria, por exemplo, \(c(w_1) = c(w_3) = 2\) e \(w_1w_3 \in E(G)\). Entretanto, essa coloração é aditiva, pois quando analisamos a coloração \(S\) (os valores em vermelho), vemos que \(S\) é uma coloração própria, i.e., \(S(w_i) \neq S(w_j)\) sempre que \(w_iw_j \in E(G)\). Já a coloração \(c\) exibida à direita, apesar de ser uma coloração própria, não é uma coloração aditiva. Note, por exemplo, que \(S(w_1) = S(w_3) = 6\) e \(w_1w_3 \in E(G)\).

coloracao-aditiva.svg
Figure 2: Exemplo de coloração aditiva (à esquerda) e não aditiva (à direita).

Sabemos como construir grafos \(G\) onde \(\eta(G)\) é tão grande quanto quisermos. Isso significa que você pode escolher um número \(\ell\) e através de um algoritmo podemos construir um grafo \(G\) tal que \(\eta(G) \geq \ell\). No entanto, o grafo construído por esse algoritmo possui muitos triângulos (cópias do \(K_3\)). Um grafo livre de triângulos é um grafo que não possui nenhum subgrafo do triângulo. Esses grafos possuem poucas arestas e, portanto, geralmente é mais fácil colorir-los. Assim, é natural perguntar-se.

Pergunta: Se \(G\) é um grafo livre de triângulos, então existe uma constante \(C\) tal que \(\eta(G) \leq C\)?

Decomposição Irregular

Um grafo \(G\) é localmente irregular se, para toda aresta \(uv \in E(G)\), temos que \(d_G(u) \neq d_G(v)\), onde \(d_G(x)\) denota o grau do vértice \(x\) em \(G\). A figura abaixo apresenta o desenho de um grafo localmente irregular. Note, por exemplo, que quando analisamos a aresta \(u_2u_5\), vemos que \(d_G(u_2) = 2 \neq 3 = d_G(u_5)\). Ademais, note que essa propriedade vale para toda arestas e, portanto, o grafo \(G\) exibido na figura é localmente irregular.

exemplo-localmente-irregular.svg

Dada uma coloração de arestas de um grafo \(G\), podemos olhar as arestas pintadas de uma mesma cor, digamos azul, como sendo um subgrafo de \(G\), o subgrafo azul. Dizemos que esse subgrafo é o subgrafo induzido pela cor azul. Uma decomposição localmente irregular é uma coloração de arestas onde cada cor induz um subgrafo que é um grafo localmente irregular. A figura abaixo exibe uma decomposição localmente irregular de um grafo usando 3 cores. Note como o subgrafo induzido por cada cor forma um grafo localmente irregular.

É conhecido da literatura que nem todo grafo admite uma decomposição localmente irregular, veja por exemplo os grafos abaixo.

triangle.svg

No entanto, sabemos descrever exatamente a estrutura dos grafos que não podem ser decompostos em grafos localmente irregulares. Um grafo é decomponível se ele admite uma decomposição localmente irregular.

Baudon, Bensmail, Przybyło e Woźniak conjecturaram que todo grafo decomponível pode ser decomposto em três grafos localmente irregular, isto é, três cores é suficiente para decompor qualquer grafo decomponível em grafos localmente irregulares. Recentemente foi descoberto um grafo pequeno, com apenas 10 vértices, que requer quatro cores.

Nesse problema, estou interessado em responder a seguinte pergunta.

Pergunta: Para todo grafo decomponível \(G\), existe uma decomposição localmente irregular usando apenas 4 cores?

Seria muito legal responder essa permunta usando 4 cores, mas uma resposta para a pergunta abaixo também seria muito legal, pois atualmente ninguém consegue responder essa pergunta usando menos do que 238 cores.

Pergunta: Para todo grafo decomponível \(G\), existe uma decomposição localmente irregular usando apenas 100 cores?

Conjunto Dominante em Grafos Cúbicos

Dizemos que um grafo \(G\) é \(3\text{-conexo}\) se precisamos remover ao menos \(3\) vértices para desconectar \(G\). Aqui a remoção de vértices significa remover os vértices do grafo e qualquer aresta que os toquem. A figura abaixo ilustra um exemplo de um grafo que é \(3\text{-conexo}\).

exemplo-3-conexo.svg

A figura abaixo ilustra o grafo obtido ao removermos os dois vértices destacados em vermelho. Note que o grafo resultante continua conexo, i.e., permanece sendo uma única malha conectada. Note que para desconectar esse grafo (quebrar a rede de conexão em dois ou mais pedaços) precisamos remover ao menos três vértices, não é possível fazer isso removendo dois ou menos vértices.

grafo-3-conexo.svg

Dizemos que um grafo é cúbico se todos os vértices possuem grau três. A figura abaixo exibe um exemplo de um grafo cúbico.

grafo-cubico.svg
Figure 3: Exemplo de um grafo cúbico com um conjunto dominante destacado em vermelho

Um conjunto dominante de um grafo \(G\) é um conjunto de vértices \(S\) que satisfaz a seguinte propriedade: se \(u \in V(G)\) então ou \(u \in S\) ou \(u\) tem um vizinho em \(S\). Note que todo grafo \(G\) possui um conjunto dominante, já que \(V(G)\) é um conjunto dominante. Além disso, podemos ver que \(V(G)\) é um conjunto dominante de tamanho máximo, então encontrar um conjunto dominante máximo é um problema trivial. Portanto, estamos interessados em encontrar um conjunto dominante de tamanho mínimo.

Em 1996, Reed provou que todo grafo cúbico com \(n\) vértices possui um conjunto dominante com tamanho menor ou igual à \(3/8 n\). Esse resultado diz que o grafo exibido acima, que tem \(n = 10\) vértices, contém um conjunto dominante de tamanho menor ou igual à \(3/8 \times 10 = 3,75\), o que é verdade como pudemos comprovar pelos vértices destacados em vermelho.

Além de provar o resultado mencionado acima, Reed fez a seguinte pergunta:

Pergunta: Se \(G\) é um grafo cúbico, então \(G\) contém um conjunto dominante de tamanho no máximo \(1/3 n\)?

Tempos depois essa pergunta foi respondida de forma negativa, existiam grafos cúbicos com \(n\) vértices onde seus conjuntos dominantes tinham tamanho maior do que \(1/3 n\). No entanto, todos esses grafos não eram \(3\text{-conexos}\). Assim, uma nova pergunta foi feita e é nesta pergunta que estou interessado.

Pergunta: Se \(G\) é um grafo cúbico e \(3\text{-conexo}\), então \(G\) contém um conjunto dominante de tamanho no máximo \(1/3 n\)?

Projeto de Graduação de Curso (PGC)

Nessa seção, menciono algumas propostas de trabalho que são exclusivas para o Projeto de Graduação de Curso.

Pesquisa Operacional (aka resolvendo problemas NP-difíceis na prática)   PGC

Pesquisa Operacional é a área do conhecimento que lida com o desenvolvimento de métodos e aplicações para tomada de decisão. No nosso contexto, estaremos interessados em resolver problemas de otimização na prática da forma mais eficiente possível. A grosso modo, um problema de otimização é um problema no qual existe um conjunto de soluções possíveis, cada uma dessas soluções tem um custo/valor, e estamos interessados em encontrar a solução de valor máximo/mínimo. Por exemplo, dado o mapa rodoviário do estado de São Paulo, gostaríamos de encontrar o trajeto mais curto da cidade de Santo André até a cidade de Campinas. A maioria dos problemas interessantes de otimização combinatória, e geralmente os mais importantes em termos práticos, são problemas NP-difíceis. Sendo NP-difícil ou não, precisamos resolvê-los no dia a dia. Como não conhecemos nenhum algoritmo eficiente até o momento, o jeito é apelar para todo tipo de truque baixo para resolver o problema da melhor forma possível. É aqui que entram as heurísticas, meta-heurísticas, programação linear (inteira), programação por restrição, algoritmos de aproximação, algoritmos probabilísticos.

Na verdade, este não é um projeto, é um metaprojeto, ou seja, uma espécie de esqueleto de projeto do qual podemos criar vários projetos. O fluxo de pesquisa nesse (meta)projeto é basicamente o seguinte:

  1. Escolher um problema NP-difícil interessante para trabalhar;
  2. Bolar uma forma de resolvê-lo (geralmente heurística ou programação linear inteira);
  3. Implementar essa solução;
  4. Rodar o seu programa em um banco de instâncias do problema (benchmark);
  5. Reportar os seus resultados (tempo de execução e qualidade da solução encontrada) comparando-os com os da literatura no relatório final do trabalho.

Como um exemplo de um trabalho nessa linha, veja: Um estudo computacional do Problema do Gnosticismo Perfeito. Tenha em mente que o trabalho anterior é um trabalho de mestrado, para um trabalho de conclusão de curso espera-se algo mais simples.

ABCGraphs

O SageMath é um sistema de álgebra computacional (CAS) com recursos que cobrem muitos aspectos da matemática, incluindo álgebra, combinatória, teoria dos grafos, análise numérica, teoria dos números, cálculo e estatísticas. Em particular, o SageMath possui um amplo número de ferramentas para lidar com grafos (veja a lista aqui).

Entretanto, o SageMath é baseado em Python, que não é uma linguagem famosa pela sua eficiência. Em alguns casos para ganhar desempenho precisamos implementar o nosso programa em uma linguagem mais eficiente como Fortran/C/C++ ou Rust. Entretanto existe uma carência de bibliotecas para grafos nessas linguagens.

O igraph é uma coleção de bibliotecas para criar e manipular grafos em C. O software é amplamente utilizado em pesquisas acadêmicas em network science e áreas afins. A publicação que apresenta o software tem 11.163 citações em 16 de Março de 2023, de acordo com o Google Scholar. Entretanto, quando comparado ao SageMath, o igraph é extremamente pobre em recursos para grafos.

Minha ideia inicial era propor um meta-projeto no qual contribuíssemos com o projeto igraph (afinal, por que reinventar a roda, não é mesmo?). Entretanto, a linguagem C, por ser antiga, deixa a desejar quando pensamos em práticas modernas de engenharia de software, como o suporte a testes unitários. Embora existam frameworks para testes unitários em C, eles são desajeitados, e, talvez por isso, não são utilizados no projeto igraphs. O projeto igraphs optou por fazer testes de uma forma bem artesanal.

Todos esses pontos me levaram ao desejo de recriar a roda, implementando uma nova biblioteca para grafos, a ABCGraphs, em uma linguagem moderna e eficiente (Rust) e usando as melhores práticas de desenvolvimento de software (testes unitários, versionamento, integração contínua e etc).

Este metaprojeto objetiva adicionar novas funcionalidades à bibliotecas ABCGraphs. O fluxo de trabalho de uma instância desse metaprojeto seria:

  1. Escolher uma funcionalidade para adicionar a ABCGraphs, por exemplo, verificar se um dado grafo \(G\) possui largura arbórea no máximo \(k\).
  2. Estudar a literatura sobre o problema e descobrir qual trabalho apresenta a melhor solução para o problema, por exemplo, A Linear-Time Algorithm for Finding Tree-Decompositions of Small Treewidth
  3. Estudar a teoria do artigo, compreender o artigo, compreender o porquê do algoritmo funcionar (entender as demonstrações de correção do algoritmo)
  4. Implementar o algoritmo, escrever testes unitários
  5. Fazer um pull-request e integrar a sua solução na branch do projeto
  6. Escrever o relatório do trabalho

Programas para o mercado financeiro

money.gif

Eu sou um capitalista, gosto de dinheiro e me interesso pelo mercado financeiro. Se você desejar desenvolver algum software para o mercado financeiro no seu PGC, tais como,

  • Sistema de recomendação de compra e venda de ações/FIIs/commodities
  • Ferramentas para auxiliar análise técnica ou fundamentalista;
  • etc

eu posso lhe orientar. Saiba entretanto que isso é apenas um hobby para mim, nunca fiz nenhum curso formal nessa área e nem faço pesquisa nela.

Integração do Git no Overleaf

O overleaf é um software opensource de edição colaborativa de LaTeX. Atualmente é uma ferramenta muito utilizada por pesquisadores das áreas de exatas, como matemáticos, físicos e cientistas da computação. Embora seja opensource e possa ser instalado localmente em um servidor local, a grande maioria dos usuários utilizam o overleaf pelo site overleaf.com. O overleaf.com oferece uma conta gratuita com as mesmas funcionalidades da versão opensource, mas também oferece uma conta premium com funcionalidades extras importantes que não estão disponíveis na versão opensource, tais como integração com o git, github e dropbox.

O objetivo desse projeto é implementar a integração git, e outras funcionalidades, na versão opensource do overleaf.

Neste trabalho você terá que lidar com desenvolvimento web, aprender a fazer deploy de serviços web, descobrir como se familiarizar como um código que não foi escrito por você, desenvolver testes e trabalhar segundo as boas práticas de desenvolvimento de software para adicionar funcionalidades em um projeto opensource.

Interessado?

excited.jpg

Caso você tenha ficado interessado e queira iniciar um projeto de orientação comigo, entre em contato por e-mail: m.sambinelli@ufabc.edu.br. Na mensagem apresente-se e diga que tipo de trabalho você têm interesse em realizar. Enviar o histórico escolar anexado a mensagem não é necessário, mas é fortemente recomendado, já que assim posso identificar seu background, pontos fracos e fortes, e, assim, sugerir problemas que façam sentido para você. Se você pretende ser orientado por mim no seu mestrado ou doutorado, também veja o site do Programa de Pós-Graduação em Ciência da Computação da UFABC para saber como funciona o processo de inscrição e o processo de seleção no nosso programa de pós-graduação.

Créditos e Agradecimentos / Credits and Acknowledgements

Gostaria de agradecer a Jincheng Yang pelas incríveis e lindas figuras de grafos de seu blog que serviram de base para a criação das minhas figuras.

I would like to thank Jincheng Yang for the amazing and beautiful figures of graphs from her blog that served as a basis for the creation of my figures.

Theme is based on Cactus
Created with Emacs 29.2 (Org mode 9.6.15) on GNU/Linux
Last Updated: 2023-04-20 Thu 12:43