domingo, 31 de agosto de 2008

Ambiente de desenvolvimento GNOME

Eu instalei o Ubuntu 8.04 no meu notebook na semana passada e confesso que fiquei impressionado como o casamento deu certo. O único problema que estou tendo é colocar o som nos fones de ouvido, mas isto não vem ao caso.

Eu estava procurando uma IDE para voltar a desenvolver meus códigos em C/C++, quando os professores do mestrado deixarem, e encontrei o Anjuta.

Ainda não comecei a usar, mas pareceu bem interessante e simples de usar. Segue a tela inicial:

A primeira vista nem parece um ambiente de desenvolvimento, mas ao fazer a seleção Novo -> Projeto:


Observem que existem 4 abas: C, C++, Java e Python (providencialmente as 4 linguagens que eu tenho algum conhecimento).

Gostei das opções de criar uma aplicação GNOME, SDL e GTK (no caso da linguagem C). Espero poder, em breve também desenvolver aplicações OpenGL e OpenCV, se possível juntas.

Enfim, eu queria só apresentar o Anjuta. Eu já conhecia bem o KDevelop, para KDE, mas como estou agora no GNOME, é sempre bom abrir as opções.

quinta-feira, 28 de agosto de 2008

Math Transforms

First, I would like ask to readers that you comment the posts, because I need know your preference about the issues.

Now, talking about math transforms, I want to "open the reader's eyes".

The idea over any math transform is see the information of other form, for example: the Fourier Transform enables a frequency analysis if the signal is in time, ou temporal analysis if the signal is in frequency.

The transformations can be linears, non-linears, inversibles, non-inversibles, unambiguous, etc....

The transformation y = A x is a linear transformation, where x is the input information, A is the matrix of transformation and y is the output information.

The Discrete Fourier Transform (DFT) can be calculated by: dft(x) = A x, where each element of A is a complex exponencial exp(w n). If the matrix A is inversible, the transformation y = A x is inversible.

Some transformations are very non-linear as Hough Transform, used in image processing, where the output is a vector that represents the suport straight of the most significant axis on the image. In this case, the transformation is non-inversible because many images have similars principal axis.

Closing the post: math transforms are functions that mapping a set in other set.

terça-feira, 26 de agosto de 2008

Divulgação e convite

Este é o caminho e a verdade.




Vídeo retirado daqui.

Lenda dos engenheiros

O texto a seguir foi retirado daqui.

Conta a lenda que, quando Deus liberou para os homens o conhecimento
sobre ENGENHARIA determinou que aquele "saber" iria ficar restrito a um
grupo muito pequeno e selecionado.
Mas, neste pequeno grupo, onde todos se achavam "semi-deuses", já
havia aquele que iria trair as determinações divinas....

Aí aconteceu o pior !!!!!!........

Deus, bravo com a traição resolveu fazer valer alguns mandamentos:

> 1º Não terás vida pessoal, familiar ou sentimental.

> 2º Não verás teu filho crescer.

> 3º Não terás feriado, fins de semana ou qualquer outro tipo de folga.

> 4º Terás gastrite, se tiveres sorte. Se for como os demais terás
úlcera.

> 5º A pressa será teu único amigo e as suas refeições principais serão
os lanches, as pizzas e o china in box.

> 6º Teus cabelos ficarão brancos antes do tempo, isso se te sobrarem
cabelos.

> 7º Tua sanidade mental será posta em cheque antes que completes 5 anos
de trabalho.

> 8º Dormir será considerado período de folga, logo, não dormirás.

> 9º Trabalho será teu assunto preferido, talvez o único.

> 10º As pessoas serão divididas em 2 tipos: as que entendem de
engenharia e as que não entendem. E verás graça nisso.

> 11º A máquina de café será a tua melhor colega de trabalho, porém, a
cafeína não te farás mais efeito.

> 12º Happy Hours serão excelentes oportunidades de ter algum tipo de
contato com outras pessoas loucas como você.

