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 »

Posts Relacionados

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 »

Posts Relacionados

PromoCast – Gestão de Promoções para Rádios

Posted by Luiz Carvalho | Posted in Desenvolvimento | Posted on 16-02-2011-05-2008

0

O PromoCast aqui apresentado é uma versão Lite de um projeto de um sistema bem mais complexo que estou desenvolvendo para empresa onde trabalho. Podendo ser útil para alguem estou compartilhando com vocês esse pequeno projetinho. Ele está hospedado no Github onde todos podem ter acesso pelo link abaixo.

Projeto LuizCarvalho/PromoCast

Dúvidas e Sugestões podem ficar a vontade para comentar nesse post, ficarei feliz em responder.

Screenshots

Posts Relacionados

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



Posts Relacionados

Prawn::Errors::CannotFit (Resolvido)

Posted by Luiz Carvalho | Posted in Desenvolvimento | Posted on 07-10-2010-05-2008

2

Estou começando a desenvolver um módulo de relatórios em meu projeto Rails para impressão de memorando e o principal problema que encontrava é a quebra de linha automática nas tabelas ou grids, usava o RGhost do Shairon, mas infelizmente isso não era possível.

Li algo sobre o Prawn e achei interessante, peguei um exemplo e bingo, ele fazia essa quebra de linha automática, então comecei a fazer outros testes como tamanho da string que cada célula suportaria, achei o que procurava mais problema rsrsr, não entendia o porquê , mas a partir de um certo número de caracteres ela lançado uma exceção que gerava esse erro (Prawn::Errors::CannotFit) descobrir que o problema era na coluna que era achatada e o Prawn não entendia até onde ele poderia renderizar o texto, algo do gênero isso me ajudou a encontrar uma solução “dizer” ao Prawn até onde ele deveria ir, ou seja fixar uma largura para as minhas colunas.

Simples assim:

pdf.table( itens_memo,
:headers =>["Item", "Quant","Compra","Serviço"],
:font_size          =>10,
:vertical_padding   =>2,
:horizontal_padding => 5,
:column_widths =>{ 0 => 40, 1 =>40, 2 => 230, 3 =>230},
:border_style=>:grid
)

Posts Relacionados

Monografia: GEtna – Gerador Ruby On Rails a Partir de banco de Dados

Posted by Luiz Carvalho | Posted in Dicas, Projetos | Posted on 18-09-2009-05-2008

2

Bom galera já estava em tempo de compatilhar minha monografia, de tempos em tempos a galera pedia para enviar, então nada mais justo (e fácil) que por ela aqui no blog.


UNIVERSIDADE FEDERAL DO TOCANTINS
CAMPUS UNIVERSITÁRIO DE PALMAS
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

GETNA: GERADOR DE CÓDIGO RUBY ON RAILS
A PARTIR DE BANCO DE DADOS

Palmas
2008
LUIZ ARÃO ARAÚJO CARVALHO

Resumo
Na literatura, existem vários geradores de código disponíveis que tem como
principal propósito automatizar o processo de desenvolvimento de aplicações em
diversas linguagens de programação. Este trabalho apresenta o desenvolvimento
de um gerador de código, denominado GEtna, com a função de criar as classes a
partir de um determinado banco de dados. Vale a pena ressaltar que o gerador
GEtna difere dos existentes pelas suas funcionalidades disponibilizadas.
O gerador proposto aumenta a velocidade do processo de desenvolvimento
de uma aplicação Rails, pois recebe como entrada tabelas de um banco de dados
relacional (MySQL, PostgreSQL ou SQLite) e fornece como saída toda a estrutura
de arquivos (classes). Vale a pena ressaltar que o GEtna proporciona uma
padronização das classes geradas e, conseqüentemente, sustenta sua legibilidade,
que é um fator muito importante quando se trabalha com equipes de
desenvolvedores. Assim, neste trabalho será apresentada uma descrição sobre
geradores de código, padrões de projeto, métodos de mapeamento e definições de
dados que são fundamentais para o desenvolvimento de um gerador de código.

Palavras-chave: Banco de Dados Relacional, Desenvolvimento de Sistema,
Gerador de Código, Rails.

ABSTRACT

In literature, there are several available code generators that have the main
goal to automatize the application development process for some programming
languages. This work presents the development of a code generator, named GEtna,
that creates classes from a specific database. It’s important to note that GEtna
generator differs of other generators by your available functionalities.
The proposed generator increases the velocity of a Rails application
development process because it receives as input relational database tables
(MySQL, PostgreSQL or SQLite), and provides as output the complete file structure
(class). The GEtna provides a padronization of generated classes and,
consequently, maintains the legibility that is a very important factor when there are
developers’ groups. So, in this work a description about code generators, design
patterns, mapping methods and data definition is presented because they are
essential for a code generator development.

Keywords: Relational Database, System Development, Code Generator, Rails.


