quarta-feira, 23 de maio de 2018

Computação 3 de X - Números

Após a humanidade ter alcançado a abstração dos números vem o seu desenvolvimento escrito e o nascimento da aritmética. E é nesta evolução que nos focaremos hoje. 
O osso de Ishango, de 20 mil anos, parece mostrar riscos que correspondiam a marcas de contagem.

Segundo [1] alguns registros foram inscritos em tabuas de barro antes de 1000 D.C. Essas civilizações estavam acostumadas a contagem nos dedos, por isso foram adotados sistemas numéricos de base 5 ou 10. Os sistemas numéricos Sumérios, Gregos, Romanos e Arábicos foram algumas das invenções. 


Segundo [2] os gregos e os romanos usaram as letras do alfabeto. Os algarismos romanos que conhecemos até hoje, nos relógios e nos capítulos de livros, foram bastante utilizados na Europa. O primeiro documento datando o uso do sistema hindu-arábico na Europa foi escrito por Claustro Albeda, na Espanha em 976 D.C. 

Segundo [2] O sistema hindu-arábico trouxe um grande avanço e possibilitou o desenvolvimento de métodos matemáticos a aritméticos, graças a sua repetição de símbolos e o zero, que não existia nos numerais romanos. Al-Khwarizmi, de origem persa, foi um matemático de extrema importância para o desenvolvimento da matemática, e o seu trabalho se espalhou por todo o império árabe, e a partir do contato destes com a Europa, através do comércio e guerras deu-se a expansão dos seus numerais pela Europa. 

Segundo [3] Al-Khwarizmi estabeleceu os métodos básicos para adicionar, multiplicar e dividir, extrair a raiz quadrada e calcular os dígitos de π. Eram métodos não ambíguos, mecânicos, eficientes e corretos. Era Algoritmos, termo cunhado para homenagea-lo. 

Segundo [3] Não fosse por Leonardo de Pisamais conhecido pelo nome de Fibonacci, o trabalho de Al-Khwarizmi não teria chegado ao Ocidente, hoje ele é mais conhecido pela sua sequência numérica, a Sequência da Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ..., onde cada número é a soma dos antecessores imediatos. Sobre Fibonacci falaremos em outra postagem. 

O uso do sistema hindu-arabico se firmou na Europa por volta de 1375, embora ainda existisse uma grande resistência para a adoção dos novos números [3]. Segundo o autor, Essa permanência dos métodos antigos de notação foi causado não por falta de conhecimento sobre o novo, mas pelo medo de que, sem um entendimento completo do sistema, alguma coisa poderia dar errado.  
Curiosidades: 

Em 1229, a cidade de Florença proclamou uma lei que proibia o uso dos numerais hindu-arábicos, pois eram fáceis de serem alterados ou forjados (por exemplo, transformar um 0 em um 6 ou 9 deveria ser bastante fácil). 

Até mesmo por volta de 1681 encontram-se evidências de que o novo sistema ainda não tinha sido completamente compreendido. Um livro publicado naquele ano teve seus capítulos numerados como: 1, 2, 3, 4, 5, 6, 7, 8, 9, X, X1, X2, X3, X4,, XXX, XXX1, 302, 303,…, XXXX, 401, 402,... 

Referências: 
[1] ZiavrasSotirios G. History of Computation. Department of Electrical and Computer Engineering, New Jersey Institute of Technology. New Jersey. U.S.A. 
[2] Cléuzio Fonseca Filho. História da Computação - O caminho do pensamento e da tecnologia. Porto Alegre. EDPUCRS. 2007. 
[3] SanjoyDasguptaChristo PapadimitriuUmesh Vazirani. Algoritmos. São Paulo. McGraw-Hill. 2009. 

Fonte das Imgens:
Números Romanos: https://br.pinterest.com/pin/548805904571604709/
Números Gregos: https://janusaureus.wordpress.com/2012/02/23/o-sistema-numerico-grego/
Osso de Ishango: https://noticias.uol.com.br/ciencia/ultimas-noticias/bbc/2017/06/12/a-necessidade-economica-que-levou-ao-desenvolvimento-da-1-forma-de-escrita.htm?cmpid=copiaecola