> 13º Terás sonhos, com engenharia, e não raro, resolveras problemas de
trabalho neste período de sono.

> 14º Exibirás olheiras como troféu de guerra.

> 15º E, o pior........... Inexplicavelmente gostarás de tudo isso!!!


E o pior é que realmente muita coisa é verdade, @s engenheir@s que o digam.

segunda-feira, 25 de agosto de 2008

Free Games

Games, or any entertainment aplication, ever are questioned in Free Software, because when someone is talking about GNU/Linux and others free systems other one be the question: "I will can play the game {X}??". So is necessary to cite the incompatibilities between the systems (GNU/Linux and Window$, for example). Sometimes the emulators (as the wine) can resolves the problem, but the games are a big problem to use free software, for domestic users.

Currently exists many free games, or compatible with free enviroments, that are very interesting, for example:

  • Nexuiz;
  • Super Tux (similar to Super Mario of SNES);
  • America's Army;
  • Open Arena;
  • Tremolous;
  • Tux Racer;
  • Alien Arena;
  • The Open Racing Car Simulator;
  • Frets On Fire;
  • Scorched 3D;
  • Mania Drive;
  • FreeCraft;
  • Cube.

List with many games here.

I believe that money is the biggest complicating for free game developers. But I find some answers to this question:

Publicity - a company can pay to the developers and the game could have advertisements of that, for example a car company (Ferrari, GM, Toyota, etc...) paid for a racer game, and all cars will be of this company.
"Closed" games - the game is free, so the source-code just together the program, but is possible to develop specific hardware to game and to market hardware and software together, or only the hardware, could be possible, too, make a portal with tutorials, tips, upgrades, device drivers, multiplayers games, etc...
Games to mobile devices (or embedded systems) - charge a fee by acess the site, download a program, upgrade, any resource, etc... And yet, the users could be tools to develop levels, for example.

Make money with free games is possible, invent your way!

Other big problem of game market is the developer's (programmers, game designers, graphic artists, etc....) greed, because many developers want be rich with only one game and live of this game forever.

Is better to do some games and make few many in each game than to do one game and make US$ 1,000,000.00 from it.

Today, most players can't pay for expensive games, but they can pay some cents for "simple" games.

Ok, it's all! Come on, let's to develop free games!!

domingo, 24 de agosto de 2008

Fourier Transform

The Fourier Transform of x(t), a continuos signal, enables the analysis in frequency of this signal.

The signal x(t) represents a value in each time instant, the signal X(jw), Fourier Transform of x(t), represents a value for each frequency, for example:

x(t) = cos(2t), X(jw) = 0.5 to w = 2 and w = -2, in this case x(t) has only frequency in 2 and -2 radians/s.

The Fourier Transform is defined by:

We observe the operation and see that X(jw) is obtain from a superposition of exp(-jwt) over x(t), for each w.

The Fourier Transform is a linear and biunivocal transform, so the Inverse Fourier Transform is:


Using the Fourier Transform is possible do analysis of any signal, as thermical, physical, electrical, electromagnetic spectrum, etc.....

sexta-feira, 22 de agosto de 2008

Mudança de equipamento

Ontem eu fiz minha nova aquisição: um notebook.

Desta vez fiz a coisa menos errado que da vez passada, pois eu não contraí dívida além do necessário e encontrei um aparelho que irá ser adequado por um bom tempo.

O sistema operacional pré-instalado é uma distribuição Linux (Insigne) que pareceu interessante e parece o OpenSUSE.

A configuração dele também é além do que eu esperava (e ainda encaixou no meu orçamento): fabricado pela STi (o Ruindow$ à Vista é recomendado só por questões financeiras, lógico que sabem que o Linux é superior!), processador Intel core 2 duo, 2GB de RAM, 6 células de bateria, hd de 140GB, enfim... é muito bom!

Gostei dos aplicativos pré-instalados, principalmente o jogo FreeCraft.


Fechando:
Se eu tiver 1 comentário neste post, posso colocar um printscreen da tela.