Não, não eu não vou Copiar a Monografia toda aqui não, em baixo eu exportei em diversos formatos para que seja aberto não importa a situação. Coloquei também o Original podendo ser usado como Modelo para você redigir sua monografia no padrão usado pela UFT.  Só lembrando consegui um 10 com essa monografia então cuidem muito bem dela.

Original(DocX)

Pdf

Txt

Html

Doc

Posts Relacionados

Problemas ao instalar o ruby-debug-ide para o Netbeans

Posted by Luiz Carvalho | Posted in Artigos, Dicas, Linux | Posted on 06-07-2009-05-2008

0

A alguns meses atrás tive problema em instalar o ruby-debug, resolvido apenas instalando o build-essencial e o ruby1.8-dev. Melhor esplicado no outro post

Outro problema comum é na instalação do ruby-debug-ide também facilmente resolvível basta instalar a versão certa da gem, ou seja, a versão 0.3.x(0/1/2/3/4) que é a versão aceita no Netbeans 6.X até onde eu testei.

Quando tentei instalar a gem pela linha de comando

sudo gem install ruby-debug-ide -v=0.3.4

por exemplo, a gem não é encontrada então o negocio é baixar no braço e instalar.

Você pode instalar do repositório ou diretamente no nosso site a versão usual mais recente (Clicando aqui).

E executando

sudo gem install ruby-debug-ide-0.3.4.gem

Posts Relacionados

Pacote de Posts sobre Programação 1

Posted by Luiz Carvalho | Posted in Artigos | Posted on 03-06-2009-05-2008

0

Na falta de tempo para fazer um post, mesmo tendo dezenas de ideias vo fazer uma restrospectiva rápida de alguns posts que eu mais gostei de fazer! =)

Ainda tenho muitas ideias a por em prática. mas vamos por partes

abraço!

Posts Relacionados

Utilizando JQuery no Rails com JRails

Posted by Luiz Carvalho | Posted in Tutoriais | Posted on 12-05-2009-05-2008

0

Bom, faz tempo que eu não coloco um Tutorial aqui e como vou passar ou já pessei esse conteúdo no mini-curso de Rails. aproveitei e vou postar aqui também.

1. Instalação

Console

./script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails

No NetBeans

Clique com o direito em seu projeto e vá em PLUG-INS RAILS, irá aparecer uma janela onde você clicará em REPOSITÓRIOS e no botão ADICIONAR URL. então você introduz a url do repositório:

http://ennerchi.googlecode.com/svn/trunk/plugins/

01 -Install_Jquery

Agora vá para a aba NOVOS PLUGINS encontre o JRAILS, o selecione e aperte no botão INSTALAR.

02 -Install_Jquery1

Após instalado feche a janela. uma pasta chamada jrails será criada na pasta Fornecedor(Vendor)/plugins

03 -Install_Jquery03

2. Configuração

Vamos então chamar os respectivos Js’s para nossa aplicação, para isso basta apenas inclur a seguinte tag(se ela já não existir) entre as TAGS<head> do seu APPLICATION.HTML.ERB.

<%= javascript_include_tag :defaults  %>
04 -Install_Jquery03

Vamos ver se tudo ocorreu corretamente. inicie a aplicação e observe o conteúdo da TAG<head>, se os arquivos jquery.js, jquery-ui.js, jrails.js foram carregados tudo está OK!

04 -Install_Jquery04

Então pode-se deletar os arquivos do prototipe =D

05 -Install_Jquery03

3. Utilização

Vamos fazer um coisinha simples, apenas pra testar nosso plugin. vamos criar um link para lugar nenhum que ao ser clicado ele mostrar os campos do formulário. que prefiamente vamos prepara-lo.

Primeiro vamos criar uma DIV entre os campos do formulário e como atributos dessa DIV um “ID=formulario” que vamos manipular e um STYLE=”display:none” assim fazendo com que esses campos começem ocultos.

bom vai ficar mais ou menos assim:

06 -Install_Jquery03

Pronto, se tudo ocorreu bem! seu formulario vai aparecer com um delay de 0.6 segundo definidos pelo 600 dentro do parametro SHOW.

Posts Relacionados

Flexões de nomes com Ruby On Rails

Posted by Luiz Carvalho | Posted in Dicas | Posted on 08-05-2009-05-2008

0

As vezes temos necessidade (ou preferência ) em criar aplicações Ruby On Rails com palavras em nosso idioma, isso pode ocasionar alguns problemas ao tentar pluralizar ou singularizar essas palavras. Por exemplo:

"permissao".pluralize
= "permissaos" 	#E também
"permissoes".singularize
= "permisso"          

A Para resolver esse problema basta criar regras no arquivo inflections.rb de modo a pluralizar esse tipo de “irregularidade” de modo correto. Bom isso seria muito trabalhoso se já não tivessem feito um arquivo bem completinho que eu vou disponibilizar aqui pra vocês.