domingo, 22 de outubro de 2017

Computação 2 de X - Números

A evolução da computação sempre esteve intrinsecamente ligada à matemática. Antes da origem da ciência da computação, a computação nasceu dentro das universidades, nos departamentos de matemática, onde se destacaram algumas das maiores mentes, que estudaram os algoritmos e o que conhecemos hoje como problemas computáveis.

Por isso, neste conjunto de postagens, pretendemos passar por toda ou quase toda a história da computação como conhecemos hoje. Desde os primórdios da matemática até as grandes inovações atuais e o que elas trouxeram de novo para a computação.
Vamos começar no principio, no desenvolvimento dos números.

A descoberta dos números, segundo [1] e [2], foi um dos passos fundamentais na evolução do ser humano. Segundo [1], a sensação de quantidades é compartilhada por todos os animais, mas a descoberta da contagem é o que separa o ser humano primitivo dos outros animais, neste momento cria-se uma relação entre duas ou várias quantidades, onde um elemento de uma quantidade corresponde a um elemento de outra quantidade.


Essa descoberta iniciou principalmente com a criação de animais domésticos. Imagine-se como um criador de ovelhas, se você tiver somente a sensação de quantidades, quando alguns animais se perdem você nunca saberá quantos foram. Mas se você tiver um monte de pedras, cada uma representando uma ovelha, saberá quantas pedras estão sobrando com relação a quantidade de ovelhas que retornaram, haverá mais pedras do que ovelhas.

Segundo [1], anos após a descoberta da contagem houve a passagem da contagem de objetos, como pedras e ovelhas, para a representação abstrata de número. Uma quantidade de objetos agora poderia ser representada por números. Um monte de pedras agora contém quatro pedras, um rebanho de ovelhas agora contém quatro ovelhas, e o quatro é agora uma entidade livre de associação a um objeto específico, uma abstração.

A partir daí passou-se a representar os números de forma escrita, nas civilizações antigas, baseando-se na repetição de símbolos. E foi dado um passo o a criação da aritmética, fundamental para a computação e para a evolução científica humana.

Referências:
[1] Cléuzio Fonseca Filho. História da Computação - O caminho do pensamento e da tecnologia. Porto Alegre. EDPUCRS. 2007.

[2] Sanjoy, Dasgupta; Christo Papadimitriu; Umesh Vazirani. Algoritmos. São Paulo. McGraw-Hill. 2009.

Fonte das Imagens:
Contando Ovelhas: https://escolassempatria.blogspot.com.br/2013/06/como-surgiram-os-numeros.html

terça-feira, 5 de setembro de 2017

Computação 1 de X

Segundo o dicionário Michaelis a palavra computação vem da junção de computar+ação que significa a ação de computar; computo. Informalmente é o conjunto de operações matemáticas ou lógicas que se executam por meio de regras práticas previamente estabelecidas. Segundo o mesmo dicionário temos a partir de agora três definições que podem nos mover a pensar no que realmente é a computação:
  1. "Utilização de computador para resolução de qualquer problema ou aplicação de qualquer espécie”. Nesta definição temos a computação como algo que surgiu após a origem do computador, em meados do século 20 e o utilizarmos para resolução de problemas através e algoritmos.
  2. "Cálculo”. Nesta definição temos a computação com sua origem na matemática, quando a utilizamos para solucionar problemas através do trabalho com números.
  3. “Processamento de dados”. Aqui temos a computação como algo com um conjunto de entradas discretas que através de processos retorna uma saída discreta. O que pode nos trazer de volta a origem da matemática e sua utilização em diferentes formas, como a física, biologia, química entre outras áreas que trabalham como dados e através de algum mecanismo matemático retorna alguma informação.
Segundo o Google, a etimologia da palavra computação vem do Latin computatĭo, -ōnis que significa: “cálculo, computação, conta”, do radical de computātum, superlativo do verbo no latin computāre que significa “contar, calcular, computar”, proverbio informal do inglês computation'id.'

