Jenética
Jenetics é uma biblioteca de algoritmo genético , algoritmo evolutivo , evolução gramatical , programação genética e otimização multiobjetivo , escrita em Java moderno. Ele é projetado com uma separação clara dos vários conceitos do algoritmo, por exemplo, Gene
, Chromosome
, Genotype
, Phenotype
, Population
e Function
de aptidão. Jenetics permite minimizar e maximizar a função de condicionamento físico fornecida sem ajustá-la. Em contraste com outras implementações de GA, a biblioteca usa o conceito de fluxo de evolução ( EvolutionStream
) para executar as etapas de evolução. Como o EvolutionStream
implementa a interface Java Stream, ele funciona perfeitamente com o restante da API Java Stream.
Outros idiomas
- Jenetics.Net : Porta experimental do .NET Core em C# da biblioteca base.
- Helisa : Wrapper Scala em torno da biblioteca Jenetics.
Documentação
A biblioteca está totalmente documentada (javadoc) e vem com manual do usuário (pdf).
Construir Jenética
Jenetics requer pelo menos Java 21 para compilar e executar.
Confira o branch master do GitHub.
$ git clone https://github.com/jenetics/jenetics.git <builddir>
Jenetics usa Gradle como sistema de construção e organiza a fonte em subprojetos (módulos). Cada subprojeto está localizado em seu próprio subdiretório:
Projetos publicados
Os seguintes projetos/módulos também são publicados no Maven.
- jenetics : Este projeto contém o código-fonte e testes para o módulo principal Jenetics.
- jenetics.ext : Este módulo contém operações e tipos de dados adicionais não padrão do GA. Também contém aulas para resolução de problemas multiobjetivos (MOEA) e realização de Evolução Gramatical (GE).
- jenetics.prog : Os módulos contêm classes que permitem fazer programação genética (GP). Ele funciona perfeitamente com o
EvolutionStream
e o Evolution Engine
existentes. - jenetics.xml : módulo de empacotamento XML para as estruturas de dados base do Jenetics .
Projetos não publicados
- jenetics.example : Este projeto contém código de exemplo para o módulo principal .
- jenetics.doc : Contém o código do site e o manual.
- jenetics.tool : Este módulo contém classes usadas para fazer testes de integração e testes de desempenho algorítmico. Também é usado para criar medidas de desempenho do GA e criar diagramas a partir das medidas de desempenho.
Para construir a biblioteca, mude para o diretório <builddir>
(ou um dos diretórios do módulo) e chame uma das tarefas disponíveis:
- compileJava : Compila as fontes do Jenetics e copia os arquivos de classe para o diretório
<builddir>/<module-dir>/build/classes/main
. - jar : Compila os fontes e cria os arquivos JAR. Os artefatos são copiados para o diretório
<builddir>/<module-dir>/build/libs
. - javadoc : Gera a documentação da API. O Javadoc é armazenado no diretório
<builddir>/<module-dir>/build/docs
- test : Compila e executa os testes unitários. Os resultados do teste são impressos no console e um relatório de teste, criado pelo TestNG, é gravado no diretório
<builddir>/<module-dir>
. - clean : Exclui os diretórios
<builddir>/build/*
e remove todos os artefatos gerados.
Para construir o jar da biblioteca a partir da chamada de origem
$ cd <build-dir>
$ ./gradlew jar
Exemplo
Olá mundo (contando uns)
A configuração mínima do mecanismo de evolução precisa de uma fábrica de genótipos, Factory<Genotype<?>>
e uma Function
de fitness. O Genotype
implementa a interface Factory
e pode portanto ser utilizado como protótipo para criação da Population
inicial e para criação de novos Genotypes
aleatórios.
import io . jenetics . BitChromosome ;
import io . jenetics . BitGene ;
import io . jenetics . Genotype ;
import io . jenetics . engine . Engine ;
import io . jenetics . engine . EvolutionResult ;
import io . jenetics . util . Factory ;
public class HelloWorld {
// 2.) Definition of the fitness function.
private static Integer eval ( Genotype < BitGene > gt ) {
return gt . chromosome ()
. as ( BitChromosome . class )
. bitCount ();
}
public static void main ( String [] args ) {
// 1.) Define the genotype (factory) suitable
// for the problem.
Factory < Genotype < BitGene >> gtf =
Genotype . of ( BitChromosome . of ( 10 , 0.5 ));
// 3.) Create the execution environment.
Engine < BitGene , Integer > engine = Engine
. builder ( HelloWorld :: eval , gtf )
. build ();
// 4.) Start the execution (evolution) and
// collect the result.
Genotype < BitGene > result = engine . stream ()
. limit ( 100 )
. collect ( EvolutionResult . toBestGenotype ());
System . out . println ( "Hello World: n " + result );
}
}
Em contraste com outras implementações de GA, a biblioteca usa o conceito de fluxo de evolução ( EvolutionStream
) para executar as etapas de evolução. Como o EvolutionStream
implementa a interface Java Stream, ele funciona perfeitamente com o restante da API de streaming Java. Agora vamos dar uma olhada mais de perto na listagem acima e discutir este programa simples passo a passo:
A parte provavelmente mais desafiadora, ao configurar um novo Engine
de evolução, é transformar o domínio do problema em uma representação apropriada Genotype
(fábrica). No nosso exemplo queremos contar o número de uns de um BitChromosome
. Como estamos contando apenas os de um cromossomo, estamos adicionando apenas um BitChromosome
ao nosso Genotype
. Em geral, o Genotype
pode ser criado com 1 a n cromossomos.
Feito isso, a função de aptidão, que deve ser maximizada, pode ser definida. Utilizando os novos recursos de linguagem introduzidos no Java 8, simplesmente escrevemos um método estático privado, que pega o genótipo que definimos e calcula seu valor de aptidão. Se quisermos usar o método otimizado de contagem de bits, bitCount()
, temos que converter a classe Chromosome<BitGene>
na classe BitChromosome
realmente usada. Como temos certeza de que criamos o genótipo com um BitChromosome
, isso pode ser feito com segurança. Uma referência ao método eval é então usada como função de fitness e passada para o método Engine.build
.
Na terceira etapa estamos criando o Engine
de evolução, que é responsável por alterar, respectivamente evoluir, uma determinada população. O Engine
é altamente configurável e leva parâmetros para controlar o ambiente evolutivo e computacional. Para alterar o comportamento evolutivo, você pode definir diferentes alteradores e seletores. Ao alterar o serviço Executor
utilizado, você controla o número de threads; o motor pode ser usado. Uma nova instância Engine
só pode ser criada por meio de seu construtor, que é criado chamando o método Engine.builder
.
Na última etapa, podemos criar um novo EvolutionStream
a partir do nosso Engine
. O EvolutionStream
é o modelo ou visão do processo evolutivo. Serve como um “controlador de processo” e também permite, entre outras coisas, controlar o término da evolução. Em nosso exemplo, simplesmente truncamos o fluxo após 100 gerações. Se você não limitar o fluxo, o EvolutionStream
não será encerrado e executado para sempre. Como o EvolutionStream
estende a interface java.util.stream.Stream
, ele se integra perfeitamente ao restante da API Java Stream. O resultado final, o melhor Genotype
do nosso exemplo, é então coletado com um dos coletores predefinidos da classe EvolutionResult
.
Imagens em evolução
Este exemplo tenta aproximar uma determinada imagem por polígonos semitransparentes. Ele vem com uma UI Swing, onde você pode iniciar imediatamente seus próprios experimentos. Depois de compilar as fontes com
$ ./gradlew compileTestJava
você pode começar o exemplo chamando
$ ./jrun io.jenetics.example.image.EvolvingImages
A imagem anterior mostra a GUI após evoluir a imagem padrão por cerca de 4.000 gerações. Com o botão »Abrir« é possível carregar outras imagens para poligonização. O botão »Salvar« permite armazenar imagens poligonizadas em formato PNG no disco. No botão da UI, você pode alterar alguns parâmetros do GA do exemplo.
Projetos usando Jenetics
- SPEAR : SPEAR (Smart Prognosis of Energy with Allocation of Resources) criou uma plataforma extensível para otimizações energéticas e de eficiência de sistemas de produção.
- Renaissance Suite : Renaissance é um conjunto de benchmark moderno, aberto e diversificado para JVM, destinado a testar compiladores JIT, coletores de lixo, criadores de perfil, analisadores e outras ferramentas.
- APP4MC : Eclipse APP4MC é uma plataforma para engenharia de sistemas de software embarcados com vários e muitos núcleos.
Blogs e artigos
- Schachprobleme komponieren mit Evolutionären Algorithmen, por Jakob Leck , dezembro de 2023, Die Schwalbe 324-2, pp. Composição e resolução de problemas de xadrez com um número de peças maior que o habitual. Em vez de uma abordagem de força bruta, um GA é usado para resolver os problemas (alemão).
- Resolvendo o problema da mochila com a biblioteca Jenetics, por Craftcode Crew , 13 de maio de 2021
- 一种基于Jenetics的遗传算法程序设计,电脑知识与技术 2018年22期 por 王康, 26 de novembro de 2018
- Introdução à Biblioteca Jenetics, por baeldung , 11 de abril de 2017
- Como resolver problemas difíceis usando algoritmos genéticos, por Tzofia Shiftan , 6 de abril de 2017
- Algoritmos genéticos com Java, por William Antônio , 10 de janeiro de 2017
- Jenetics 설치 및 예제, por JDM , 8 de maio de 2015
- 유전 알고리즘 (Algoritmos Genéticos), por JDM , 2 de abril de 2015
Citações
Vicente A. Cicirello. Computação Evolucionária de Código Aberto com Chips-n-Salsa. Ciência da Computação, Escola de Negócios, Universidade de Stockton. Dezembro de 2024. ...
- Vicente A. Cicirello. Computação Evolucionária de Código Aberto com Chips-n-Salsa. Ciência da Computação, Escola de Negócios, Universidade de Stockton. Dezembro de 2024.
- S. Gruber, P. Feichtenschlager, C. Fabianek, E. Gringinger e CG Schuetz. Rumo a um otimizador heurístico para um sistema de gerenciamento de tempo alvo em gerenciamento de fluxo de tráfego aéreo. 2024 AIAA DATC/IEEE 43ª Conferência de Sistemas Aviônicos Digitais (DASC), San Diego, CA, EUA, 2024, pp. Novembro de 2024.
- Šimić, G., Jevremović, A., Strugarević, D. Melhoria do Processo de Ensino Utilizando o Algoritmo Genético. In: Perakovic, D., Knapcikova, L. (eds) Futuros facilitadores de acesso para infraestruturas onipresentes e inteligentes. FABULOSO 2024. Notas de aula do Instituto de Ciências da Computação, Informática Social e Engenharia de Telecomunicações, vol 596. Out.
- Dimitris G. Mintisa ∙ Nikolaos Cheimariosa ∙ Andreas Tsoumanisa ∙ Anastasios G. Papadiamantisa ∙ Nico W. van den Brinkd ∙ Henk J. van Lingene ∙ Georgia Melagrakif ∙ Iseult Lynchb ∙ Antreas Afantite. NanoBioAccumulate: Modelagem da absorção e bioacumulação de nanomateriais no solo e invertebrados aquáticos por meio da plataforma Enalos DIAGONAL Cloud. Revista de Biotecnologia Computacional e Estrutural. Elsevier, 2001-0370. Outubro de 2024.
- R. Jordão, F. Bahrami, Y. Yang, M. Becker, I. Sander e K. Rosvall. Exploração exata do espaço de design multiobjetivo e sem preferências de DSP estático em plataformas multicore. Fórum 2024 sobre Linguagens de Especificação e Design (FDL), Estocolmo, Suécia, 2024, pp. Setembro de 2024.
- Jared Murphy e Travis Desell. Minimizando o algoritmo de programação genética baseado em gráfico EXA-GP para previsão de séries temporais interpretáveis. Em Anais do Companheiro da Conferência de Computação Genética e Evolucionária (GECCO '24 Companion). Association for Computing Machinery, Nova York, NY, EUA, 1686–1690. Agosto de 2024.
- Jared Murphy, Devroop Kar, Joshua Karns e Travis Desell. EXA-GP: Unificando Programação Genética Baseada em Gráficos e Neuroevolução para Previsão de Séries Temporais Explicáveis. Em Anais do Companheiro da Conferência de Computação Genética e Evolucionária (GECCO '24 Companion). Association for Computing Machinery, Nova York, NY, EUA, 523–526. Agosto de 2024.
- Sebastian Gruber, Paul Feichtenschlager e Christoph G. Schuetz. Usando algoritmos genéticos para otimização de preservação de privacidade de problemas de atribuição multiobjetivo em ambientes de tempo crítico: uma aplicação em gerenciamento de fluxo de tráfego aéreo. Em Anais da Conferência de Computação Genética e Evolutiva (GECCO '24). Association for Computing Machinery, Nova York, NY, EUA, 1246–1254. Julho de 2024.
- Jianghao Wang, Clay Stevens, Brooke Kidmose, Myra B. Cohen e Hamid Bagheri. Análise Evolutiva de Especificações de Ligas com uma Função de Fitness Adaptativa. Engenharia de software baseada em pesquisa. SSBSE 2024. Notas de aula em Ciência da Computação, vol 14767. Springer. Julho de 2024.
- Bernard J. Berger; Cristina Gorda; Lauren Paulo; Rolf Drechsler. EvoAl — Otimização de domínio sem código. Conferência de Computação Genética e Evolutiva (GECCO-2024). Julho de 2024.
- Christina Plump, Daniel C. Hoinkiss, Jörn Huber, Bernhard J. Berger, Matthias Günther, Christoph Lüth, Rolf Drechsler. Encontrando a sequência de ressonância magnética perfeita para o seu paciente --- Rumo a um fluxo de trabalho de otimização para sequências de ressonância magnética. IEEE WCCI 2024. Junho de 2024.
- Milan Čugurović, Milena Vujošević Janičić, Vojin Jovanović, Thomas Würthinger. GraalSP: Profiler estático baseado em aprendizado de máquina poliglota, eficiente e robusto. Revista de Sistemas e Software, Volume 213, 2024, 112058, ISSN 0164-1212. Julho. 2024.
- Wenwen Feng, Xiaohui Lei, Yunzhong Jiang, Chao Wang, Weihong Liao, Hao Wang, Gong Xinghui, Yu Feng. Acoplamento de modelo de controle preditivo e controle baseado em regras para controle em tempo real de sistemas fluviais urbanos. Jornal de Hidrologia, 2024, 131228, ISSN 0022-1694. Abril de 2024.
- S. Sint, A. Mazak-Huemer, M. Eisenberg, D. Waghubinger e M. Wimmer. Otimização automática de faixas de tolerância para identificação de estado de tempo de execução baseada em modelo. Transações IEEE em Ciência e Engenharia de Automação. Abril. 2024.
- Cicirello, Vincent A. Computação Evolucionária: Teorias, Técnicas e Aplicações. Ciências Aplicadas 14, não. 6: 2542. Março de 2024.
- Koitz-Hristov R, Sterner T, Stracke L, Wotawa F. Sobre a adequação da cobertura verificada e ajuste de parâmetros genéticos na redução do conjunto de testes. J Softw Evol Proc. 2024;e2656. Fevereiro de 2024.
- Jordão, Rodolfo; Becker, Matias; Sander, Ingo. IDeSyDe: Exploração Sistemática do Espaço de Design via Identificação do Espaço de Design. Transações ACM sobre Automação de Projeto de Sistemas Eletrônicos. Fevereiro de 2024.
- Squillero, G., Tonda, A. Veni, Vidi, Evolvi comentam sobre “Tubarão 30” de WB Langdon. Programa Genet Evolvable Mach 24, 24 (2023) novembro de 2023.
- Eneko Osaba, Gorka Benguria, Jesus L. Lobo, Josu Diaz-de-Arcaya, Juncal Alonso, Iñaki Etxaniz. Otimizando configurações IaC: um estudo de caso usando computação inspirada na natureza. CIIS 2023. Novembro de 2023.
- Sapra, D., Pimentel, AD Explorando sistemas multi-core com confiabilidade vitalícia e compensações no consumo de energia. Sistemas de Computadores Embarcados: Arquiteturas, Modelagem e Simulação. SAMOS 2023. Notas de aula em Ciência da Computação, vol 14385. Springer, Cham. Novembro de 2023.
- Syed Juned Ali, Jan Michael Laranjo, Dominik Bork. Uma estrutura de modularização de modelo conceitual baseada em algoritmos genéticos genéricos e personalizáveis. 27ª Conferência Internacional EDOC (EDOC 2023) - Design Empresarial, Operações e Computação. Setembro de 2023.
- A. Elyasaf, E. Farchi, O. Margalit, G. Weiss e Y. Weiss. Critérios de Cobertura Generalizados para Testes de Sequência Combinatória. Transações IEEE em Engenharia de Software, vol. 49, não. 08, págs. 4023-4034. Agosto de 2023.
- Julien Amblard, Robert Filman, Gabriel Kopito. GPStar4: Uma estrutura flexível para experimentar programação genética. Companheiro OGECCO '23: Procedimentos da Conferência Companheira sobre Computação Genética e Evolutiva. Julho de 2023.
- Garmendia, A., Bork, D., Eisenberg, M., Ferreira, T., Kessentini, M., Wimmer, M. Aproveitando Inteligência Artificial para Análise e Design de Software Baseado em Modelos. Otimizando o Processo de Desenvolvimento de Software com Inteligência Artificial. Série de computação natural. Springer, Singapura. Julho de 2023.
- Sikora, M., Smołka, M. Uma aplicação de algoritmos evolutivos e aprendizado de máquina na harmonização de quatro partes. Ciência Computacional – ICCS 2023. ICCS 2023. Notas de aula em Ciência da Computação, vol 14073. Springer junho de 2023.
- Dolly Sapra e Andy D. Pimentel. Explorando sistemas multinúcleo com confiabilidade vitalícia e compensações no consumo de energia. SAMOS '23. Maio de 2023.
- Vipin Shukla, Mainak Bandyopadhyay. Otimização de parâmetros de entrada de fonte de plasma acionada por RNA através de algoritmos evolutivos inspirados na natureza. Sistemas Inteligentes com Aplicações, Volume 18, 2023, 200200, ISSN 2667-3053. Maio de 2023.
- P. Feichtenschlager, K. Schuetz, S. Jaburek, C. Schuetz, E. Gringinger. Implementação de um mecanismo de leilão para preservação de privacidade para troca de slots ATFM. Anais da 23ª Conferência Integrada de Comunicações, Navegação e Vigilância (ICNS 2023), Washington DC, EUA, 18 a 20 de abril de 2023, IEEE Press, 12 páginas. Abril de 2023.
- Christoph Laaber, Tao Yue, Shaukat Ali. Priorização de microbenchmark de software baseado em pesquisa multiobjetivo. ArXiv/Ciência da Computação/Engenharia de Software. Novembro de 2022.
- Ricardo Ferreira Vilela, João Choma Neto, Victor Hugo Santiago Costa Pinto, Paulo Sérgio Lopes de Souza, Simone do Rocio Senger de Souza. Otimização bioinspirada para apoiar a geração de dados de teste de software simultâneo. Simultaneidade e Computação: Prática e Experiência. Novembro de 2022.
- G. Mateeva, D. Parvanov, I. Dimitrov, I. Iliev e T. Balabanov. Uma eficiência de bibliotecas de software de algoritmos genéticos de terceiros em computação distribuída móvel para previsão de séries temporais financeiras. 2022 Conferência Internacional Automática e Informática (ICAI). Outubro de 2022.
- Guilherme Espada, Leon Ingelse, Paulo Canelas, Pedro Barbosa, Alcides Fonseca. Tipos de dados como interface mais ergonômica para programação genética guiada por gramática. arXiv. Outubro de 2022.
- Christoph G. Schuetz, Thomas Lorünser, Samuel Jaburek, Kevin Schuetz, Florian Wohner, Roman Karl e Eduard Gringinger. Uma arquitetura distribuída para otimização de preservação de privacidade usando algoritmos genéticos e computação multipartidária. CoopIS 2022: Sistemas de Informação Cooperativos pp 168–185. Setembro de 2022.
- Christina Plump, Bernhard J. Berger, Rolf Drechsler. Usando densidade de dados de treinamento para melhorar algoritmos evolutivos com funções de aptidão aproximadas. WCCI2022 CONGRESSO MUNDIAL IEEE SOBRE INTELIGÊNCIA COMPUTACIONAL. Julho de 2022.
- Christina Plump, Bernhard J. Berger, Rolf Drechsler. Adaptação de operadores de mutação e recombinação para relações com reconhecimento de faixa em dados de aplicações do mundo real. GECCO '22: Proceedings of the Genetic and Evolutionary Computation Conference Companion. Páginas 755–758. Julho de 2022.
- Eric Medvet, Giorgia Nadizar, Luca Manzoni. JGEA: uma estrutura Java modular para experimentar computação evolutiva. GECCO '22: Proceedings of the Genetic and Evolutionary Computation Conference Companion. Páginas 2009–2018. Julho de 2022.
- Moshe Sipper, Tomer Halperin, Itai Tzruia, Achiya Elyasaf. EC-KitY: Kit de ferramentas de computação evolucionária em Python com integração perfeita de aprendizado de máquina. arXiv:2207.10367v1 [cs.NE]. Julho de 2022.
- A. Billedeaux e B. DeVries. Usando relações metamórficas e algoritmos genéticos para testar software de código aberto. 2022 Conferência Internacional IEEE sobre Eletro Tecnologia da Informação (eIT), 2022, pp. Julho de 2022.
- R. Koitz-Hristov, L. Stracke e F. Wotawa. Cobertura verificada para redução do conjunto de testes – vale a pena o esforço? 2022 Conferência Internacional IEEE/ACM sobre Automação de Teste de Software (AST), pp. Junho de 2022.
- Abdessamed Ouessai, Mohammed Salem, Antonio M. Mora. Evolução dos parâmetros de pré-seleção de ação para MCTS em jogos de estratégia em tempo real. Computação de entretenimento, Volume 42. Abril de 2022.
- Musatafa Abbas Abbood Albadr, Sabrina Tiun, Masri Ayob, Fahad Taha AL-Dhief, Khairuddin Omar e Mhd Khaled Maen. Reconhecimento de emoções de fala usando máquina de aprendizado extremo com algoritmo genético otimizado. Ferramentas e aplicativos multimídia, março de 2022.
- Christina Plump, Bernhard Berger, Rolf Drechsler. Escolhendo a técnica certa para a restrição certa - uma abordagem específica de domínio para impor restrições de espaço de busca em algoritmos evolutivos. LDIC-2022, Conferência Internacional sobre Dinâmica em Logística, fevereiro de 2022.
- Quoc Nhat Han Tran, Nhan Quy Nguyen, Hicham Chehade, Lionel Amodeo, Farouk Yalaoui. Otimização de consultas ambulatoriais: estudo de caso de um serviço de quimioterapia. Ciências Aplicadas/Computação e Inteligência Artificial. Janeiro de 2022.
- Achiya Elyasaf, Eitan Farchi, Oded Margalit, Gera Weiss, Yeshayahu Weiss. Teste de sequência combinatória usando programação comportamental e critérios de cobertura generalizados. Jornal de Sistemas e Software. Janeiro de 2022.
- Grupo Frequentis. D4.1 Relatório sobre o estado da arte de conceitos relevantes. SLOTMACHINE - RESULTADOS E ENTREGAS PÚBLICAS, Frequentis dezembro de 2021.
- Huang Wanjie, Wang Haotian, Xue Yibo. Pesquisa sobre Otimização do Modelo de Picking em Armazém baseado em Algoritmo Genético. Conferência Internacional de 2021 sobre Tecnologia da Informação, Educação e Desenvolvimento (ICITED 2021). Dezembro de 2021.
- Aalam Z., Kaur S., Vats P., Kaur A., Saxena R. Uma análise abrangente de esforços de teste usando a ferramenta de teste Avisar para softwares orientados a objetos. Sistemas Inteligentes Sustentáveis. Notas de aula em redes e sistemas, vol 334. Springer, Cingapura. Dezembro de 2021.
- Anh Vu Vo, Debra F. Laefer, Jonathan Byrne. Otimizando o planejamento de rotas de vôo LiDAR urbano usando um algoritmo genético e uma estrutura de computação paralela dupla. Sensoriamento Remoto, Volume 13, Edição 21. Novembro de 2021.
- Pozas N., Durán F. Sobre a escalabilidade de composições de aplicações orientadas a serviços. ICSOC 2021: Computação Orientada a Serviços, pp 449-463, novembro de 2021.
- Küster, T., Rayling, P., Wiersig, R. et al. Otimização multiobjetivo de cronogramas de produção energeticamente eficientes usando algoritmos genéticos. Otimização e Engenharia (2021). Outubro de 2021.
- B. DeVries e C. Trefftz. Uma abordagem de pesquisa de novidades e testes metamórficos para geração automática de testes. 2021 IEEE/ACM 14º Workshop Internacional sobre Teste de Software Baseado em Pesquisa (SBST), 2021, pp. Maio de 2021.
- W. Geithner, Z. Andelkovic, O. Geithner, F. Herfurth, V. Rapp, A. Németh, F. Wilhelmstötter, AH Van Benschoten. OTIMIZAÇÃO DE FONTE DE ÍONS USANDO GENÉTICA BI-OBJETIVA E ALGORITMO DE PERFIL DE MATRIZ. IPAC2021 - 12ª Conferência Internacional de Aceleradores de Partículas. Maio de 2021.
- C. Plump, BJ Berger e R. Drechsler. Operadores de recombinação e mutação com reconhecimento de correlação orientados por domínio para aplicações complexas do mundo real. Congresso IEEE de 2021 sobre Computação Evolucionária (CEC), pp. Julho de 2021.
- Sapra, D., Pimentel, AD Projetando redes neurais convolucionais com treinamento evolutivo fragmentado restrito. Aplicativo Intell (2021). Julho de 2021.
- Michela Lorandi, Leonardo Lucio Custode, Giovanni Iacca. Melhoramento genético do roteamento em redes tolerantes a atrasos. GECCO '21: Proceedings of the Genetic and Evolutionary Computation Conference Companion. Julho de 2021, páginas 35–36.
- Plump, Christina e Berger, Bernhard J. e Drechsler, Rolf. Melhorar algoritmos evolutivos, aprimorando uma função de aptidão aproximada por meio de intervalos de previsão. Congresso IEEE sobre Computação Evolucionária (IEEE CEC-2021). Junho de 2021.
- Faltaous, Sarah, Abdulmaksoud, Aya, Kempe, Markus, Alt, Florian e Schneegass, Stefan. GeniePutt: Aumentando as habilidades motoras humanas por meio da estimulação elétrica muscular. isto - Tecnologia da Informação, vol. , não. , 2021. Maio de 2021.
- Yiming Tang, Raffi Khatchadourian, Mehdi Bagherzadeh, Rhia Singh, Ajani Stewart e Anita Raja. Um estudo empírico de refatorações e dívida técnica em sistemas de aprendizado de máquina. Na Conferência Internacional sobre Engenharia de Software, ICSE '21. Maio de 2021.
- Arifin HH, Robert Ong HK, Dai J., Daphne W., Chiimplee N. Engenharia de linha de produtos baseada em modelo com algoritmos genéticos para seleção automatizada de componentes. In: Krob D., Li L., Yao J., Zhang H., Zhang X. (eds) Design e gerenciamento de sistemas complexos. Springer, Cham. Abril de 2021.
- MICHELA LORANDI, LEONARDO LUCIO CUSTODE e GIOVANNI IACCA. Melhoria genética de protocolos de roteamento para redes tolerantes a atrasos. arXiv:2103.07428v1 março de 2021.
- Amine Aziz-Alaoui, Carola Doerr, Johann Dreo. Rumo ao projeto de algoritmos automatizados em larga escala, integrando estruturas modulares de benchmarking. E arXiv:2102.06435 fevereiro de 2021.
- Dominik Bork e Antonio Garmendia e Manuel Wimmer. Rumo a uma abordagem de modularização multiobjetivo para modelos de relacionamento entre entidades. ER 2020, 39ª Conferência Internacional sobre Modelagem Conceitual. Novembro de 2020.
- Sarfarazi, S.; Deissenroth-Uhrig, M.; Bertsch, V. Agregação de Famílias em Sistemas Energéticos Comunitários: Uma Análise a partir das Perspectivas dos Atores e do Mercado. Energias 2020, 13, 5154. Out.
- M. Šipek, D. Muharemagić, B. Mihaljević e A. Radovan. Melhorando o desempenho de aplicativos de software baseados em nuvem com GraalVM e Quarkus. 2020 43ª Convenção Internacional sobre Informação, Comunicação e Tecnologia Eletrônica (MIPRO), Opatija, Croácia, 2020, pp. Outubro de 2020.
- Vats P., Mandot M. Uma análise abrangente para validação da ferramenta de teste orientada a objetos AVISAR. Joshi A., Khosravy M., Gupta N. (eds) Aprendizado de máquina para análise preditiva. Notas de aula em redes e sistemas, vol 141. Springer, Cingapura. Outubro de 2020.
- Thakur, K., Kumar, G. Técnicas inspiradas na natureza e aplicações em sistemas de detecção de intrusão: progresso recente e perspectiva atualizada. Arquivos de Métodos Computacionais em Engenharia (2020). Agosto de 2020.
- Nur Hidayah Mat Yasin, Abdul Sahli Fakhrudin, Abdul Wafie Afnan Abdul Hadi, Muhammad Harith Mohd Khairuddin, Noor Raihana Abu Sepian, Farhan Mohd Said, Norazwina Zainol. Comparação da Metodologia de Superfície de Resposta e Rede Neural Artificial para a Extração por Solvente de Éster Metílico de Ácido Graxo de Resíduos de Peixe. Jornal Internacional de Agricultura Moderna, Volume 9, No.3, 2020, ISSN: 2305-7246. Setembro de 2020.
- Cicirello, VA Chips-n-Salsa: Uma biblioteca Java de algoritmos de pesquisa local personalizáveis, hibridizáveis, iterativos, paralelos, estocásticos e autoadaptáveis. Journal of Open Source Software, 5(52), 2448. Agosto de 2020.
- Li, Yuanyuan; Carabelli, Stefano; Fadda, Edoardo; Manerba, Daniele; Tadei, Roberto; Terzo, Oliver. Aprendizado de Máquina e Otimização para Reprogramação de Produção na Indústria 4.0. A REVISTA INTERNACIONAL DE TECNOLOGIA DE FABRICAÇÃO AVANÇADA. -ISSN 1433-3015. Agosto de 2020.
- Dolly Sapra e Andy D. Pimentel. Um algoritmo de otimização evolucionária para saturação gradual de funções objetivas. GECCO '20, Cancún, México. Julho. 2020.
- Dolly Sapra e Andy D. Pimentel. Treinamento evolutivo fragmentado restrito para projetar redes neurais convolucionais. IEA/AIE 2020 – Kitakyushu, Japão. Julho. 2020.
- Femi Emmanuel Ayo, Sakinat Oluwabukonla Folorunso, Adebayo A. Abayomi-Alli, Adebola Olayinka Adekunle, Joseph Bamidele Awotunde. Detecção de intrusão de rede baseada em modelo de aprendizagem profunda otimizado com seleção de recursos híbridos baseada em regras. Revista de Segurança da Informação: Uma Perspectiva Global. Maio de 2020.
- Zainol N., Fakharudin AS, Zulaidi Otimização do modelo NIS usando algoritmos de inteligência artificial para degradação biológica de resíduos alimentares. Yaser A. (eds) Avanços na tecnologia de processamento de resíduos. Springer, Singapura. Maio de 2020.
- Sonya Voneva, Manar Mazkatli, Johannes Grohmann e Anne Koziolek. Otimizando Dependências Paramétricas para Extração de Modelo de Desempenho Incremental. Instituto de Tecnologia de Karlsruhe, Karlsruhe, Alemanha. Abril. 2020.
- Raúl Lara-Cabrera, Ángel González-Prieto, Fernando Ortega e Jesús Bobadilla. Evolução da filtragem colaborativa baseada em fatoração de matrizes usando programação genética. MDPI, Ciências Aplicadas. Fevereiro de 2020.
- Humm BG, Hutter M. Padrões de aprendizagem para detecção de eventos complexos em dados de sensores de robôs. Otimização e Aprendizagem. OLA 2020. Comunicações em Ciência da Computação e Informação, vol 1173. Springer, fevereiro de 2020.
- Erich C. Teppan, Giacomo Da Col. Algoritmos genéticos para a criação de regras de despacho para grandes oficinas. Avanços em Integrações de Métodos Inteligentes. Inovação Inteligente, Sistemas e Tecnologias, vol 170. Springer, Cingapura. Janeiro de 2020.
- Ricardo Pérez-Castillo, Francisco Ruiz, Mario Piattini. Um sistema de apoio à tomada de decisão para Modelagem de Arquitetura Corporativa. Sistemas de Apoio à Decisão. Janeiro de 2020.
- Sabrina Appel, Wolfgang Geithner, Stephan Reimann, Mariusz Sapinski, Rahul Singh e Dominik Vilsmeier. Aplicação de algoritmos de otimização inspirados na natureza e aprendizado de máquina para síncrotrons de íons pesados. Jornal Internacional de Física Moderna A. Dezembro de 2019.
- OM Elzeki, MF Alrahmawy, Samir Elmougy. Um novo algoritmo híbrido de genética e ganho de informação para imputar valores ausentes em conjuntos de dados de genes de câncer. PInternational Journal of Intelligent Systems and Applications (IJISA), Vol.11, No.12, pp.20-33, DOI: 10.5815/ijisa.2019.12.03. Dezembro de 2019.
- Oliver Strauss, Ahmad Almheidat e Holger Kett. Aplicando estratégias heurísticas e de aprendizado de máquina à resolução de produtos. Anais da 15ª Conferência Internacional sobre Sistemas e Tecnologias de Informação da Web (WEBIST 2019), páginas 242-249. Novembro de 2019.
- Yuanyuan Li, Stefano Carabelli, Edoardo Fadda, Daniele Manerba, Roberto Tadei1 e Olivier Terzo. Integração de Técnicas de Aprendizado de Máquina e Otimização para Reagendamento Flexível de Job-Shop na Indústria 4.0. Politecnico di Torino, Grupo de Pesquisa Operacional e Otimização. Outubro de 2019.
- Höttger R., Igel B., Spinczyk O. Distribuição restrita de software para sistemas automotivos. Comunicações em Computação e Ciência da Informação, vol 1078. Outubro de 2019.
- Jin-wooLee, Gwangseon Jang, Hohyun Jung, Jae-Gil Lee, Uichin Lee. Maximizando a velocidade e a confiabilidade do trabalho do MapReduce na nuvem móvel, otimizando a alocação de tarefas. Computação Pervasiva e Móvel. Outubro de 2019.
- Krawczyk, Lukas, Mahmoud Bazzal, Ram Prasath Govindarajan e Carsten Wolff. Análise de tempo baseada em modelo e otimização de implantação para sistemas multi-core heterogêneos usando Eclipse APP4MC. 2019 ACM/IEEE 22ª Conferência Internacional sobre Linguagens e Sistemas de Engenharia Orientada a Modelos: 44-53. Setembro de 2019.
- Junio Cezar Ribeiro da Silva, Lorena Leão, Vinicius Petrucci, Abdoulaye Gamatié, Fernando MagnoQuintao Pereira. Escalonamento em Arquiteturas Heterogêneas via Regressão Linear Multivariada em Entradas de Função. lirmm-02281112. Setembro de 2019.
- Eric O. Scott, Sean Luke. TJE aos 20 anos: rumo a um kit de ferramentas de metaheurística geral. GECCO '19: Proceedings of the Genetic and Evolutionary Computation Conference Companion, páginas 1391–1398. Julho de 2019.
- Francisco G. Montoya e Raúl Baños Navarro (Eds.). Métodos de Otimização Aplicados a Sistemas de Potência, Volume 2. MDPI Books, ISBN 978-3-03921-156-2. Julho de 2019.
- Höttger, Robert & Ki, Junhyung & Bui, Bao & Igel, Burkhard & Spinczyk, Olaf. Tempo de resposta CPU-GPU e análise de mapeamento para sistemas automotivos de alto desempenho. 10º Workshop Internacional sobre Ferramentas e Metodologias de Análise para Sistemas Embutidos e em Tempo Real (WATERS) co-localizado com a 31ª Conferência Euromicro sobre Sistemas em Tempo Real (ECRTS'19). Julho de 2019.
- Maxime Cordy, Steve Muller, Mike Papadakis e Yves Le Traon. Teste baseado em pesquisa e melhoria de sistemas de detecção de anomalias baseados em aprendizado de máquina. Anais do 28º Simpósio Internacional ACM SIGSOFT sobre Teste e Análise de Software (ISSTA 2019). ACM, Nova York, NY, EUA, 158-168. Julho de 2019.
- Michael Vistein, Jan Faber, Clemens Schmidt-Eisenlohr, Daniel Reiter. Manuseio automatizado de materiais auxiliares usando sistema de garra multicinemática. Procedia Manufacturing Volume 38, 2019, páginas 1276-1283. Junho de 2019.
- Nikolaos Nikolakis, Ioannis Stathakis, Sotirios Makris. Em um sistema de informação evolutivo para suporte personalizado aos operadores de usinas. 52ª Conferência CIRP sobre Sistemas de Manufatura (CMS), Ljubljana, Eslovênia. Junho de 2019.
- Michael Trotter, Timothy Wood e Jinho Hwang. Prevendo uma tempestade: adivinhando configurações ideais usando algoritmos genéticos e aprendizagem supervisionada. 13ª Conferência Internacional IEEE sobre Sistemas Autoadaptativos e Auto-Organizáveis (SASO 2019). Junho de 2019.
- Krawczyk, Lukas & Bazzal, Mahmoud & Prasath Govindarajan, Ram & Wolff, Carsten. Uma abordagem analítica para calcular tempos de resposta ponta a ponta em aplicações de direção autônoma. 10º Workshop Internacional sobre Ferramentas e Metodologias de Análise para Sistemas Embarcados e em Tempo Real (WATERS 2019). Junho de 2019.
- Rodolfo Ayala Lopes, Thiago Macedo Gomes e Alan Robert Resende de Freitas. Uma plataforma de software de algoritmo evolutivo simbólico. Anais do Companheiro da Conferência de Computação Genética e Evolutiva (GECCO '19). Julho de 2019.
- Aleksandar Prokopec, Andrea Rosà, David Leopoldseder, Gilles Duboscq, Petr Tůma, Martin Studener, Lubomír Bulej, Yudi Zheng, Alex Villazón, Doug Simon, Thomas Würthinger, Walter Binder. Renaissance: Conjunto de benchmarking para aplicativos paralelos na JVM. PLDI '19, Phoenix, AZ, EUA. Junho de 2019.
- Robert Höttger, Lukas Krawczyk, Burkhard Igel, Olaf Spinczyk. Análise de mapeamento de memória para sistemas automotivos. Procedimentos de breves apresentações (RTAS 2019). Abril de 2019.
- Al Akkad, MA, & Gazimzyanov, FF SISTEMA AUTOMATIZADO PARA AVALIAÇÃO DE CARACTERÍSTICAS COMPOSICIONAIS DE IMAGEM 2D: CONFIGURANDO O MODELO MATEMÁTICO. Intelectual. Irmã. Proizv., 17(1), 26-33. doi: 10.22213/2410-9304-2019-1-26-33. Abril de 2019.
- Alcaide, A.; Banhos, R.; Arrabal-Campos, FM; Montoya, otimização do FG da energia elétrica contratada por meio de algoritmos genéticos. Energies, volume 12, edição 7, abril de 2019.
- Abdul Sahli Fakharudin, Norazwina Zainol, Zulsyazwan Ahmad Khushairi. Modelagem e otimização da biodelignificação do núcleo do tronco de óleo de dendê usando rede neural e algoritmo genético. IEEA '19: Anais da 8ª Conferência Internacional sobre Informática, Meio Ambiente, Energia e Aplicações; Páginas 155-158, março de 2019.
- Aleksandar Prokopec, Andrea Rosà, David Leopoldseder, Gilles Duboscq, Petr Tůma, Martin Studener, Lubomír Bulej, Yudi Zheng, Alex Villazón, Doug Simon, Thomas Wuerthinger, Walter Binder. Ao avaliar a suíte de benchmarking renascentista: variedade, desempenho e complexidade. Universidade de Cornell: Línguas de Programação, março de 2019.
- S. Appel, W. Geithner, S. Reimann, M Sapinski, R. Singh, DM Vilsmeier Otimização de sincrotrônicos de íons pesados usando algoritmos inspirados em naturação e aprendizado de máquina. 13th int. Física do Acelerador Computacional Conf., Fev. 2019.
- Saad, Christian, Bernhard Bauer, Ulrich R Mansmann e Jian Li. AutoAnalyze in Systems Biology. Insights de bioinformática e biologia, janeiro de 2019.
- Gandeva Bayu Satrya, Soo Young Shin. Abordagem de computação evolutiva para otimizar a programação do superframe em redes de sensores sem fio industriais. Universidade de Cornell, dezembro de 2018.
- HR Maier, S. Razavi, Z. Kapelan, LS Matott, J. Kasprzyk, Ba Tolson. Visão geral introdutória: otimização usando algoritmos evolutivos e outras metaheurísticas. Modelagem e Software Ambiental, dezembro de 2018.
- Erich C. Teppan e Giacomo da Col. Geração automática de regras de despacho para grandes lojas por meio de algoritmos genéticos. CIMA 2018, International Workshop sobre Combinações de Métodos e Aplicações Inteligentes, novembro de 2018.
- Pasquale Salzaa, Filomena Ferrucci. Acelere os algoritmos genéticos na nuvem usando contêineres de software. Future Generation Computer Systems, outubro de 2018.
- Ghulam Mubashar Hassan e Mark Reynolds. Algoritmos genéticos para agendamento e otimização de redes de trem de minério. GCAI-2018. 4ª Conferência Global sobre Inteligência Artificial, setembro de 2018.
- Drezewski, Rafal & Kruk, Sylwia & Makowka, Maciej. A otimização evolutiva do retorno de uma empresa sobre o fator de patrimônio líquido: em relação ao sistema bio-inspirado baseado em agente, que suporta decisões de finanças corporativas. IEEE Acesso. 6. 10.1109/access.2018.2870201, setembro de 2018.
- Arifin, HH, Chimplee, N., Kit Robert Ong, H., Daengdej, J. e Sortrakul, T. Selção automatizada de componentes da síntese de design para arquitetura física com engenharia de sistemas baseada em modelos usando troca evolutiva. Incose International Symposium, 28: 1296-1310, agosto de 2018.
- Ong, Robert e Sortrakul, ThoTapon. Comparação de métodos de seleção de algoritmos genéticos para seleção de componentes automatizados da síntese de projeto com engenharia de sistemas baseada em modelo. Conferência: I-Seec 2018, maio de 2018.
- Stephan Pirnbaum. Die Evolution IM Algoritmo - Teil 2: Multikriterielle Optimierung und Architekturerkennung. JavaSpektrum 03/2018, pp 66–69, maio de 2018.
- W. Geithner, Z. Andelkovic, S. Appel, O. Geithner, F. Herfurth, S. Reimann, G. Vorobjev, F. Wilhelmstötter. Algoritmos genéticos para otimização de máquinas no ambiente do sistema de controle justo. A 9ª Conferência Internacional de Acelerador de Partículas (IPAC'18), maio de 2018.
- Stephan Pirnbaum. Algoritmo de evolução do Die - Teil 1: Grundlagen. JavaSpektrum 01/2018, pp 64–68, janeiro de 2018.
- Alexander Felfernig, Rouven Walter, José A. Galindo, David Benavides, Seda Polat Erdeniz, Müslüm Atas, Stefan Reiterer. A qualquer momento o diagnóstico para reconfiguração. Journal of Intelligent Information Systems, pp 1–22, janeiro de 2018.
- Bruce A. Johnson. Dos dados brutos a mudanças químicas de backbone de proteína usando processamento NMRFX e análise de nmrviewj. Proteína RMN: Métodos e Protocolos, pp. 257--310, Springer Nova York, novembro de 2017.
- Cuadra P., Krawczyk L., Höttger R., Heisig P., Wolff C. Agendamento automatizado para sistemas multi-core incorporados fortemente acoplados usando algoritmos genéticos híbridos. Tecnologias de informações e software: 23rd International Conference, ICIST 2017, Druskininkai, Lituânia. Comunicações em Computer and Information Science, Vol. 756. Springer, Cham, setembro de 2017.
- Michael Trotter, Guyue Liu, Timothy Wood. Na tempestade: descrever configurações ideais usando algoritmos genéticos e otimização bayesiana. Fundamentos e aplicações de Self* Systems (FAS* W), 2017 IEEE 2nd International Workshops de setembro de 2017.
- Emna Hachicha, Karn Yongsiriwit, Mohamed Sellami. Alocação de recursos de nuvem configurável baseada em genética no desenvolvimento de processos de negócios com conhecimento de QoS. Tecnologias de informações e software: 23rd International Conference, ICIST 2017, Druskininkai, Lituânia. Web Services (ICWS), 2017 IEEE International Conference, junho de 2017.
- Abraão G. Nazário, Fábio Ra Silva, Raimundo Teive, Leonardo Villa, Antônio Flávio, João Zico, Eire Fragoso, Ederson F. Souza. Automacão Domótica Simulada Utilizando Algoritmo Genético Especializado na Redutão do Consumo De Energia. Computador na praia 2017 pp. 180-189, março de 2017.
- Bandaru, S. e Deb, K. Técnicas metaheurísticas. Ciências da decisão. CRC Press, pp. 693-750, novembro de 2016.
- Lyazid Toumi, Abdelouahab Moussaoui e Ahmet Ugur. EMED-PART: Uma metodologia eficiente para particionamento horizontal em data warehouses. Anais da Conferência Internacional sobre Processamento de Informações Inteligentes, Segurança e Comunicação Avançada. Djallel Eddine Boubiche, Faouzi Hidoussi e Homero Toral Cruz (Eds.). ACM, Nova York, NY, EUA, artigo 43, 7 páginas, 2015.
- Andreas Holzinger (editor), IGO Jurisica (editor). Descoberta de conhecimento interativo e mineração de dados em informática biomédica. Notas de aula em Ciência da Computação, vol. 8401. Springer, 2014.
- Lyazid Toumi, Abdelouahab Moussaoui, Ahmet Ugur. Otimização de enxame de partículas para o problema de seleção de índices de união de bitmap em data warehouses. The Journal of Supercomputing, Volume 68, Edição 2, pp 672-708, maio de 2014.
- Tang Yi (Guangzhou Power Supply Bureau Limited, Guangzhou 511400, China) Estudo sobre algoritmo de otimização de alocação de compensação reativa orientada a objetos para redes de distribuição , outubro de 2012.
- John M. Linebarger, Richard J. Destry, Robert J. Glass, Walter E. Beyeler, Arlo L. Ames, Patrick D. Finley, S. Louise Maffitt. Sistemas adaptativos complexos do ambiente de engenharia de sistemas Versão 1.0. Relatório de areia, fevereiro de 2012.
Notas de lançamento
8.1.0
Melhorias
- #822: Melhore o script de construção para gerar Javadoc combinado.
- #898: Adicione suporte para leitura de dados de arquivos ou strings CSV. Isso simplifica o código para problemas de regressão.
static List < Sample < Double >> parseDoubles ( final CharSequence csv ) {
return CsvSupport . parseDoubles ( csv ). stream ()
. map ( Sample :: ofDouble )
. toList ();
}
- #904: Atualize para o Gradle 8.10 e a limpeza de scripts de construção.
- #907: Adicione um capítulo no manual do usuário para estratégias de otimização: Jenetics práticos .
- #909: Métodos auxiliares para converter matrizes primitivas.
final Codec < int [], DoubleGene > codec = Codecs
. ofVector ( DoubleRange . of ( 0 , 100 ), 100 )
. map ( Conversions :: doubleToIntArray );
Erros
- #419: Corrija testes estatísticos escamosos.
8.0.0
Melhorias
- O Java 21 é usado para construir e usar a biblioteca.
- #878: Permitir que os threads virtuais avaliem a função de condicionamento físico. Deve estar ativado ao criar um
Engine
(consulte o snippet de código abaixo), o comportamento anterior foi preservado.
final Engine < DoubleGene , Double > engine = Engine . builder ( ff )
. fitnessExecutor ( BatchExecutor . ofVirtualThreads ())
. build ();
- #880: Substitua os exemplos de código no Javadoc pelo JEP 413.
- #886: Melhore o tipo
CharStore
. - #894: Novos operadores genéticos:
ShiftMutator
, ShuffleMutator
e UniformOrderBasedCrossover
. - #895: Melhore a seleção padrão
RandomGenerator
. O RandomGenerator
usado é selecionado na seguinte ordem:- Verifique se o parâmetro inicial
io.jenetics.util.defaultRandomGenerator
está definido. Nesse caso, pegue este gerador. - Verifique se o gerador
L64X256MixRandom
está disponível. Nesse caso, pegue este gerador. - Encontre o melhor gerador aleatório disponível de acordo com o valor
RandomGeneratorFactory.stateBits()
. - Use o gerador
Random
se nenhum melhor gerador puder ser encontrado. É garantido que este gerador esteja disponível em todas as plataformas.
Todas as notas de lançamento
Licença
A biblioteca está licenciada sob a licença Apache, versão 2.0.
Copyright 2007-2024 Franz Wilhelmstötter
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Software usado