Inflector.inflections do |inflect|
inflect.clear

#general rule: add "s" to the end of the word
#casa - casas
inflect.plural /^([a-zA-z]*)a$/i, '1as'
#pe - pes
inflect.plural /^([a-zA-z]*)e$/i, '1es'
#no example
inflect.plural /^([a-zA-z]*)i$/i, '1is'
#carro - carros
inflect.plural /^([a-zA-z]*)o$/i, '1os'
#pneu - pneus
inflect.plural /^([a-zA-z]*)u$/i, '1us'

#if word ends in "r" or "z", add "es"
#luz - luzes
#flor - flores
#arroz - arrozes
inflect.plural /^([a-zA-z]*)r$/i, '1res'
inflect.plural /^([a-zA-z]*)z$/i, '1zes'

#if word ends in "al", "el", "ol", "ul": trade "l" with "is"
#farol - farois
#hospital - hospitais
#telemovel - telemoveis
#pincel - pinceis
#anzol - anzois
inflect.plural /^([a-zA-z]*)al$/i, '1ais'
inflect.plural /^([a-zA-z]*)el$/i, '1eis'
inflect.plural /^([a-zA-z]*)ol$/i, '1ois'
inflect.plural /^([a-zA-z]*)ul$/i, '1uis'

#if word ends in "il" and has tónic accent in last syllable, trade "il" with "is"
#cantil - cantis
inflect.plural /^([a-zA-z]*)il$/i, '1is'

#TODO
#if word ends in "il" and has tónic accent in penultimate syllable, trade "il" with "eis"
#no example

#if word ends in "m", trade "m" with "ns"
#armazem - armazens
#portagem - portagens
inflect.plural /^([a-zA-z]*)m$/i, '1ns'

#TODO
#if word ends in "s" and has one silable, trade "s" with "es"
#no example
#inflect.plural /^([a-zA-z]*)e$/i, '1es'

#TODO
#if word ends in "x" stays the same
#no example... professor X, maybe?
#inflect.plural /^([a-zA-z]*)x$/i, '1xes'

#if word ends in "ão", there are three ways of plural: ãos, ães, ões
#NOTE: hard to detect, so I'll use the most common case
#and then use irregular cases for the others.  if someone knows of
#more cases please add to the list &amp;amp;amp;amp; mail me. thanks!
#
#cão - cães
#colchão - colchões
#portão - portões
#pão - pães
#alemão - alemães
#chão - ?
#pilhão - pilhões
#canhão - canhões
#bidão - bidões
#mão - mãos
inflect.plural /^([a-zA-z]*)ao$/i, '1oes'
# inflect.irregular 'cao', 'caes'
# inflect.irregular 'pao', 'paes'
#inflect.irregular 'mao', 'maos'
#inflect.irregular 'alemao', 'alemaes'

############################
#singularize rules         #
############################

#pes - pe
#carros - carro
#pneus - pneu
inflect.singular /^([a-zA-z]*)as$/i, '1a'
inflect.singular /^([a-zA-z]*)es$/i, '1e'
inflect.singular /^([a-zA-z]*)is$/i, '1i'
inflect.singular /^([a-zA-z]*)os$/i, '1o'
inflect.singular /^([a-zA-z]*)us$/i, '1u'

#luzes - luz
#flores - flor
#arrozes - arroz
inflect.singular /^([a-zA-z]*)res$/i, '1r'
inflect.singular /^([a-zA-z]*)zes$/i, '1z'

#cantis - cantil
inflect.singular /^([a-zA-z]*)is$/i, '1il'

#farois - farol
#hospitais - hospital
#telemoveis - telemovel
#pinceis - pincel
#anzois - anzol
inflect.singular /^([a-zA-z]*)ais$/i, '1al'
inflect.singular /^([a-zA-z]*)eis$/i, '1el'
inflect.singular /^([a-zA-z]*)ois$/i, '1ol'
inflect.singular /^([a-zA-z]*)uis$/i, '1ul'

#armazens - armazem
#portagens - portagem
inflect.singular /^([a-zA-z]*)ns$/i, '1m'

#cães - cão
#colchões - colchão
#portões - portão
#pães - pão
#alemães - alemão
inflect.singular /^([a-zA-z]*)oes$/i, '1ao'
inflect.singular /^([a-zA-z]*)aes$/i, '1ao'
inflect.singular /^([a-zA-z]*)aos$/i, '1ao'

# inflect.plural /^(ox)$/i, '1en'
# inflect.singular /^(ox)en/i, '1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )

inflect.irregular 'alias', 'aliases' #Melhor entendido se continuar com a regra do inglês
inflect.irregular 'mailbox', 'mailboxes' #Melhor entendido se continuar com a regra do inglês
end

Posts Relacionados