Como você pode perceber a definição de computação está muito ligada a origem dos computadores eletrônicos, mas a computação tem uma origem muito mais antiga. Esta série de postagens objetiva apresentar aos leitores um pouco da história da computação, abrangendo desde a origem da palavra computação, e suas origens matemáticas, até a sua história mais recente, da computação como ciência, linguagens de programação, a criação dos computadores eletrônicos, e o futuro da computação.

Referências:
Dicionário on-line Michaelis. http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-portugues&palavra=computa%E7%E3o. Acessado em 02/03/2016. Editora Melhoramentos Ltda.

sábado, 17 de junho de 2017

Otimização Combinatória

Otimização é o processo de buscar a melhor solução dentre um conjunto de soluções disponíveis para um problema.
Possui três elementos: as varáveis de decisão (parâmetros para solução do problema), função objetivo (função a ser maximizada e minimizada) e as restrições (define o espaço de soluções desejadas).
Em um sistema de produção as variáveis de decisão podem representar as quantidades produzidas de determinados objetivos; a função objetivo pode ser o interesse relacionado aos custos na produção,(maximizar os ganhos ou minimizar os custos); e as restrições podem ser as limitações operacionais do processo de produção, como quantidade de objetos a serem utilizados.
Otimização Combinatória tenta determinar valores a variáveis de decisão, de modo que uma função desenvolvida utilizando essas variáveis seja otimizada na presença de um conjunto de restrições e pesos associados as variáveis.
Um problema que pode ser modelado como um grafo, pode ser dito como um Problema de Otimização Combinatória.
Podem ser de cinco classes:
  • Problemas de conexão: Árvores, Caminho e Emparelhamento. Ex: Árvore Geradora Miníma, N-Rainhas, Caminho Mínimo, e Emparelhamento Bipartido, etc.
  • Problemas de Fluxo em Redes: Processo de otimização da distribuição de itens originados em um vértice e consumidos em outros vértices. Ex: Transporte, Alocação, Problema do Transbordo, etc.
  • Problema do Caixeiro Viajante: Encontrar o menor custo que se inicie e termine em um vértice passando pelos demais, sem repetição.
  • Problemas de Roteamento: Atender demandas localizadas nas arestas ou nos vértices de uma rede. Problema do Carteiro Chines, Roteamento de Veículos e Escala de Tripulação.
  • Problemas de Cobertura e Particionamento: É quando se procura o menor conjunto de vértices/arestas tal que toda(o) aresta/vértice do grafo incida em um(a) destes(as) vértices/arestas. Ex: Localização de Facilidades, Localização de Antenas e Radares.

Um conjunto de soluções viáveis, nesse tipo de problema, é muito grande, embora finito. Impossibilitando o uso de busca bruta, que testa todos os valores de soluções possíveis. Para algumas classes é possível utilizar métodos exatos de resolução, a Programação Matemática. Para outras há a necessidade de métodos não-exatos, tais como Heurísticas (Busca Gulosa, Busca em Profundidade, Algoritmo de Dijkstra, Algoritmo de Kruskal, etc) ou Metaheurísticas (Busca Tabu, Algoritmos Genéticos ou Colônia de Formigas).

Fonte: Pires, M. G. Abordagem Neuro-Genética para Mapeamento de Problemas de Conexão em Otimização Combinatória. Tese (Doutorado) - Escola de Engenharia de São Carlos, Universidade de São Paulo. 2009.

sexta-feira, 16 de junho de 2017

Sistemas Híbridos Inteligentes