quarta-feira, 20 de agosto de 2008

Usando internet 3G no Linux

Esta semana eu estava tentando instalar o modem 3G da Claro (Huawei E226) no Linux (Ubuntu, no Live CD) na casa da "patroa" segundo este artigo.

Tentei algumas vezes e nada de funcionar, então de repente funcionou! Então, quando descobri qual o problema, resolvi compartilhar a solução.

Primeiro, vamos conferir se o driver da usb está correto:

prompt:-> lsmod | grep usbserial

Nas versões mais novas de Linux, já está tudo certo.

Agora, copia-se o arquivo abaixo (wvdial.conf) no diretório /etc/


[Dialer Defaults]
Carrier Check = off
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Password = claro
Ask Password = 0
Check Def Route = 1
Phone = *99***1#
Idle Seconds = 0
Modem Type = Analog Modem
Stupid Mode = 1
Compuserve = 0
Baud = 460800
Auto DNS = off
Dial Command = ATDT
Modem = /dev/ttyUSB0
ISDN = 0
Username = claro

[Dialer claro3g]
Stupid Mode = on
Password = claro
Auto Reconnect = off
Username = claro
Phone = *99***1#

************Fim de arquivo***********

Agora copia-se o arquivo abaixo (resolv.conf.bkp) também no diretório /etc/


nameserver 200.255.121.39
nameserver 200.169.117.14

************Fim de arquivo***********

O primeiro arquivo configura o wvdial (discador) e o segundo serve para definir os endereços DNS a serem usados pelo modem (durante a conexão).

Agora deve-se dar o comando:

prompt:-> wvdial -C /etc/wvdial.conf

A saída deste comando deve ser:

WvDial<*1>: Initializing modem.
WvDial<*1>: Sending: ATZ
WvDial Modem<*1>: ATZ
WvDial Modem<*1>: OK
WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: OK
WvDial<*1>: Modem initialized.
WvDial<*1>: Sending: ATDT*99***1#
WvDial<*1>: Waiting for carrier.
WvDial Modem<*1>: ATDT*99***1#
WvDial Modem<*1>: CONNECT
WvDial<*1>: Carrier detected. Starting PPP immediately.
WvDial: Starting pppd at Fri Jan 25 22:26:07 2008
WvDial: Pid of pppd: 5714
WvDial<*1>: Using interface ppp0
WvDial<*1>: local IP address 10.124.107.15
WvDial<*1>: remote IP address 10.64.64.64
WvDial<*1>: primary DNS address 10.11.12.13
WvDial<*1>: secondary DNS address 10.11.12.14

************Fim da saída***********

Por fim, deve-se dar o comando:

prompt:-> cat /etc/resolv.conf.bkp > /etc/resolv.conf

E pronto está funcionando.

O problema que eu estava tendo era que cada vez que se faz a chamada do wvdial, o arquivo /etc/resolv.conf volta ao que era antes, assim desconfigurando os endereços DNS.

Deve atentar para dar o comando cat /etc/resolv.conf.bkp > /etc/resolv.conf apenas quando o wvdial terminar de exibir a saída (com a apresentação do 2o endereço DNS).

Eu fiz um script shell para automatizar o processo (admitindo que os arquivos wvdial.conf e resolv.conf.bkp estão no diretório /etc/):


# arquivo Internet3G.sh

# abre o wvdial
wvdial -C /etc/wvdial.conf

# espera um tempo para o wvdial terminar o setup
sleep 30

# configura o arquivo que contém os endereços DNS
cat /etc/resolv.conf.bkp > /etc/resolv.conf

************Fim de arquivo***********

Obs.: Agora é só descobrir como desativar o modem.

segunda-feira, 18 de agosto de 2008

New Resource in the MultiSign

To the distracteds readers, I put many new resources in the MultiSign, some are only "flowers" but others are too interesting, for example the blog's access identifier.

Today I see the map, and it's here:



