Criação de população inicial para resolução do problema de partição de número com Algoritmo Genético codificado em Ruby

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento, Tutoriais | Posted on 13-05-2011-05-2008

0



O problema de partição de números consiste em: dado um conjunto de N números, o objetivo é subdividi-lo em dois subconjuntos (chamados de partições) de tal forma que, a diferença entre os valores das somas dos números dessas duas partições seja a menor possível. Por exemplo, considere o seguinte conjunto com quatro números (23, 20, 56, 48). As partições (20,56) e (23,48) consistem no particionamento ótimo para este conjunto e, seu valor é 5. Apesar da simplicidade do enunciado, este é um problema de otimização combinatória que pertence à classe NP-difícil. Observe que, para um conjunto com N números têm-se 2N possíveis maneiras de subdividi-lo em duas partições.

 

Nosso problema consiste em dado uma seqüência [10,20,30,11,25,23,32,9,7,19,17,31,48,27,5,21,35,13,38,16,14,33,5] devemos criar um vetor de sinais (- ou +) para cada numero disposto, de modo a alcançarmos o menor valor (tendendo a 0) considerando o módulo do resultado das operações realizadas.

 

EX: para o vetor [10,20,30,11] geramos um vetor [1,1,0,0] considerei para esse exemplo que um representa + e 0 representa -, sendo assim nosso vetor seria [+,+,-,-]. O que geraria +10+20-30-11, resultando no valor 11, considerando seu módulo.

 

Entendido esse conceito vamos ao código.

 

Criaremos uma classe chamada Individuo com dois atributos @code e @value que recebem respectivamente o código binário (que representa os sinais) e o valor da função objetivo (ou em nosso caso o resultado da sentença) daquele individuo em questão.

 

Read the rest of this entry »

Google Android como um ambiente de desenvolvimento de aplicações para Sistemas de Decodificação de DTV (TV Digital) [Parte 2]

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento, Redes | Posted on 20-04-2011-05-2008

0

III System Overview

Consideramos nesse artigo a presença de um dispositivo real de decodificação de DTV(Plataforma de desenvolvimento Micronas IDTV) no dispositivo Android, que é responsável pela integração entre o SoC (system on chip) e os dispositivos periféricos. O SoC contém um processador dedicado para Linux de 240Mhz MIPS 24Kc, múltiplos processadores dedicados para decodificação de Áudio e Vídeo, unidade de processamento gráfico (GPU) , acelerador gráfico (GA), controlador USB e ainda Kernel Linux 2.6.21.7 com drivers competíveis (para todos os dispositivos no SoC), GNU gcc/glibc cross toolchain, biblioteca gráfica com suporte a DirectFB, etc.

IV Portando o Android

O processo necessário para portar o Android para uma plataforma big-endian (Arquitetura de ordenação numérica) pode ser dividida em três etapas. Primeiro a importância da utilização a Plataforma Micronas fornecido pelo Kernel do Linux versão 2.6.21.7 que é considerado velho comparando-se com os Kerneis atuais, mas que torna o processo de utilização pelos frameworks da plataforma de drivers do Kernel nessa versão mais fácil que em versões superiores e consequentemente os drivers do Kernel utilizados pelo Android precisam de um backport para o Kernel em questão. A segunda fase da portabilidade exige um processo de extensão do ambiente de desenvolvimento do Android para suportar a Plataforma big-endian MIPS; essas configurações de ambiente devem ser definidas no processo de compilação. A última fase da portabilidade da arquitetura de pilhas do Android consiste na integração de drivers de áudio e suporte ao DirectFB vídeo frame-buffer.

Read the rest of this entry »

Google Android como um ambiente de desenvolvimento de aplicações para Sistemas de Decodificação de DTV (TV Digital) [Parte 1]

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento, Redes | Posted on 18-04-2011-05-2008

0

Android TV

Google Android e TV Digital

Hoje em dia, DTV’s (TV Digitais) e set-top boxs[equipamento que se conecta a um televisor e a uma fonte externa de sinal] (ainda mais em dispositivos multimídia) são controlados por softwares proprietários (Aplicações e sistemas operacionais), geralmente escritos para apenas um tipo específico ou grupo de modelos semelhantes de dispositivos. A Reutilização de código entre diferentes modelos desses dispositivos é muito rara e o desenvolvimento acaba exigindo muito tempo e esforço no ciclo de desenvolvimento para cada plataforma.

