<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7660773857654128991</id><updated>2011-04-21T20:34:46.443-07:00</updated><title type='text'>Helio Master</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-4163998519136152188</id><published>2008-05-26T03:53:00.000-07:00</published><updated>2008-05-26T04:09:45.324-07:00</updated><title type='text'>Séptimo ejercicio</title><content type='html'>En este ejercicio utilizaremos el paquete de perl Algorithm::Evolutionary para implementar un algoritmo genético para minimizar la función de Griewank. En este caso usaremos codificación real para los cromosomas.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Individual::Vector;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::Easy;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::GaussianMutation;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::VectorCrossover;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Definición de la función de Griewank:&lt;br /&gt;# -------------------------------------&lt;br /&gt;# f(x) = 1/4000*sum(xi^2) - prod(cos(xi)/sqrt(i)) + 1&lt;br /&gt;#&lt;br /&gt;# -600 &amp;lt;= x(i) &amp;lt;= 600&lt;br /&gt;# i = 1..n (n = número de dimensiones del problema)&lt;br /&gt;#&lt;br /&gt;# Mínimo global: f(x) = 0 se alcanza con x = (0, ..., 0)&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# Función de Griewank&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$funcionGriewank&lt;/span&gt; = sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Cogemos el individuo a evaluar&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$chrom&lt;/span&gt; = &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;shift&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Extraemos el vector&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@x&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;@{$chrom-&amp;gt;{_array}&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Calculamos la función&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$suma&lt;/span&gt; = 0;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$prod&lt;/span&gt; = 1;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;=0;&lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;&amp;lt;=&lt;span style="color: rgb(32, 64, 160);"&gt;$#&lt;/span&gt;x;&lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;++&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$suma&lt;/span&gt; += &lt;span style="color: rgb(32, 64, 160);"&gt;$x&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;**2;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$prod&lt;/span&gt; *= &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;cos&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$x&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;/&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;sqrt&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$i&lt;/span&gt;+1&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$suma&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$suma&lt;/span&gt;/4000;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$fitness&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$suma&lt;/span&gt;-&lt;span style="color: rgb(32, 64, 160);"&gt;$prod&lt;/span&gt;+1;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;return&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$fitness&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Parámetros del algoritmo&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$popSize&lt;/span&gt; = 100; &lt;span style="color: rgb(68, 68, 68);"&gt;# Tamaño de la población&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$numGens&lt;/span&gt; = 100; &lt;span style="color: rgb(68, 68, 68);"&gt;# Número de generaciones&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$dimensiones&lt;/span&gt; = 2; &lt;span style="color: rgb(68, 68, 68);"&gt;# Número de dimensiones del problema&lt;br /&gt;   # y, por lo tanto, número de cromosomas&lt;br /&gt;&lt;br /&gt;# Creación de la población inicial&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@pop&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; 0..&lt;span style="color: rgb(32, 64, 160);"&gt;$popSize&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Los genes tomarán valores entre -600 y 600&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$indi&lt;/span&gt; = Algorithm::Evolutionary::Individual::Vector-&amp;gt;&lt;br /&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$dimensiones&lt;/span&gt;, -600, 600 &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@pop&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$indi&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Inicializamos el fitnes de la población inicial&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@pop&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; !&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$_&lt;/span&gt;-&amp;gt;Fitness&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$fitness&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$funcionGriewank&lt;/span&gt;-&amp;gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$_&lt;/span&gt;-&amp;gt;Fitness&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$fitness&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Definición de los operadores genéticos&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$mutacion&lt;/span&gt; = Algorithm::Evolutionary::Op::GaussianMutation-&amp;gt;&lt;br /&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; 0, 0.1 &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$cruce&lt;/span&gt; = Algorithm::Evolutionary::Op::VectorCrossover-&amp;gt;&lt;br /&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;2&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Elección del algoritmo&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$generation&lt;/span&gt; = Algorithm::Evolutionary::Op::Easy-&amp;gt;&lt;br /&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$funcionGriewank&lt;/span&gt; , 0.2 , &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$mutacion&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$cruce&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Bucle general del algoritmo&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;do&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$generation&lt;/span&gt;-&amp;gt;apply&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; \&lt;span style="color: rgb(32, 64, 160);"&gt;@pop&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"&lt;span style="color: rgb(32, 64, 160);"&gt;$numGens&lt;/span&gt; : "&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$pop&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;-&amp;gt;asString&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 0);"&gt;"&lt;span style="color: rgb(119, 221, 119);"&gt;\n&lt;/span&gt;"&lt;/span&gt; ;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$numGens&lt;/span&gt;--;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;while&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$numGens&lt;/span&gt; &amp;gt; 0 &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;# Mejor individuo encontrado&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"&lt;span style="color: rgb(119, 221, 119);"&gt;\n&lt;/span&gt;La mejor solución encontrada es:&lt;span style="color: rgb(119, 221, 119);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(119, 221, 119);"&gt;\t&lt;/span&gt; "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$pop&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;-&amp;gt;asString&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color: rgb(0, 128, 0);"&gt;"&lt;span style="color: rgb(119, 221, 119);"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-4163998519136152188?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/4163998519136152188/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=4163998519136152188' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/4163998519136152188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/4163998519136152188'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/05/sptimo-ejercicio.html' title='Séptimo ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-5266051919733596637</id><published>2008-05-26T03:14:00.000-07:00</published><updated>2008-05-26T03:52:48.781-07:00</updated><title type='text'>Sexto Ejercicio</title><content type='html'>En este ejercicio utilizaremos el paquete de perl Algorithm::Evolutionary para implementar un algoritmo genético para minimizar la función de Griewank. Usaremos codificación binaria para los cromosomas.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Individual::BitString;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::Easy;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::Mutation;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Algorithm::Evolutionary::Op::Crossover;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Definición de la función de Griewank:&lt;br /&gt;# -------------------------------------&lt;br /&gt;# f(x) = 1/4000*sum(xi^2) - prod(cos(xi)/sqrt(i)) + 1&lt;br /&gt;#&lt;br /&gt;# -600 &amp;lt;= x(i) &amp;lt;= 600&lt;br /&gt;# i = 1..n (n = número de dimensiones del problema)&lt;br /&gt;#&lt;br /&gt;# Mínimo global: f(x) = 0 se alcanza con x = (0, ..., 0)&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# Parámetros del algoritmo&lt;br /&gt;&lt;br /&gt;# Tamaño de la población&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$popSize&lt;/span&gt;=100;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Número de dimensiones del problema (en cada cromosoma&lt;br /&gt;# se codificarán este número de reales)&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$dimensiones&lt;/span&gt; = 3;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Número de bits con los que se codificará cada dimensión&lt;br /&gt;# Cada cromosoma: ($dimensiones*$numBitsPorDimension)bits&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt;=10;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Número de generaciones&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$numGens&lt;/span&gt; = 100;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Función de Griewank:&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$funcionGriewank&lt;/span&gt; = sub &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Cogemos el individuo a evaluar&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$chrom&lt;/span&gt; = &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;shift&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt; = &lt;span style="color:#2040a0;"&gt;$chrom&lt;/span&gt;-&amp;gt;Chrom&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Extraemos los números reales de la cadena binaria&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;=0;&lt;br /&gt;&lt;strong&gt;while&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;&amp;lt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;length&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$x&lt;/span&gt; = &lt;strong&gt;eval&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;"0b"&lt;/span&gt;.&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;substr&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt; = &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$x&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt; += &lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Los normalizamos y los pasamos al rango [-600,600]&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$max&lt;/span&gt;=&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;2**&lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-1;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;=0;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&amp;lt;=&lt;span style="color:#2040a0;"&gt;$#&lt;/span&gt;vector;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;++&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;=&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;/&lt;span style="color:#2040a0;"&gt;$max&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;*1200&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-600;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Calculamos la función&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$suma&lt;/span&gt; = 0;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$prod&lt;/span&gt; = 1;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;=0;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&amp;lt;=&lt;span style="color:#2040a0;"&gt;$#&lt;/span&gt;vector;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;++&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$suma&lt;/span&gt; += &lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;**2;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$prod&lt;/span&gt; *= &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;cos&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;/&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;sqrt&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;+1&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;$suma&lt;/span&gt; = &lt;span style="color:#2040a0;"&gt;$suma&lt;/span&gt;/4000;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$fitness&lt;/span&gt; = &lt;span style="color:#2040a0;"&gt;$suma&lt;/span&gt;-&lt;span style="color:#2040a0;"&gt;$prod&lt;/span&gt;+1;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$fitness&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Muestra los números reales que componen un cromosoma&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;sub&lt;span style="color:#ff0000;"&gt; componentesSolucion&lt;/span&gt;{&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Cogemos el individuo a evaluar&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$chrom&lt;/span&gt; = &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;shift&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt; = &lt;span style="color:#2040a0;"&gt;$chrom&lt;/span&gt;-&amp;gt;Chrom&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$resultado&lt;/span&gt; = &lt;span style="color:#008000;"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Extraemos los números reales de la cadena binaria&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;=0;&lt;br /&gt;&lt;strong&gt;while&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;&amp;lt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;length&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$x&lt;/span&gt; = &lt;strong&gt;eval&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;"0b"&lt;/span&gt;.&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;substr&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$str&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt; = &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;@vector&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$x&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$pos&lt;/span&gt; += &lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;#Los normalizamos y los pasamos al rango [-600,600]&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$max&lt;/span&gt;=&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;2**&lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-1;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;=0;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&amp;lt;=&lt;span style="color:#2040a0;"&gt;$#&lt;/span&gt;vector;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;++&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;=&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;/&lt;span style="color:#2040a0;"&gt;$max&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;*1200&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-600;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$resultado&lt;/span&gt; = &lt;span style="color:#008000;"&gt;"&lt;span style="color:#2040a0;"&gt;$resultado&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$vector&lt;/span&gt;[&lt;span style="color:#2040a0;"&gt;$i&lt;/span&gt;], "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;substr&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$resultado&lt;/span&gt;, 0, &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;length&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$resultado&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-2&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Creación de la población inicial&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;@pop&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; 0..&lt;span style="color:#2040a0;"&gt;$popSize&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$indi&lt;/span&gt; = Algorithm::Evolutionary::Individual::BitString-&amp;gt;&lt;br /&gt; &lt;strong&gt;new&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$dimensiones&lt;/span&gt;*&lt;span style="color:#2040a0;"&gt;$numBitsPorDimension&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;@pop&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;$indi&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Inicializamos el fitnes de la población inicial&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;@pop&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; !&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;-&amp;gt;Fitness&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$fitness&lt;/span&gt; = &lt;span style="color:#2040a0;"&gt;$funcionGriewank&lt;/span&gt;-&amp;gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;-&amp;gt;Fitness&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$fitness&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Definición de los operadores genéticos&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$mutacion&lt;/span&gt; = Algorithm::Evolutionary::Op::Mutation-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;0.1&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$cruce&lt;/span&gt; = Algorithm::Evolutionary::Op::Crossover-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;2&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Elección del algoritmo&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$generation&lt;/span&gt; = Algorithm::Evolutionary::Op::Easy-&amp;gt;&lt;br /&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$funcionGriewank&lt;/span&gt; , 0.2 , &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$mutacion&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;$cruce&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Bucle general del algoritmo&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;do&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;$generation&lt;/span&gt;-&amp;gt;apply&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; \&lt;span style="color:#2040a0;"&gt;@pop&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;"&lt;span style="color:#2040a0;"&gt;$numGens&lt;/span&gt; : "&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;$pop&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;-&amp;gt;asString&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt; ;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;$numGens&lt;/span&gt; -- ;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;while&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$numGens&lt;/span&gt; &amp;gt; 0 &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#444444;"&gt;# Mejor individuo encontrado&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;La mejor solución encontrada es:&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\t&lt;/span&gt; "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$pop&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;-&amp;gt;asString&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;Componentes de la mejor solución: &lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\t&lt;/span&gt; "&lt;/span&gt;;&lt;br /&gt;componentesSolucion&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$pop&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-5266051919733596637?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/5266051919733596637/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=5266051919733596637' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/5266051919733596637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/5266051919733596637'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/05/sexto-ejercicio.html' title='Sexto Ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-1582216983951124425</id><published>2008-04-30T07:49:00.000-07:00</published><updated>2008-05-26T04:03:26.541-07:00</updated><title type='text'>Quinto Ejercicio</title><content type='html'>En este ejercicio vamos a contar todas las veces que se repiten las palabras que aparecen en un fichero y vamos a imprimir las 50 palabras más repetidas.&lt;br /&gt;&lt;br /&gt;El código del programa es el siguiente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; File::Slurp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;@ARGV&lt;/span&gt; || &lt;strong&gt;die&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"Uso: &lt;span style="color:#2040a0;"&gt;$0&lt;/span&gt; &amp;lt;fichero para contar palabras&amp;gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$text&lt;/span&gt; = read_file&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$ARGV&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;@palabras&lt;/span&gt; = &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;split&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;" "&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$text&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;%indice&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;@palabras&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;if&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt; =~&lt;span style="color:#b000d0;"&gt; /^([a-záéíóúñ])+$/&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#2040a0;"&gt;$indice&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;=&lt;span style="color:#2040a0;"&gt;$indice&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;+1;&lt;br /&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;@ordenadas&lt;/span&gt; = &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;sort&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$indice&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$b&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; cmp &lt;span style="color:#2040a0;"&gt;$indice&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$a&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;keys&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;%indice&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;0..49&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;if&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&amp;lt;=&lt;span style="color:#2040a0;"&gt;$#&lt;/span&gt;ordenadas&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;+1,&lt;span style="color:#008000;"&gt;": "&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$ordenadas&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color:#008000;"&gt;" ... "&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$indice&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$ordenadas&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color:#008000;"&gt;" veces&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Primero dividimos el texto en palabras con la función split.&lt;br /&gt;Luego recorremos el array con las palabras y si concuerdan con la expresión regular que define "una palabra en minúsculas" vamos incrementando el valor de un hash en el que tenemos como clave la palabra en sí y como valor el número de veces que se ha repetido.&lt;br /&gt;A continuación ordenamos las palabras por repeticiones e imprimimos las 50 más frecuentes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-1582216983951124425?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/1582216983951124425/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=1582216983951124425' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/1582216983951124425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/1582216983951124425'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/quinto-ejercicio.html' title='Quinto Ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-3979546385136170297</id><published>2008-04-30T06:34:00.000-07:00</published><updated>2008-05-26T04:07:04.475-07:00</updated><title type='text'>Cuarto Ejercicio</title><content type='html'>Vamos a escribir un programa que, dado un fichero de entrada, lo divida en párrafos y le añada las correspondientes etiquetas de párrafo en html (&amp;lt;p&gt;Parrafo&amp;lt;/p&gt;).&lt;br /&gt;&lt;br /&gt;El código del programa es el siguiente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; File::Slurp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#2040a0;"&gt;@ARGV&lt;/span&gt; || &lt;strong&gt;die&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"Uso: &lt;span style="color:#2040a0;"&gt;$0&lt;/span&gt; &amp;lt;fichero a dividir por párrafos&amp;gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$text&lt;/span&gt; = read_file&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$ARGV&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; ;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;@parrafos&lt;/span&gt;=&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;split&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\r&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\r&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;$text&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;@parrafos&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0..&lt;span style="color:#2040a0;"&gt;$#&lt;/span&gt;parrafos&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;"&amp;lt;p&amp;gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;,&lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;&amp;lt;/p&amp;gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Primero dividimos el texto del fichero en párrafos usando la función split la cual, como indica su primer argumento, añadirá una parte cada vez que encuentre 2 saltos de línea. Seguidamente, recorremos el array que contiene las partes e imprimimos en pantalla cada parte entre las mencionadas etiquetas html.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-3979546385136170297?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/3979546385136170297/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=3979546385136170297' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/3979546385136170297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/3979546385136170297'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/cuarto-ejercicio.html' title='Cuarto Ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-5224130120097432302</id><published>2008-04-22T09:43:00.001-07:00</published><updated>2008-05-26T04:08:15.649-07:00</updated><title type='text'>Tercer ejercicio</title><content type='html'>Vamos a escribir un programa que cuente el número de líneas que no estén en blanco en un fichero, y lo escriba en un fichero de salida cuyo nombre se cree a partir del nombre del fichero original, con la extensión lc.&lt;br /&gt;&lt;br /&gt;El código de nuestro programa es el siguiente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt; = &lt;span style="color:#008000;"&gt;"diablocojuelo.txt"&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; ! -r &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;die&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"El fichero &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt; no es legible&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$fh&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"&amp;lt;"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;strong&gt;die&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"No puedo abrir el fichero &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt; por &lt;span style="color:#2040a0;"&gt;$!&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$fh_out&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"&amp;gt;"&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"&lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt;.lc"&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;strong&gt;die&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"No puedo abrir el fichero &lt;span style="color:#2040a0;"&gt;$leyendo&lt;/span&gt;.lc por &lt;span style="color:#2040a0;"&gt;$!&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$cont&lt;/span&gt; = 0;&lt;br /&gt;&lt;strong&gt;while&lt;/strong&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&amp;lt;&lt;span style="color:#2040a0;"&gt;$fh&lt;/span&gt;&amp;gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;chop&lt;/strong&gt;&lt;/span&gt;; &lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;chop&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color:#2040a0;"&gt;$cont&lt;/span&gt;++ &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;$_&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#4444ff;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$fh_out&lt;/span&gt; &lt;span style="color:#008000;"&gt;"&lt;span style="color:#2040a0;"&gt;$cont&lt;/span&gt;&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;close&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$fh&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#a52a2a;"&gt;&lt;strong&gt;close&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;$fh_out&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hemos usado cierta funcionalidad de perl que habíamos aprendido en el tutorial:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;  $!            es una variable que contiene el último mensaje de error del sistema.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt; &lt;$fh&gt;      lee la siguiente línea (incluido el \n) del fichero al que apunta $fh&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt; $_           es la variable por defecto de perl. Si en algún sitio debería haber una variable y no la hay, entonces se está usando $_&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;chop        elimina un caracter del final de la línea&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-5224130120097432302?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/5224130120097432302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=5224130120097432302' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/5224130120097432302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/5224130120097432302'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/tercer-ejercicio.html' title='Tercer ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-1880692315874688444</id><published>2008-04-16T09:33:00.001-07:00</published><updated>2008-04-16T09:34:46.664-07:00</updated><title type='text'>Segundo ejercicio</title><content type='html'>Depurando un fichero .pl desde el intérprete de comandos:&lt;br /&gt;&gt; perl -d fichero.pl&lt;br /&gt;&lt;br /&gt;Algunos comandos del depurador:&lt;br /&gt;c: continuar&lt;br /&gt;n: siguiente&lt;br /&gt;q: salir&lt;br /&gt;h: ayuda&lt;br /&gt;b [num_linea]: breakpoint en num_linea&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-1880692315874688444?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/1880692315874688444/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=1880692315874688444' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/1880692315874688444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/1880692315874688444'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/segundo-ejercicio.html' title='Segundo ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-6655203519923831754</id><published>2008-04-16T09:00:00.000-07:00</published><updated>2008-04-16T09:35:38.400-07:00</updated><title type='text'>Primer ejercicio</title><content type='html'>Ejecutando un fichero .pl desde la línea de comandos:&lt;br /&gt;&gt; perl fichero.pl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-6655203519923831754?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/6655203519923831754/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=6655203519923831754' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/6655203519923831754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/6655203519923831754'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/primer-ejercicio.html' title='Primer ejercicio'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7660773857654128991.post-7147007472282853312</id><published>2008-04-16T08:59:00.000-07:00</published><updated>2008-04-22T09:59:34.111-07:00</updated><title type='text'>Iniciándose en Perl</title><content type='html'>Vamos a realizar un curso rápido de perl.&lt;br /&gt;Se podrá realizar un seguimiento del desarrollo de este curso a través de este blog.&lt;br /&gt;&lt;br /&gt;Lo primero que hemos hecho ha sido:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Descargar perl desde &lt;a href="http://strawberryperl.com/"&gt;http://strawberryperl.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Descargar el editor Crimson desde &lt;a href="http://www.crimsoneditor.com/"&gt;http://www.crimsoneditor.com/&lt;/a&gt;&lt;span class="a"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7660773857654128991-7147007472282853312?l=heliomaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://heliomaster.blogspot.com/feeds/7147007472282853312/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7660773857654128991&amp;postID=7147007472282853312' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/7147007472282853312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7660773857654128991/posts/default/7147007472282853312'/><link rel='alternate' type='text/html' href='http://heliomaster.blogspot.com/2008/04/prueba-inicial.html' title='Iniciándose en Perl'/><author><name>Helio</name><uri>http://www.blogger.com/profile/08826663337504755874</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