Segundo Osorio e Vieira (1999) Sistemas Híbridos Inteligentes, de maneira geral, são sistemas que integram dois ou mais métodos diferentes para a solução de um problema.
Neste post não irei listar minuciosamente todos os sistemas híbridos existentes (quem sabe em postagens futuras possa abranger mais o assunto) mas sim apresentar uma visão mais geral sobre os tipos de Sistemas Híbridos Inteligentes mais comuns.
Os sistemas híbridos são úteis pois permitem que uma técnica complemente a outra, cobrindo as suas deficiências, obtendo um melhor desempenho.
Em se tratando de Machine Learning, usar sistemas híbridos pode também trazer a vantagem deste poder adquirir novas informações, fazendo com que esse sistema não tenha apenas uma visão limitada pelas suas restrições.
Os Sistemas Híbridos Inteligentes procuram de certa forma "imitar" o modo como os seres humanos solucionam um problema ao usar diferentes modos de raciocínio. Isso é realizado de formas diversas, uma delas é através da combinação das diferentes técnicas, buscando trocar informações e conhecimento entre seus módulos, o que dá a característica de evolução no tempo. Outra é através da utilização de representações de conhecimento através de regras difusas, probabilísticas, regras e predicados lógicos.
Temos assim um sistema mais robusto e que aceita algumas contradições e conflitos cognitivos entre seus módulos. Mas se for bem explorado pode trazer grandes vantagens.
Existem muitos tipos de Sistemas Híbridos Inteligentes Osorio e Vieira (1999) listaram alguns deles dando ênfase aos sistemas que utilizam os paradigmas de representação do conhecimento por meio simbólico, compreensível ao ser humano (Lógica, Redes semânticas, Frames, scripts), e métodos conexionista (Redes Neurais Artificiais).
São eles:
  • Sistemas Simbólico-Difusos: Integram lógica nebulosa (lógica fuzzy) e sistemas especialistas baseados em conhecimento e/ou regras.
  • Sistemas Simbólico-Genéticos: Normalmente compostos por algum método de computação evolutiva, responsável pela aquisição do conhecimento, e de um módulo simbólico, responsável pela implementação de mecanismos de inferência simbólica.
  • Sistemas Neuro-Genéticos: Utilizam, também, de computação evolutiva, na tentativa de contornar os problemas de escolha da arquitetura da rede neural.
  • Sistemas Neuro-CBR: Integração de uma rede neural e um sistema baseado em casos permitindo fazer generalização sobre um conjunto de exemplos de um problema.
  • Sistemas Neuro-Simbólicos: É considerado o método mais estudado. Combina a representação conexionista com a representação simbólica, esse tipo de Sistema Híbrido Inteligente pode ser subdividido em outras três categorias
    • Sistemas Neuro-Fuzzy: A lógica nebulosa e as redes conexionistas são combinadas.
    • Sistemas Neuro-IDT: Combinam a rede neural com árvores de decisão.
    • Sistemas Neuro-KBS: Combinam a rede neural com sistemas baseados em conhecimento.

Fonte: Osório, F. e Vieira, R. Sistemas Híbridos Inteligentes. XIX congresso da SBC. ENIA'99 - Encontro Nacional de Inteligência Artificial. 1999

terça-feira, 18 de agosto de 2015

Resenha de Livro [3] - Linguagens Formais e Autômatos

Neste post farei a resenha do Livro Linguagens Formais e Autômatos de Paulo Blauth Menezes. Da serie livros didáticos informática ufrgs. Vol. 3. Editora Bookman.
Para esta resenha foi utilizada a 6ª edição.



Essência do Livro


Neste livro o autor nos ensina os conceitos sobre linguagens formais e autômatos. O livro apresenta definições formais e matemáticas sobre as linguagens formais, os diversos tipos de autômatos e suas aplicações. É um livro feito para ser utilizado como fonte didática para alunos e professores de disciplinas que envolvam este assunto, É importante para o estudo de Compiladores, Teoria da Computação, Linguagens Formais e Autômatos, e Projetos de Algoritmos.

A Quem o Livro é Recomendado 

O livro é recomendado para pesquisadores, alunos e professores de disciplinas que utilizem este conteúdo. A recomendação é devido ao seu teor didático, com definições formais, exemplos fáceis e conteúdo objetivo. Sabemos que muitos estudantes da área de computação, atualmente, são impacientes e os professores não possuem muito tempo para revisar o conteúdo entre uma aula e outra.

Resumo do Livro

