Nossa empresa desenvolve soluções de software baseando-se em técnicas matemáticas, estatísticas, e computacionais para uma grande variedade de necessidades.
Nossa empresa é formada por Engenheiros e PhDs, pessoas que conhecem e apreciam as ciências e também se divertem aplicando seu conhecimento teórico em soluções de software para problemas bastante concretos. Somos motivados por desafios e sabemos que cada projeto é único e nos traz novos conhecimentos e ideias.
Nosso trabalho consiste em avaliar uma questão ou problema enfrentado por sua empresa, por exemplo, a otimização do consumo de matéria-prima. Utilizando princípios de pesquisa operacional, tentamos encaixar a questão em algum processo conhecido (não reinvente a roda!) e então elaboramos um protótipo para testes de validação. Uma vez que os testes demonstrem a viabilidade da solução, implementamos uma versão que automatiza o máximo possível das tarefas e permite ao cliente se concentrar naquilo que é mais importante em seu negócio, cabendo ao software desenvolvido se encaixar a empresa e não o contrário.
ContatoIniciando um projeto
Quais itens e quanto devo comprar para manter em estoque?
Quero que meu site permita buscar minha base de dados utilizando nomes cuja grafia pode ser diferente da digitada, e a resposta tem que ser instantânea!
É possível identificar contas no meu sistema que provavelmente são fraudulentas somente analisando os dados do cadastro e faturamento?
Como dimensionar um móvel para produção seriada de forma a minimizar a perda de matéria prima (chapas de MDF/algomerado)?
serviços
Empilhamento de peças
Estabilidade para o descarregamento e transporte de peças não homogêneas em pallets.
Neste projeto desenvolvemos soluções para descarga robótica de peças heterogêneas com empilhamento estável em pallet para transporte em roletes.
Nosso algoritmo garante a integridade da pilha durante toda a sua construção, minimizando o número de pilhas geradas e portanto facilitando a operação em fábricas que produzem lotes pequenos e variados.
Esquema de corte
Menos de 1% de descarte de material.
A otimização consiste em minimizar ou maximizar uma função objetivo sujeito a restrições impostas pelo modelo. Muitas vezes a função objetivo é simplesmente o custo de produção de um item e as restrições se referem a condições impostas pelo processo de fabricação, disponibilidade de matéria prima entre outros fatores.
Nosso otimizador de corte
Para obter cortes eficientes de chapas de MDF/algomerado são gerados diversos esquemas de corte, minimizando o custo total de material utilizado. Pode-se dispor de diversos tamanhos de chapa para que o algoritmo escolha quais chapas usar. A solução final é composta de diversos esquemas e suas respectivas quantidades de execução.
Para computar as soluções são necessários diversos algoritmos de otimização. Há algoritmos especializados em gerar esquemas de corte eficientes e outros algoritmos, como Simplex e Programação Genética, utilizados para compor uma solução global através dos esquemas gerados individualmente.
Métodos estatísticos obtém correlações entre dados, determinam quais são as variáveis mais importantes para explicar um fenômeno, extrapolam um modelo matemático a partir de amostras e muito mais. Técnicas de Aprendizagem Computacional permitem treinar softwares classificadores que analisam os dados e predizem o valor de uma variável depentente com excelente taxas de acerto.
Detecção de contas fraudulentas
Utilizando uma enorme base de dados onde uma fração das contas foi identificada como fraudulenta (manualmente ou através de outros métodos), treinamos um modelo de Random Forests para a classificação automática de registros suspeitos.
Este modelo consiste em uma coleção de árvores de decisão, sendo que cada uma analisa um subconjunto das variáveis e emite um voto ('conta suspeita' ou 'conta normal'). A decisão da floresta depende dos votos das árvores que a compõe (por exemplo, 2/3 dos votos são necessários para marcar a conta como suspeita automaticamente).
A floresta é obtida através de algoritmos que analisam uma amostra dos dados já classificados. A verificação da qualidade dos resultados é feita através de validação cruzada, ou seja, o classificador é testado em uma parte da amostra que não foi usada para treino e nesta parte da amostra ela deve exibir uma taxa de acerto bem alta.
Árvore de decisão
Uma árvore pode ser usada para classificar dados fazendo uma série de questões do tipo Sim/Não até chegar a um nó folha (resultado da classificação).
Algoritmos são a essência do software. Seja para encontrar a menor rota que visita todos os pontos selecionados de um mapa ou para controlar um elevador num prédio de cem andares, uma solução algorítmica é necessária para evitar desperdícios e maximizar a eficiência.
Estrutura de dados Trie
Uma forma de armazenar um dicionário de palavras para efetuar buscas de forma eficiente.
Implementamos o sistema de busca de nomes por aproximação no sítio African-Origins. Os nomes africanos foram registrados por Europeus de forma inconsistente, sendo que a maioria dos nomes difere levemente da grafia atual. Utilizamos um índice na forma de um trie e desenvolvemos um algoritmo que rapidamente calcula uma distância baseada em alterações de grafia para ordenar nomes por proximidade em relação ao termo pesquisado.
Toda a solução foi pensada com alta performance em mente, sendo que na média leva-se menos de 30 milisegundos para encontrar os 100 nomes mais próximos do termo consultado, numa base de quase 100.000 registros (implementado na forma de um web-service programado em Java).
Tratamento de ruído em imagens
É possível reduzir drasticamente certos tipos de ruído utilizando características morfológicas das imagens.
Neste trabalho científico em conjunto com os grupos de Visão Computacional e de Otimização Contínua da Universidade de São Paulo, desenvolvemos a baste teórica e uma implementação de software para o design automático de operadores morfológicos para tratamento de ruído em imagens através de treino estatístico.
O artigo foi publicado no prestigioso IEEE Transactions on Image Processing, vol. 16, issue 2, pg. 453-462 (2007). O código fonte do software que faz o treinamento, bem como testes de validação cruzada estão disponíveis neste link.
A busca incessante por conhecimento é fundamental para enfrentar os desafios de pesquisa operacional.
Research is the process of going up alleys to see if they are blind.
Histórico de pesquisa e desenvolvimento
Há uma década nosso pessoal contribui na pesquisa de tópicos de matemática e ciência da computação em parceria com diversas universidades, como USP, a UNICAMP, a Emory University, entre outras.
Somos engenheiros e doutores que gostam tanto de pesquisa básica quanto de pesquisa aplicada.