This resource counts the access (97 access since August, 13 2008) and locates the places that makes the access. In the map we see access from all Brazil's states, USA, Central America (maybe El Salvador), Europe (coutries about Spain, England and Germany), Swaziland (near to South Africa) and India.

The small points are places with less than 10 access and the bigger points are places with less than 100 access.

I would like to continue given the expectations and ask that to comment the post's.

Novo recurso no MultiSign

Para os mais desatentos, coloquei uns recursos novos no MultiSign, alguns são apenas "perfumaria" mas tem coisas bem interessantes, como o identificador de acessos ao blog.

Hoje eu vi que o mapa estava assim:



Além de fazer a contagem dos acessos (97 acessos desde 13/08/2008) este recurso ainda identifica a origem dos acessos. No mapa é fácil identificar que praticamente todo o Brasil está acessando o MultiSign além de países na Europa (Inglaterra, Portugal, Espanha, Alemanha e Suíça), Suazilândia (próximo a África do Sul), Índia, Estados Unidos e América Central (parece ser El Salvador).

Os pontos pequenos indicam locais com até 10 acessos e os pontos maiores indicam locais com até 100 acessos.

Espero continuar tendo esta "aceitação" e reforço o pedido: votem na(s) enquete(s) e comentem os post's.

quinta-feira, 14 de agosto de 2008

Computational Vision in Scilab

In this post I will share knowledge about Scilab and SIVP (Scilab Image and Video Processing toolbox).

To Ubuntu (and similars) users the Scilab can be downloaded and installed by package manager (synapic, apt-get, adept, ......), you just to download all files. The SIVP can be downloaded from here.