O livro se divide em 9 capítulos e mais um de leituras sugeridas.
O primeiro  capítulo, introdução, é dedicado a conceitos básicos introdutórios, como, a sintaxe e semântica, teoria dos conjuntos, funções lógica proposicional e provas e teoremas.
No segundo capítulo nos é apresentado conceitos úteis para o acompanhamento do livro, como alfabeto,  palavras, linguagem formal e gramáticas.
No terceiro capítulo, de linguagens regulares, é onde a brincadeira de verdade começa. Estudamos os sistemas de estados finitos, formas de composição, as diversas formas de autômatos, a expressão regular e gramática regular. capítulo importante para disciplinas que envolvem as linguagens formais ou autômatos.
No quarto capítulo são estudadas as propriedades das linguagens regulares. lema do bombeamento, investigação se a linguagem é regular, operações sobre linguagens, minimização.
No quinto capítulo investigamos os autômatos finitos com saída, máquina de Mealy e máquina de Moore, que são importantes para disciplina de compiladores. Hipertexto e hipermídia, animação com autômatos.
No sexto capítulo vemos as Linguagens Livres de Contexto. É importantes para construção de compiladores, vemos gramáticas Livres de Contexto, árvores de Derivação, gramática ambígua, simplificação, formas normais, que são importantes para a definição e implementação de linguagens de programação. Além disso vemos a recursão a esquerda e autômato de pilha, utilizada para o reconhecimento de programas construídos em alguma linguagens.
No sétimo capítulo vemos as propriedades de reconhecimento das linguagens livres de contexto. Estudamos  as suas propriedades e os algoritmos de reconhecimento.
No oitavo capítulo entramos em temas que são coincidentes com o estudo de Teoria da computação. Vemos a Máquina de Turing, modelos equivalentes a máquina de Turing, hipótese de Church, gramáticas irrestritas linguagem sensível ao contexto, gramática sensível ao contexto, máquina de Turing com fita limitada e as propriedades das linguagens enumeráveis.
No nono e último capítulo vemos a hierarquia das classes de linguagens e as conclusões. Neste capítulo vemos a hierarquia de Chomsky e as conclusões do autor.


O Que Torna Este Livro Diferente dos Outros

O que torna este livro diferente de outras referências relacionadas ao tema de linguagens formais e autômatos é a sua abordagem abrangente e o modo de apresentar o conteúdo. Utiliza uma linguagem bem simples, e apresenta exemplos e formalismos que são úteis no ensino de disciplinas com este tema.


Minha Opinião

A primeira impressão que temos com esse livro é que ele foi escrito para ser uma referência em sua área. Que realmente necessitava de livros didáticos. É um livro completo para aqueles que se interessam no estudo formal de linguagens, mesmo para um estudante iniciante de computação ou para ser utilizado como referencias por um professor de disciplinas relacionadas.


Pontos Positivos: Para estudantes e professores é um dos melhores livros para ser utilizado como referência de estudo. O conteúdo é de fácil compreensão. É realmente um livro didático.


Pontos Negativos: O conteúdo e o modo utilizado para explicar o seu conteúdo é especifico para profissionais da área. Curiosos terão dificuldades em compreender o conteúdo. Os exercícios poderiam ser de níveis mais variados e que aplicassem mais conceitos. A maioria dos exercícios de autômatos envolve a construção de autômatos, por exemplo.

terça-feira, 22 de outubro de 2013

Resenha de Livro [2] - Business Model Generation

Neste post farei uma resenha do livro Busines Model Generation. Nele espero passar as minhas impressões, além de um resumo do livro.


Essência do Livro

O livro nos apresenta o quadro de modelo de negócios. Voltado para o empreendedor com personalidade de inovação neste livro o autor intenciona nos ensinar a usar o modelo de negócios para criar inovação, além de mostrar empresas que são exemplos de inovação.

À Quem o Livro é Recomendado

O livro é voltado à pessoas espírito empreendedor. Capaz de pensar e criar novos negócios, até mesmo pessoas com sentimento inovador, que buscam encontrar novas maneiras de fazer negócios.

Resumo do Livro