A diferença entre os Hand-Helds e os dispositivos tecnológicos multimídia utilizados em casa está diminuindo gradativamente e seus respectivos hardwares (poder de processamento da CPU, RAM disponível, tamanho da memória flash e a presença de outros dispositivos como Redes, Wi-FI, Bluetooth, Aceleração de gráficos via Hardware, etc.) estão se tornando mais semelhantes. Ao longo do tempo o principal objetivo desses dispositivos não é alterado, embora características novas e mais avançadas sejam incorporadas constantemente(Gravação de Vídeo, Internet, TV, Internet e etc..)
Read the rest of this entry »

Object-Relational Mapping(ORM) – Mapeamento de Objeto-Relacional

Posted by Luiz Carvalho | Posted in Artigos | Posted on 13-04-2011-05-2008

0


Mapeamento de Objeto-Relacional (ORM) é uma abordagem que permite a construção de sistemas utilizando o paradigma orientado a objetos com a persistência destes objetos em bancos de dados relacionais. Utilizando-se de técnicas e estratégias específicas, é possível mapear classes com seus atributos e associações para o modelo relacional (SILVA et al.; 2006).
Segundo (AMBLER, 1999), “o mapeamento de classes pode ser feito mediante a paridade entre classe e tabela, ou seja, uma classe é mapeada para uma tabela”. Este mapeamento direto de classes para tabelas representa a forma mais simples de mapeamento, tornando mais fácil o entendimento e a manutenção de uma aplicação. A idéia deste mapeamento pode ser visualizada na Figura 1.

Figura 1: Mapeamento de Tabelas – Simples

Read the rest of this entry »

Geradores de Código

Posted by Luiz Carvalho | Posted in Artigos | Posted on 13-04-2011-05-2008

0

Geradores de código são basicamente programas que geram outros programas. Os geradores podem ser definidos como ferramentas tanto para formatar códigos simples quanto para gerar aplicações complexas a partir de modelos abstratos (templates). São muito utilizados para agilizar o processo de desenvolvimento, pois aumentam a produtividade e diminuem o tempo gasto na codificação da aplicação e, conseqüentemente, o custo final (AMBLER, 2004; KLUG, 2007).

Segundo Herrington (2003), a geração de código é a técnica pela qual se constrói código utilizando programas. Os geradores de código podem trabalhar por meio de linhas de comando ou de interfaces gráficas, estas últimas são as formas mais interativas. Estes podem construir código em várias linguagens de programação, bem como efetuar a geração dos códigos de uma única vez ou em etapas. As entradas e saídas são definidas conforme a necessidade, sendo que o desenvolvedor especifica parâmetros de saída de forma manual. Portanto, é de extrema relevância que o programador saiba a priori o que se deseja obter como resultado.

Read the rest of this entry »

Logo do HTML 5

Posted by Luiz Carvalho | Posted in Artigos | Posted on 18-01-2011-05-2008

0

http://www.w3.org/html/logo/downloads/HTML5_Logo_256.png

A logo oficial do HTML5 é muito bacana não é mesmo?

W3C anunciou hoje o logotipo HTML5, uma identidade visual marcante para a plataforma web aberta. W3C incentiva pioneiros a usar HTML5 e fornecer feedback para o W3C HTML Working Group, como parte do processo de normalização. Agora há um logotipo para aqueles que deseja dizer ao mundo que eles estão usando ou referindo-se a HTML5, CSS, SVG, WOFF, e outras tecnologias usadas para construir aplicações Web moderna . A home page logotipo inclui um construtor de crachá (que gera o código para exibir o logotipo), uma galeria de sites que utilizam o logotipo, links para a compra de uma camisas do HTML5, instruções para adquirir adesivos grátis, e muito mais. O logotipo está disponível em “Creative Commons 3.0″ para que possa ser adaptado por designers, para satisfazer as suas necessidades.

Fonte:  http://www.w3.org/News/2011#entry-8992

Desenho de Poligonos no Google Earth usando Ruby

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento, Projetos | Posted on 26-11-2010-05-2008

1

Considerando nosso último post, conseguimos definir os pontos de intersecções entre as linhas que compõem o contorno, mas e agora de posse dessas informações como vamos desenhar isso no mapa?

Essa técnica pode ser usada para desenhar em qualquer* linguagem ou componente do Google Earth, mas para melhor entendimento vamos pegar o desenho de polígonos utilizando Ruby.

Primeiro vamos entender sobre os arquivos de entrada e saída:

KML Estrutura XML composta pelas descrições de cada componente. Saiba mais (documentação).

KMZ é um arquivo comprimido (ZIP) contendo seu KML e possíveis imagens utilizadas. Saiba mais (documentação).

É extremamente recomendável que você leia a documentação sobre os dois arquivos.

Sabendo esse mínimo sobre os dois arquivos, vamos escolher o KML por ser mais simples de manipular e de demonstrar o funcionamento.