To install the SIVP is very simple, only do this steps as root:

  1. Unpack the file;
  2. In shell: cd {SIVP's directory}
  3. In shell: ./configure
  4. In shell: make
  5. In shell: make install
After this proceeding, the Scilab is all set to use computational vision resources: webcam's access, files (images and videos) readers, image display, ......

The SIVP uses the OpenCV API, and it can be downloaded and installed by package manager.

Before of start the Scilab, test your webcam with the Camorama (it can be downloaded and installed by package manager too).

This is the initial Scilab's screen:


The toolboxes button is detached.

To load the SIVP is only select it in toolboxes button.

This code is a example to use the webcam and display the images.

// Display images from webcam

Cam = camopen(); // open the webcam
nFrames = 1000; // set number of frames

for n = 1:nFrames, // main loop
im = avireadframe(Cam); // read the frame from webcam and hold the image in 'im' as a matrix of vectors RGB

imshow(im); // display image
end; // finish of the main loop

This example is the first step to complex computational vision algorithms.

quarta-feira, 13 de agosto de 2008

Aplicações 3D

Aplicações que envolvem 3D (em visualização, interfaces, processamento, etc....) necessitam de algumas características importantes.

Para uma determinada aplicação, por exemplo um jogo ou simulador (para automáveis, aviões ou construções), é necessário atentar para as características dos sistemas. Quanto mais fiel se desejar que o sistema seja, mais pesado computacionalmente o sistema será.

Para um simulador de automóveis é necessário fazer considerações sobre aerodinâmica, resistência dos materiais (pneus e lataria), consumo de combustível, os atritos envolvidos (do sistema com o ambiente e internos ao sistema), os aquecimentos que irão aparecer em decorrência dos atritos envolvidos e muitas outras coisas que caberia a um engenheiro mecânico especificar.

Para desenvolver uma aplicação 3D, para um jogo por exemplo, antes de qualquer coisa são levantadas as características do modelo desejado, tais como dimensões, articulações, texturas da superfície, etc.... Em seguida o modelo pode ser feito em uma maquete ou similar. A partir da maquete, um artista gráfico usa um software específico para fazer a modelagem computacional, como o Blender.

Com o modelo pronto, este é salvo em um formato de arquivo específico, o qual contém informações sobre os vértices do objeto, as ligações entre os vértices, as articulações e outras coisas mais. O programador irá então desenvolver a aplicação em cima deste modelo para animá-lo ou controlá-lo, assim surgem os personagens dos jogos, modelos de prédios, carros, aviões, navios, etc......

Entretanto, existem API's que ajudam o trabalho dos desenvolvedores de aplicações 3D. É o caso da OpenGL, que tem interfaces nativas com C/C++ e Python e, novamente, OpenGL é uma API livre (se não fosse, eu não estaria falando dela aqui). Algumas funções estão prontas para serem usadas com OpenGL, como interfaces com a placa de vídeo, mouse, teclado, renderização, etc.... Isto permite a economia de muito tempo de implementação.

Para fechar o post, segue um vídeo que encontrei no YouTube sobre modelagem 3D.

terça-feira, 12 de agosto de 2008

Jogos olímpicos

Esta semana eu encontrei este recurso no orkut.

Trata-se de um plug-in para a cobertura dos jogos olímpicos feita pelo portal Terra, como se fosse um YouTube só dos jogos olímpicos com os vídeos feitos para o Terra.

Eu não havia postado no dia em que encontrei o aplicativo pois queria testar antes, confesso que fiquei satisfeito com o que estou vendo, tem até curiosidades tipo micos de atletas, passeios dos repórteres em Pequim, cobertura de outras coisas que estão acontecendo paralelamente as Olimpíadas.

Agora podemos assistir aos jogos na hora em que estivermos disponíveis (virar a noite acordado não é uma opção no meu caso) e gratuitamente, pois o recurso não tem nenhuma cobrança ao usuário (se tivesse eu não estaria postando aqui).

É bom ver que existe este tipo de recurso para quem não pode assistir aos jogos pela TV mas aprecia ver as competições, apesar da qualidade não ser das melhores, mas é "assistível" e tem a opção de deixar a tela em Full Screen.

Para fechar o post, segue o meu link no orkut para quem desejar ver o aplicativo aqui.

sábado, 9 de agosto de 2008

PDA's com Linux

Ontem eu estava pesquisando sobre PDA's, em particular smartphones, com Linux e encontrei este site.

Vi que os smartphones com Linux existem a muito tempo (pelo menos, desde 2000) porém aqui no Brasil o único exemplar facilmente encontrável é o Motorola A1200i, que é um aparelho muito interessante, mas o que me deixa desapontado é que não existe outra opção direta.

Em leituras que sempre estou fazendo vejo notícias do tipo: "até 2010 80% dos celulares rodarão Linux ou sistemas baseados em Linux", "atualmente celulares e smartphones com Linux são os que mais crescem em vendas", "Empresas lançam celulares e smartphones com Linux". E então eu pergundo: "onde estão estes aparelhos?".

Algumas destas notícias estão aqui, aqui, aqui e aqui.

Certo que existem notícias do tipo "Empresa lança seu primeiro celular com Linux", mas existem muitas pessoas, aqui no Brasil mesmo, que têm preferência por aparelhos com Linux.

Agora a minha explicação para este fenômeno é a seguinte:

Vamos tomar o exemplo de uma empresa que tenha modelo com Linux, ou outros sistemas open source, e outros com outro sistema (Ruindows Mobile ou Palm O$). Em países de "1º mundo", vemos todos os modelos, enquanto que em países como o Brasil existem apenas os aparelhos com sistemas proprietários.

O que acontece é o seguinte: nos países de "1º mundo" o cliente tem todas as opções, mas aqui nós só temos a opção com sistema proprietário, que é caro, ruim, trava, vai precisar de assistência técnica especializada (cara diga-se de passagem) e tantas outras coisas que não citarei agora.

Aqui nós pagamos o aparelho e o sistema, sendo que o sistema comprado vale muito menos do que é livre (portanto gratuito, em termos). Depois de comprarmos o equipamento (pagando pelo hardware e software) pagamos cada visita a assistência técnica e sempre ficaremos pagando pelas atualizações. Este ciclo é quebrado quando trocamos de aparelho, então ele passa a se repetir com o aparelho novo caso o cliente não tenha aprendido e compre outro aparelho com um sistema proprietário.

Para finalizar, eu recomendo que não se compre dispositivos móveis com sistemas tipo Ruindow$ Mobile 6.x e com este boicote tentemos trazer os aparelhos com Linux e similares aos países "sub-desenvolvidos".

sexta-feira, 8 de agosto de 2008

Jogos livres

Jogos, ou aplicações de entretenimento de uma forma geral, sempre são um obstáculo na divulgação do Software Livre, pois quando alguém começa a falar de gnu/linux e correlatos aparece outro alguém e pergunta: "posso jogar {jogo 'X'} no linux?". Neste ponto surgem as diversas incompatibilidades entre os sistemas, as vezes contornáveis por emuladores (tipo o wine), mas normalmente a questão dos jogos é um grande problema.

Atualmente existem muitos jogos livres, ou ao menos compatíveis com plataformas livres, que são até bem interessantes, dentre os quais posso citar:
  • Nexuiz;
  • Super Tux (similar ao Super Mario do SNES);
  • America's Army;
  • Open Arena;
  • Tremolous;
  • Tux Racer;
  • Alien Arena;
  • The Open Racing Car Simulator;
  • Frets On Fire;
  • Scorched 3D;
  • Mania Drive.
Lista com vários jogos e descrições aqui.

Acredito que o ponto que mais impede a proliferação de jogos livres é a dúvida: "como irei ganhar dinheiro?" e para esta pergunta, tomei conhecimento de algumas entidades têm criado soluções interessantes.

Publicidade - desenvolver jogos para empresas de modo a fazer propaganda da patrocinadora (tipo fazer um jogo de corrida em que todos os carros são de uma determinada marca);
Jogos de "caixinha" - como o jogo é livre, este deve ser acompanhado do código-fonte, porém pode-se desenvolver hardware específico para o seu jogo e fazer a comercialização do sistema completo, podendo até deixar o software disponível na internet com atualizações, dicas, tutoriais, device drivers para o hardware, etc.....;
Jogos para dispositivos móveis - taxar o usuário pelo download do jogo, o qual será feito pelo dispositivo móvel, sendo o jogo livre então o usuário poderia dispor de ferramentas para edição do jogo (tipo cenários, personagens, etc....).

Outras formas também podem ser pensadas, o povo brasileiro tem criatividade para criar formas de ganhar dinheiro com essas idéias.

Um grande problema para o comércio dos jogos livres é a ganância por parte dos desenvolvedores (programadores, game designers, artistas gráficos, sonoplastas, etc......), pois muitas vezes quem começa a desenvolver um jogo imagina ficar rico e passar a viver deste jogo que desenvolveu e de futuras atualizações.

Acredito ser melhor desenvolver vários jogos simples e ganhar um pouco em cada um que desenvolver um super-jogo e tentar ganhar uma fortuna em cima dele, a população que tem condições de pagar por jogos de grande porte deseja jogos de grande porte (realmente), com muitos jogadores on-line e muitos recursos.

Lembrando que a grande massa que está adentrando ao mundo da informática não tem poder aquisitivo, assim pode ser mais interessante tirar apenas algumas moedas destas pessoas, de modo que não fará falta em seus bolsos (nem na mesa de suas casas).

Espero ter passado a idéia.

quarta-feira, 6 de agosto de 2008

Scilab simulation enviroment

This is my first post in english. I like the Scilab, so it's the subject of this post.

The Scilab is a simulation enviroment to numeric computation, i. e., the Scilab have many resources to solve complicated problems.

Examples of aplications that I work in Scilab:
  1. Neural networks;
  2. Genetics Algorithms;
  3. Analysis os temporal series (in economy);
  4. Digital images and signals processing;
  5. Computational vision;
  6. Electromagnetism.
The most important work that I developed was a new algorithm to detect and localize critical points in digital images, I have used details enhacement in this work and the classical technics uses boundary analysis.

The Scilab has many toolboxes, for example: SIVP - Scilab Image and Video Processing toolbox and SWT - Scilab Wavelets Toolbox (this have functions for signals and images). The Scicos is a graphical simulation enviroment, this is on the Scilab (called by "scicos" in prompt), with the Scicos is possible to develop "getting blocks", this is a easy and fast mode to work.

To finish, the Scilab is a free software and doesn't have less resources than proprietary softwares.

Novidades

Eu passei num curso de inglês aqui em Fortaleza, então achei que seria interessante treinar algo do inglês aqui no MultiSign.

Os post's em inglês serão traduções de post's anteriores.

Espero que esta nova filosofia (de traduzir os post's antigos) possa mostrar à mais pessoas no mundo que aqui no Brasil (em particular no nordeste brasileiro) existe pesquisa e desenvolvimento de tecnologias avançadas.

Como já aconteceu, espero que outras pessoas entrem em contato, agora abrindo possibilidade de pessoas de outros países conhecerem os trabalhos desenvolvidos aqui.

Por fim, espero agora ter mais leitores e, quem sabe, leitores que colaborem votando nas enquetes e comentando os post's.

terça-feira, 5 de agosto de 2008

Algoritmos Genéticos - Dicas de implementação

Para falar um pouco mais de algoritmos genéticos, agora citarei algumas dicas para a implementação.

  1. Criar uma grande população inicial de indivíduos;
  2. Descartar indivíduos pouco "adaptados", em alguns casos cada nova geração substitui a anterior;
  3. Buscar soluções na forma de vetores de números binários, isto facilita muito a manipulação dos "genes";
  4. Fazer com que os indivíduos "cruzem" da forma mais aleatória possível, para que o algoritmo apresente sempre bastante variabilidade;
  5. Quando o algoritmo encontra um "mínimo local", que representa uma condição da qual o algoritmo chega e não consegue sair, porém sabe-se que é possível chegar a um resultado melhor, usa-se o recurso da mutação que consiste em alterar aleatoriamente alguns genes dos indivíduos (todos ou alguns).
Como citei no post anterior, Algoritmos Genéticos são baseados na Teoria da Evolução, então é interessante que o desenvolvedor realmente imagine o problema com esta visão, que existem os indivíduos que resolvem o problema e estes indivíduos se reproduzem gerando novos indivíduos que podem resolver melhor ou não o problema, se nenhum dos indivíduos estiver adaptado ao problema ocorrem mutações para que eles possam ficar mais capazes de "perseverar".

Para fechar, o vídeo a seguir foi um trabalho que desenvolvi na disciplina de ICA (Inteligência Computacional Aplicada) usando algoritmos genéticos.



Adianto que o vídeo é curto, porém interessante.

segunda-feira, 4 de agosto de 2008

Feed-back

Gostaria de agradecer aos leitores que têm visitado o MultiSign regularmente, as vezes quando faço pesquisas no Gooooooogle vejo o MultiSign nas primeiras páginas para vários assuntos o que confirma que o blog é bem frequentado.

Gostaria de agradecer aos que já votaram na enquete "O que você busca (ou gosta de ver) no MultiSign?" e refazer o pedido de votarem na enquete e comentarem os post's para assim direcionar os post's ao público.

Por fim, gostaria de informar que a enquete aceita várias escolhas simultaneamente e também aceita mudança de escolhas.

Fico grato pela atenção e vamos colaborar que o meu desejo é fortalecer o conhecimento dos leitores.

Algoritmos Genéticos

Para começar o período letivo 2008.2, o 1º post será sobre o assunto que deve ser também o primeiro da disciplina de ICA: Algoritmos Genéticos.

O princípio dos algoritmos genéticos (ag's) é baseado na Teoria da Evolução (biologia).

A idéia é a seguinte: primeiro deve-se analisar qual o problema e desenvolver uma solução representada por um vetor de numéros, preferencialmente binários. Depois disto, criam-se várias soluções (vetores de números binários) aleatoriamente (o conjunto de soluções denomina-se população e cada solução é denominada indivíduo), cada um destes indivíduos é então testado e atribui-se um grau de "adaptabilidade", que corresponde a quanto esta solução (indivíduo) satisfaz o problema. A partir da adaptabilidade, o indivíduo terá uma probabilidade de "cruzar" com outro indivíduo, quanto maior a adaptabilidade maior a probabilidade do indivíduo "cruzar".
O cruzamento entre indivíduos ocorre da seguinte forma: como cada indivíduo corresponde a um vetor (de números binários), toma-se um ponto aleatório neste vetor e faz-se um crossing-over, em que serão gerados 2 novos indivíduos sendo um com o começo dos "genes" de um indivíduo anterior e o final dos "genes" do outro indivíduo.

Para ilustra o problema, tomemos o seguinte problema:
Tem-se uma sala que tem N lâmpadas e deseja-se determinar quais devem ficar acesas para melhor iluminar o ambiente com o menor gasto de energia (ag's são muito usados em problemas de otimização, como este).

{Fazendo N = 10}

Cada solução corresponde a um vetor de 10 posições: s = [l0 l1 l2 l3 l4 l5 l6 l7 l8 l9] em que cada posição representa o status de uma lâmpada (0 -> apagada e 1 -> acesa).

Cria-se agora uma população de soluções, por exemplo:
s1 = [0 1 1 0 0 0 1 1 1 1]
s2 = [0 1 0 0 1 1 0 1 1 0]
s3 = [1 1 0 1 1 0 0 0 1 0]
s4 = [0 0 0 0 1 1 1 1 1 0]

Para cada solução, avalia-se quão bem o ambiente é iluminado e quanto de energia é gasto de modo a determinar a adaptabilidade de cada indivíduo. Suponto que chegue em:

adapt(s1) = 30%
adapt(s2) = 60%
adapt(s3) = 70%
adapt(s4) = 10%

Então cada indivíduo terá a probabilidade de "cruzar".

Fazendo o cruzamento dos indivíduos s1 e s3:
s1= [0 1 1 0 0 0 1 1 1 1] e s3 = [1 1 0 1 1 0 0 0 1 0]

Determina-se um ponto aleatoriamente para ocorrer o crossing-over, por exemplo 6.
s1' = [s1[0] s1[1] s1[2] s1[3] s1[4] s1[5] s3[6] s3[7] s3[8] s3[9]]
s1' = [0 1 1 0 0 0 0 0 1 0]
s2' = [s3[0] s3[1] s3[2] s3[3] s3[4] s3[5] s1[6] s1[7] s1[8] s1[9]]
s2' = [1 1 0 1 1 0 1 1 1 1]

São calculadas as adaptabilidades dos novos indivíduos e o processo é repetido até encontrar-se um indivíduo que satisfaça uma "adaptabilidade mínima".

A forma abordada é a mais simples, porém o algoritmo pode ficar complexo se forem definidos vários pontos de crossing-over, se o problema não tiver solução de natureza binária, se forem inseridas técnicas de mutação caso o algoritmo não esteja fornecendo bons resultados, enfim: pode-se complicar do jeito que quiser.

sexta-feira, 1 de agosto de 2008

Retorno

Depois de 1 mês, é hora de voltar as aulas e demais atividades acadêmicas.

Um ponto positivo é que irei, provavelmente, aumentar a frequência e a qualidade dos post's.

Descobri que o MultiSign tem sido bem visitado, até por pessoas de fora do Brasil (em Portugal). Só não entendo por quê tenho dezenas de visitas diárias e ninguém vota na enquete ou comenta os post's (sem querer desagradar ninguém).

Acredito que meu blog não é dos melhores, mas procuro sempre mantê-lo atualizado (fazendo algumas postagens semanais) e com assuntos que considero interessantes.

Enfim, não pretendo desabafar nada aqui, apenas peço que os leitores votem nas enquetes e comentem os post's para enriquecer o conteúdo do blog.