O livro é dividido em seções. A primeira apresenta o QUADRO do Modelo de Negócios, e descreve detalhadamente os seus componentes: Segmento de clientes, define quais segmentos de clientes uma empresa irá servir. Proposta de Valor, qual o valor a sua organização está oferecendo para seus clientes; Canais, canais de comunicação com os quais as propostas de valor são levadas aos clientes; Relacionamento com Clientes; Fontes de Receita resultam da proposta de valor; Recursos Principais são os elementos ativos para oferecer e entregar a proposta de valor aos executar as Atividades Chave; Parceiros Principais, terceirização ou fornecedores de fora da empresa. Estrutura de Custo, os custos envolvidos na operação de um modelo de negócios.
Outra seção é a PADRÕES - nela é apresentado os padrões de modelos de negócios nos quais podemos nos basear no momento de construir o nosso modelo de negócio. São estes: Modelo de Negócios Desagregados, que fundamentalmente declara que há três tipos de negócios, Relacionamento com os Clientes, Negócios de Inovação de Produtos e Negócios de Infraestrutura, que podem coexistir, mas são desagregados em uma organização; Modelos de Calda Longa, se baseia em oferecer uma grande quantidade de produtos de diferentes nichos, cada um vendendo em pequenas quantidades, mas que no total se equiparam as vendas dedicadas aos produtos de sucesso.
A seguir vem o Padrão de Plataformas Multilaterais, que une grupos interdependentes de clientes, criam valor como intermediador entre estes. Modelo Grátis, neste modelo pelo menos um segmento de clientes é capaz de se beneficiar de uma oferta gratuita; Os Modelos Abertos criam e capturam valor colaborando com parceiros externos para agregar valor.
A seção DESIGN ensina técnicas para ajudar a criar o design do modelo de negócios. Nela são descritas técnicas, ferramentas do mundo do design que podem ajudar a projetar o modelo de negócios. Nesta seção você aprende técnicas para criação de modelo de negócios Baseado nos Clientes que deseja alcançar, Baseados nas Ideias de negócios inovadores, como o brainstorm. Modelos Visuais para apresentar seu modelo a clientes, parceiros ou para sua equipe de desenvolvimento. E Contando Histórias nos ensina como apresentar o modelo de negócios como uma história para que possa motivar, tornar tangível e as técnicas para isso. Também mostra como se guiar em um cenário para desenvolver o modelo de negócios.
Na seção ESTRATÉGIA ensina a reinterpretar as suas estratégias sobre a ótica de modelo de negócios, para que possa questionar os modelos de negócios estabelecidos e examinar o ambiente no qual seu modelo atua.
Na seção PROCESSO nos apresenta um processo genérico baseado nas técnicas e ferramentas apresentadas no livro.
Por fim o livro termina com m resumo do livro com os cinco tópicos apresentados.

O Que Torna Este Livro Diferente dos Outros

Este livro ensina como criar e utilizar o quadro de modelo de negócios. este quadro já é bastante conhecido no mundo do empreendedorismo e bastante utilizado. O Business Model Generation foi criado baseado na opinião conjunta de diversos empreendedores que contribuíram para o desenvolvimento do livro. O autor apresenta diversos exemplos atuais de empresas que utilizaram algum padrão de modelo de negócios para criar um negócio inovador e o inseriu no contexto do quadro. É um livro completo para criação de modelo de negócios.

Por Que Você Deveria Ler Este Livro

Você deveria ler este livro caso esteja pensando em criar um negócio, inovador ou não. Com o quadro de modelo de negócios aprendendo sobre os padrões estudados irá gerenciar melhor o seu negócio, seus clientes estarão em sua vista, assim como seus parceiros e custos. Utilize este quadro antes de começar o seu plano de negócios e poderá cria-lo mais claramente e sem perder o foco de seu negócio.

Minha Opinião

Um livro fácil de ler em suas primeiras seções. Interessante na forma como apresenta o quadro, os padrões e o design, não conseguia parar de ler. A partir da seção de estratégias a leitura se tornou um pouco maçante, mas compreensível, pois era mais sobre avaliar o modelo de negócios. Utilizarei este quadro em futuros negócios, assim como suas técnicas de design e estratégias em processos futuros.
Este livro aliado ao Manual do CEO pode esclarecer diversas dúvidas de como iniciar, gerenciar e planejar o seu negócio.