Não vamos explicar aqui todas as tags do KML para isso consulte a documentação, citaremos apenas as principais tags que compõe nosso exemplo.

Para melhor visualização nosso KML já foi dividido em métodos:

O método abaixo define o cabeçalho de nosso KML (XML) e dá inicio ao documento com a tag <Document> [Atenção o KML é case-sensitive]

Name: especifica o nome do grupo de componentes que vai ser criados para esse documento.
Read the rest of this entry »

Parte 1: Calculando coordenadas finais possuindo um ponto inicial, a distância e o Azimute ( ângulo)

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento, Projetos | Posted on 26-11-2010-05-2008

5

Contornos de Propagação para Radiodifusão plotados no Google Earth parte 1

.

Parte 1: Calculando coordenadas finais possuindo um ponto inicial, a distância e o Azimute ( ângulo)

Olá esporádicos leitores do RedRails, hoje vamos começar uma serie sobre cálculos de coordenadas, Google Earth e Ruby. Me foi proposto um problema, um engenheiro de telecomunicações tem um grande trabalho na hora de desenvolver seus projetos quanto ao desenho do alcance de uma antena de radiodifusão, pois deve traçar o raio de alcance dessa antena em todas as direções, ou seja, se ele for considerar os 360 graus do circulo e sendo que deve desenhar quatro contornos de alcance teríamos 1440 pontos, isso dá um trabalho considerável.

Logo abaixo temos uma amostra do resultado a ser atingido. Temos 3 traçados visíveis, pois o contorno 2 e o contorno protegido são equivalentes. A antena é simbolizada pelo triângulo no centro dos contornos, observem a irregularidade apresentada no lado direito da imagem. É exatamente esse o intuído dessa plotagem demonstrar visualmente o alcance e as possíveis adversidades que seu sinal pode encontrar em nosso exemplo uma cadeia de montanhas está obstruindo o sinal.

Read the rest of this entry »

Manipulando Grid (StringGrid) com Borland C++ Builder 6

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento | Posted on 08-11-2010-05-2008

2

Olá voltei um pouco (er… bastante) no tempo, pois precisei fazer um programinha bem simples e que não dava pra usar Ruby, minha primeira opção era usar Java, mas sinceramente aquela sintaxe me dá horrores, então resolvi usar o velho e bom C++ para ser mais exato Borland C++ Builder 6, pro que o 6, já que existem outros bem mais atuais? simples primeiro o tamanho da IDE que não chegava aos 200 MB enquanto a versão 7 tendia aos 1GB… Segundo é a nostalgia de programar novamente na primeira linguagem que me disponibilizava uma interface gráfica, antes dela desenvolvia apenas em C por linha de comando.

OK, vamos ao que interessa. Nesse nosso pequeno tutorial vamos desenvolver algo semelhante a isso, com funcionalidade apenas de inserir dois registros em um pequeno grid.

Read the rest of this entry »

Ruby: Utilizando Open-URI e HPricot para descobrir sorteios realizados no sorteie.me

Posted by Luiz Carvalho | Posted in Artigos, Desenvolvimento | Posted on 28-10-2010-05-2008

1

class VerificadorSorteieme
 require 'net/http'
 require 'uri'
 require 'rubygems'
 require 'hpricot'
 require 'pp'
 require 'string_pred'
 def initialize(url,de=10,ate=10)
 @url = url
 @de = de
 @ate = ate

 @resultado = {"atual"=>[],"anteriores"=>[],"proximos"=>[]}
 @URL_BASE = "http://sorteie.me/"
 end

#Com esse método podemos avançar e regredir em URL criadas pelo Sorteie.me e assim descobrir outros sorteios na sequência
#transparecendo assim outros ersultados que podem ser da mesma promoção.
#deve ser passado o final da URL (EX: para: http://sorteie.me/1j8W parametro: 1j8W)
#
 def request_sorteios #EX: 1j8W
 @resultado["atual"] = catcher_html(@url)
 #pros_url_for
 ant_url_for
 @resultado
 end

 def pros_url_for
 nurl = @url.clone
 @ate.times do
 @resultado["proximos"] << catcher_html(nurl.next!)
 end
 end

 def ant_url_for
 purl = @url.clone
 @de.times do
 @resultado["anteriores"] << catcher_html(purl.pred!)
 end
 end

 def catcher_html(url)
 complete_url = "#{@URL_BASE}#{url}"
 html = Net::HTTP.get(URI.parse(complete_url))
 doc = Hpricot(html)
 {:vencedor=>doc.search("//div[@id='box']/ol/li/a").inner_html,:mensagem=> doc.search("//p[@class='note']").inner_html,:url=>complete_url}
 end

end



Related Posts Plugin for WordPress, Blogger...