srnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xpP`sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpBsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpBtresourcetUfile:/usr/local/forrest/main/webapp/skins/common/images/built-with-forrest-button.pngpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`t image/pngpur[BTxpPNG  IHDRXT tEXtTitleBuilt with Apache Forrest!3 tEXtAuthorstevenn@apache.org˜](tEXtCopyrightThe Apache Software FoundationFtEXtCreation Time11/05/02}TtIME  F*+ pHYs B4gAMA aPLTE))5Oi1+ bEUTbqM&`k !.Ifeõ! 4ff3IhDA333 p}wI Sfx(?]XA\g]gq'SHG e%2RB;@ PXb 6\MYs?8d9:q+DZq LdFO6W`k-;Tְ?M2tq?̻#fW+Zӡs`2!B2B;A>&1Qa8,ZLT]GA-(bC8 kkt`hF2:0@Y$*LQtp%& 0 o&-:{}6l%L0/G)*J `je>#6)EcRWf, () l':Z/p//yTF75f=MVa.%XLPDuJ'79DKlIDATxڵ։[F4AmS⢫Ю8F} ^Je-[mE/D7W]p=yߗyonp}=TU.1 ,9ܐF-7d,>x MGBҍR>q{%r$"Pຟc`YsaabdI7byC`QH>cBw\6j/7'7ܾ[x >Ray,bb_9,$KRi4 G 0\LܨBΜ⡷n۽,RsWó{Gx2|Xq 0`D0U#6Q&gI=upE w|5L{F^XlIJ=nCa ׁq~x8>;f}KUCshS!7lwY\^ܚk?ι8_y<702Wֹ8?ksebZs}DKwY=6?mh^ IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xp=sr java.io.File-E Lpathq~xptP/usr/local/forrest/main/webapp/skins/common/images/built-with-forrest-button.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xp(sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xp7esrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpiytfiletBcocoon://site.navigation.links.xml?pipelinehash=786357640368091306tIG-file-cocoon://site.navigation.links.xml?pipelinehash=786357640368091306sq~ yQtxslttPfile:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xsltWT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xslsq~ >gq~tXfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslt_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslsq~ #q~tLfile:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsltST-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xslsq~ q~tofile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=machineLearning.htmltvT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=machineLearning.htmlsq~ cIq~tjfile:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=machineLearning.htmltqT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=machineLearning.htmlxtAPK_G-file-cocoon://site.navigation.links.xml?pipelinehash=786357640368091306_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=machineLearning.html_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=machineLearning.htmlsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(ppur[BTxp +CXML  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You 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.  Forrest site.xml This file contains an outline of the site's information content. It is used to: - Generate the website menus (though these can be overridden - see docs) - Provide semantic, location-independent aliases for internal 'site:' URIs, eg links to changes.html (or ../changes.html if in subdir). - Provide aliases for external URLs in the external-refs section. Eg, links to http://cocoon.apache.org/ See http://forrest.apache.org/docs/linking.html for more info  The label attribute of the outer "site" element will only show in the linkmap (linkmap.html). Use elements project-name and group-name in skinconfig to change name of your site or project that is usually shown at the top of page. No matter what you configure for the href attribute, Forrest will always use index.html when you request http://yourHost/ See FAQ: "How can I use a start-up-page other than index.html?" site tabCDATAlabelHomeabout Indexhref index.html description 'ai4r - Artificial Intelligence for Rubyindex   Practical ExamplespracticalExamples Genetic AlgorithmsgeneticAlgorithms.html Genetic Algorithms in rubygeneticAlgorithms Machine LearningmachineLearning.html ID3 Decision Trees in rubymachineLearning Neural NetworksneuralNetworks.html &Backpropagation Neural Network in rubyneuralNetworks   Downloadsdownloads.html ai4r - Download Filesdownload Forum-http://forum.jadeferret.com/viewforum.php?f=3  Ai4r Forumforum""" API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html  Ai4 RDoc docsrdoc&&& Source Code repositorysvn.html ai4r Subversion repositorysvn*** ai4r project PDF wholesite.pdf ai4r_site_pdf---  ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr result[1] && result[0] > result[2] "TRIANGLE" elsif result[1] > result[2] "SQUARE" else "CROSS" end end puts "Training Examples" puts "#{net.eval(tr_input).inspect} => #{result_label(net.eval(tr_input))}" puts "#{net.eval(sq_input).inspect} => #{result_label(net.eval(sq_input))}" puts "#{net.eval(cr_input).inspect} => #{result_label(net.eval(cr_input))}" puts "Examples with noiseE" puts "#{net.eval(tr_with_noise).inspect} => #{result_label(net.eval(tr_with_noise))}" puts "#{net.eval(sq_with_noise).inspect} => #{result_label(net.eval(sq_with_noise))}" puts "#{net.eval(cr_with_noise).inspect} => #{result_label(net.eval(cr_with_noise))}" puts "Examples with base noise" puts "#{net.eval(tr_with_base_noise).inspect} => #{result_label(net.eval(tr_with_base_noise))}" puts "#{net.eval(sq_with_base_noise).inspect} => #{result_label(net.eval(sq_with_base_noise))}" puts "#{net.eval(cr_with_base_noise).inspect} => #{result_label(net.eval(cr_with_base_noise))}"    nn-custom 'Customizing your neural network in ai4r  ~Sometime for a given problem, you will have to "play around" with some parameters to get to a solution. This parameters are:   strong1 threshold11: A real number which we will call Threshold. Experiments have shown that best values for q are between 0.25 and 1. You can optionally pass this parameter to the initialization method of your network.   11lambda111: The Learning Rate: a real number, usually betwefen 0.05 and 0.25. You can optionally pass this parameter to the initialization method of your network.   11momentum11: A momentum will avoid oscillations during learning, converging to a solution in less iterations. You can optionally pass this parameter to the initialization method of your network.   11transference function11: By default, f(x) = 1/(1 + e^(-x)). This function is called "Sigmoid function". You can see it like a "smoothed" version of the "Heaviside step function". It will always provide a value between 0 and 1.    images/sigmoid.pngSigmoid function    Sometimes you will have better results with f(x) = x. You can change the transference function from the default sigmoidal function to the linear one, overriding NeuralNetwork::Neuron.f and NeuralNetwork::Neuron.f_prime (derived function of f):   a class NeuralNetwork::Neuron def self.f(x) x end def self.f_prime(x) 1 end end   nn-more .More about Neural Networks and Backpropagation   href56http://en.wikipedia.org/wiki/Artificial_neural_networklink7/Wikipedia article on Artificial Neural Networks77   55,http://en.wikipedia.org/wiki/Backpropagation77Wikipedia article on Backpropagation Algorithm77   55>http://www.tek271.com/articles/neuralNet/IntoToNeuralNets.html770Neural Networks - An Introduction by Abdul Habra77   55:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html77iA graphical explanation of the backpropagation algorithm by Mariusz Bernacki and Przemysław Włodarczyk77     ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptU/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/neuralNetworks.xmlw/xsr'KTKCWMR{_ tlowS@\cbfGbÓ/6 P|8"9 BH*]d+ʈڠ MZ'ge5'U#yO15mYyi>99ulVζpH^U#|sYn+3ֿyl;'?/q`"D5 {[W>VDk4Y-v0dHl_\/lWUbdwzRG==o>qOJg;>ߒs%&8M/>zxHꌄcY_zAXNXng7յSe'%QeOkr bl7VV8I&ּwu/xzR+ ¯:cgsvK5VGnulu᧊y$s,w|Hzѓ?u7>9Sxog1Ͻ}-/2_|u9o*-hn6|ͣZ-oa؝?Ƌ&)i߬dPx<j@5{ll!i8zs#!aKl q&*>+IdHZE $IH*RiBDG%QH*T-TU^V"ȩKa%CKեrYjv]QSUox>isih?kktIRP{3 tttc|1`Wzzuٳ_I`4 7hAӁkpNEۍL4Mz,9l|e , V6営vKV0W90V1VZt2Ykl.m{Xxyux|+|8~fNE̠alЖ+)mUQ;bŕ&rZ}ão6f̘sY;wꊊ !C?~|ɒ%_… ]dddEEO?q\SSԩSz=a7O(11Quɸ?%0,",Dt˗//^8--/ D=vWbcchC hMMMDdXlrrT*Zeeelj%K.iTΛ[4t|||86ˆشXd⫽tbtttƪj6(&)'''A@`\VVkrvl0w ,Fÿ9` qSX,|r9;%ͻ˸Λw| =p56T*5FQ(S9<11d2Ղm//F]YYPPP@DѣK,YpasCC?jUUUwZ-kѡClynu|gҚKt>`@cm%w͡FEEd2 D(##Cшbl0ܹ.uuO߼y2꺺:{`%ԩT[nk"_V?^"tLihh(~+W&ihh s:~bz^׳{b(J\GPYjBiE**JRƲ.$𗷺466CDGGuv|?4''Y Vc%i4TֺTձ dGDJw4 qrW*h///ԩS^wԩ'O"Ӌ w!@6aiӦ]W36mڼyJm=F?U@Ȑq dUy- Ջ s d!@Ȑq d82d2 B!C!@?*1LT%nr2uzsG/E1_6jMJ&&-6bָq14~xΝ{K$ejCw-kݨ]A+{yT_q0n+%!{zY`my,,)Ive q;NQNO43m2v2B^)KZ[t92gGM9s'WQF(#t⩞7n#ǖG$}MH53Y=qR2,rjriom)*-ʲ͌ x܁~W"/KvosWAj&=1^;QRw'z61zpD4Z,eEed#Q 2rR#ͧ%ee%%ee%t25碻`F{q`[ΜgG&@ekӪ~_v_VuI?j>Ocȕz1<(=ϤIJ~u!UNo?HI%!w)Hm82Ѕ׬dj1tt:=%9G3ߑp2 B!C!@Ȑq d1D$<8X,C_ B!C!@Ȑq d82d2nsq.%q]zzɓgU7߿/|``A j׮]+--]t?߻8Vꫯ8p=|Ƞ6q#GL>]k׮9E%|D2}t"d?Ç]@C;nRSN]b-,,ܺukQQ{[ȸ+,,… "#GZΝCwq8 @0B!C!@Ȑq d82d2 B!C!@Ȑq d88w*R2@Ȑq]qqqqqq_l6fÇg̘f"##nRd2J 8nbxΝ..QȸnذalBR:t,X`{dw+"8e!\ }رcRF1;;;00 ֟5D4zh"i͆@ H?|`cXS^^^^^^PP˯X,.**>|8&%%z??͛7KR??iS(}q} HVՑR{{{ff[~ƍ]zfy˖-|Kh4޸qchׯOLLQy*꣏>/$;}|EU"wiCCC]]]jknnj8xH:D={ظܹst|VuĈMMM}Q@@_ummmFc{{*2 }U2d2 B!C!@Ȑq d8vՊߍIENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptQ/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/fitness.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xp(f ((sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpخsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpخtfilet@file:/home/sfierens/workspace/ai4r/site/build/tmp/build-info.xmltGG-file-file:/home/sfierens/workspace/ai4r/site/build/tmp/build-info.xmlxtJPK_G-file-file:/home/sfierens/workspace/ai4r/site/build/tmp/build-info.xmlsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(eppur[BTxpCXML @file:/home/sfierens/workspace/ai4r/site/build/tmp/build-info.xmlinfo  project-skinpelt forrest-version0.8 ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xp(>sr java.io.File-E Lpathq~xpt;/home/sfierens/workspace/ai4r/site/build/tmp/build-info.xmlw/xbody idCDATA Anonymoussection Anonymous Subversion Access p hThis project's SVN repository can be checked out through anonymous access with the following command(s).  ul  li 0svn checkout http://ai4r.rubyforge.org/svn/trunk   3svn checkout svn://rubyforge.org/var/svn/ai4r/trunk     Browse Browse latest files  ;You can see the latest ai4r code directly in your browser: href http://ai4r.rubyforge.org/svn/linkhttp://ai4r.rubyforge.org/svn/   warningThe latest code in http://ai4r.rubyforge.org/svn/trunk will probably be a work in progess. If you want something that works, please download the releases.   moreinfor More info on Subversion (svn)  YIf you need help about using Subversion (svn), the (IMO) best documentation is available  http://svnbook.red-bean.com/here.     ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpP_Qsr java.io.File-E Lpathq~xptJ/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/svn.xmlw/xsrcocoon://menulinks-index.html?pipelinehash=4584631998154307996tEG-file-cocoon://menulinks-index.html?pipelinehash=4584631998154307996sq~ i]txslttJfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xsltQT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xslsq~ q~tOfile:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xsltVT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xslsq~ 1ti18ntH/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_tOT-i18n-/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_xtAPK_G-file-cocoon://menulinks-index.html?pipelinehash=4584631998154307996_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xsl_T-i18n-/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_sr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(`ppur[BTxpCXML copyrightCDATASCopyright 2002-2005 The Apache Software Foundation or its licensors, as applicable.titleApache ForrestsoftwareForrestbook i18n!http://apache.org/cocoon/i18n/2.1tab label Homemenu   Indexhref index.html description'ai4r - Artificial Intelligence for Ruby menu-item   Practical Examples   Genetic AlgorithmsgeneticAlgorithms.htmlGenetic Algorithms in ruby   Machine LearningmachineLearning.htmlID3 Decision Trees in ruby   Neural NetworksneuralNetworks.html&Backpropagation Neural Network in ruby     Downloadsdownloads.htmlai4r - Download Files   Forum-http://forum.jadeferret.com/viewforum.php?f=3 Ai4r Forum   API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html Ai4 RDoc docs   Source Code repositorysvn.htmlai4r Subversion repository   ai4r project PDF wholesite.pdf   ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr   t * Can contain a mount statement as a sibling to components and locator *  locator  * Can contain a mount within a selector where a selector is valid.  patternproject.rewrite.**match  !http://cocoon.apache.org/{1}.htmllocation  project.remote.**.xml  ehttp://svn.apache.org/repos/asf/forrest/trunk/main/fresh-site/src/documentation/content/xdocs/{1}.xml   * Can use a selector inside a match. *   To locate all your source documents in a slide repository you can do:    ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptL/home/sfierens/workspace/ai4r/site/src/documentation/content/locationmap.xmlw/xhsq~(tE/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xslw/xxsq~sq~w sq~%\Hsq~(tJ/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xslw/xsq~%(sq~(tA/usr/local/forrest/main/webapp/resources/stylesheets/copyover.xslw/xxsr5org.apache.excalibur.source.impl.validity.NOPValidity5cIb39xpxsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xpP`Jsr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpS͋srjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpS͋tresourcetPfile:/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/t.pngpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`t image/pngpur[BTxpPNG  IHDRh6 pHYs  tIME  YeVtEXtCommentCreated with The GIMPd%n#IDAT(υ0OঞkBd#Nw-Ԓ6C!Fm'pR4MW#X}OAL78œ,;i꤮zBR1΅^Jy:(Qq΋f0q:cG23E!@D;"•Gĩ~ bu+<9S$9RJ`w߶rPUpHa`RR+@Y1J)|R\.vMӌ_y~? G]כn~}߇!<IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptK/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/t.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xpP`(ʻ(sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpvWsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xp@cthtmltVfile:/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/downloads.htmlt]G-html-file:/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/downloads.htmlsq~ KtxslttNfile:/usr/local/forrest/main/webapp/resources/stylesheets/html-to-document.xsltUT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/html-to-document.xslxtPK_G-html-file:/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/downloads.html_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/html-to-document.xslsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`ppur[BTxpCXMLdocumentheader+javax.xml.transform.disable-output-escaping title FArtificial intelligence for ruby :: ai4r :: download page at RubyForge body id introsection linkDArtificial intelligence for ruby - ai4r - download page at RubyForge src'http://rubyforge.org/frs/?group_id=4942 frameborder0height800pxwidth100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptQ/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/downloads.htmlw/xsr DATA_LABELS = [ 'city', 'age_range', 'gender', 'marketing_target' ] DATA_SET = [ ['New York', '<30', 'M', 'Y'], ['Chicago', '<30', 'M', 'Y'], ['Chicago', '<30', 'F', 'Y'], ['New York', '<30', 'M', 'Y'], ['New York', '<30', 'M', 'Y'], ['Chicago', '[30-50)', 'M', 'Y'], ['New York', '[30-50)', 'F', 'N'], ['Chicago', '[30-50)', 'F', 'Y'], ['New York', '[30-50)', 'F', 'N'], ['Chicago', '[50-80]', 'M', 'N'], ['New York', '[50-80]', 'F', 'N'], ['New York', '[50-80]', 'M', 'N'], ['Chicago', '[50-80]', 'M', 'N'], ['New York', '[50-80]', 'F', 'N'], ['Chicago', '>80', 'F', 'Y'] ]    @You can create an ID3 Decision tree to do the dirty job for you:    , id3 = ID3.new(DATA_SET, DATA_LABELS)    wThe Decision tree will automatically create the "rules" to parse new data, and identify new posible marketing targets:     id3.to_s # => if age_range=='<30' then marketing_target='Y' elsif age_range=='[30-50)' and city=='Chicago' then marketing_target='Y' elsif age_range=='[30-50)' and city=='New York' then marketing_target='N' elsif age_range=='[50-80]' then marketing_target='N' elsif age_range=='>80' then marketing_target='Y' else raise 'There was not enough information during training to do a proper induction for this data element' end id3.eval(['New York', '<30', 'M']) # => 'Y'     mach-dataload Better data loading   In real life you will use many more data training examples, with more attributes. Consider moving your data to an external CSV (comma separate values) file.      data_set = [] CSV::Reader.parse(File.open("#{File.dirname(__FILE__)}/data_set.csv", 'r')) do |row| data_set << row end data_labels = data_set.shift id3 = ID3.new(data_set, data_labels)     mach-eval A good tip for data evaluation  : The ID3 class provides a method to evaluate new data.     3 id3.eval(['New York', '<30', 'M']) # => 'Y'     But instead of going through the tree every time, you can take advantage of the fact that the method "to_s" generates proper ruby code!      id3 = ID3.new(DATA_SET, DATA_LABELS) age_range = '<30' city = 'New York' gender = 'M' marketing_target = nil eval id3.to_s puts marketing_target # => 'Y'     mach-more !More about ID3 and decision trees   href*http://en.wikipedia.org/wiki/Decision_treelink#Wikipedia article on Decision trees *http://en.wikipedia.org/wiki/ID3_algorithm"Wikipedia article on ID3 Algorithm     ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr title CArtificial intelligence for ruby :: ai4r :: Forum page at RubyForge body id introsection linkAArtificial intelligence for ruby - ai4r - Forum page at RubyForge  frameborder0height800pxsrc3http://rubyforge.org/forum/forum.php?forum_id=19341width100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrtEXtCommentCreated with The GIMPd%n6IDAT(cTWWe ?ĄD0aT40ZPP-/ p6IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptK/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/s.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xp(sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpNesrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpNetfilet=cocoon://book-downloads.html?pipelinehash=1857595903986255190pxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(ppur[BTxpCXML copyrightCDATASCopyright 2002-2005 The Apache Software Foundation or its licensors, as applicable.titleApache ForrestsoftwareForrestbook i18n!http://apache.org/cocoon/i18n/2.1tab label Homemenu   Indexhref index.html description'ai4r - Artificial Intelligence for Ruby menu-item   Practical Examples   Genetic AlgorithmsgeneticAlgorithms.htmlGenetic Algorithms in ruby   Machine LearningmachineLearning.htmlID3 Decision Trees in ruby   Neural NetworksneuralNetworks.html&Backpropagation Neural Network in ruby     Downloadsdownloads.htmlai4r - Download Files   Forum-http://forum.jadeferret.com/viewforum.php?f=3 Ai4r Forum   API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html Ai4 RDoc docs   Source Code repositorysvn.htmlai4r Subversion repository   ai4r project PDF wholesite.pdf   ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrgq~tXfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslt_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslsq~ #q~tLfile:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsltST-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xslsq~ dq~tifile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=downloads.htmltpT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=downloads.htmlsq~ Y#q~tdfile:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=downloads.htmltkT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=downloads.htmlxt5PK_G-file-cocoon://site.navigation.links.xml?pipelinehash=786357640368091306_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=downloads.html_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=downloads.htmlsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(ppur[BTxp +CXML  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You 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.  Forrest site.xml This file contains an outline of the site's information content. It is used to: - Generate the website menus (though these can be overridden - see docs) - Provide semantic, location-independent aliases for internal 'site:' URIs, eg links to changes.html (or ../changes.html if in subdir). - Provide aliases for external URLs in the external-refs section. Eg, links to http://cocoon.apache.org/ See http://forrest.apache.org/docs/linking.html for more info  The label attribute of the outer "site" element will only show in the linkmap (linkmap.html). Use elements project-name and group-name in skinconfig to change name of your site or project that is usually shown at the top of page. No matter what you configure for the href attribute, Forrest will always use index.html when you request http://yourHost/ See FAQ: "How can I use a start-up-page other than index.html?" site tabCDATAlabelHomeabout Indexhref index.html description 'ai4r - Artificial Intelligence for Rubyindex   Practical ExamplespracticalExamples Genetic AlgorithmsgeneticAlgorithms.html Genetic Algorithms in rubygeneticAlgorithms Machine LearningmachineLearning.html ID3 Decision Trees in rubymachineLearning Neural NetworksneuralNetworks.html &Backpropagation Neural Network in rubyneuralNetworks   Downloadsdownloads.html ai4r - Download Filesdownload Forum-http://forum.jadeferret.com/viewforum.php?f=3  Ai4r Forumforum""" API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html  Ai4 RDoc docsrdoc&&& Source Code repositorysvn.html ai4r Subversion repositorysvn*** ai4r project PDF wholesite.pdf ai4r_site_pdf---  ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr -9   CThat is: From 0 to 2 costs 5. From 2 to 1 costs 4. Total cost is 9.   chromosome-impl-reproduce Reproduce function  hReproduction is used to vary the programming of a chromosome or chromosomes from one generation to the next. There are several ways to combine two chromosomes: One-point crossover, Two-point crossover, "Cut and splice", edge recombination, and more. The method is usually dependant of the problem domain. In this case, we have implemented edge recombination, wich is the most used reproduction algorithm for the Travelling salesman problem. The edge recombination operator (ERO) is an operator that creates a path that is similar to a set of existing paths (parents) by looking at the edges rather than the vertices.   Edge recombinationimages/ero.gif   [The previous image was taken from the wikipedia, so hail to the author: Koala man (not me).   chromosome-impl-mutation Mutation function  CMutation funtion will be called fro every member of the population, on each generations. But you do not want to mutate your chromosomes every time, specialy if the are very fit. This is how it is currently implemented: With a probabilty of changing inversely proportional to its fitness, we swap 2 consecutive random nodes.  K def self.mutate(chromosome) if chromosome.normalized_fitness && rand < ((1 - chromosome.normalized_fitness) * 0.3) data = chromosome.data index = rand(data.length-1) data[index], data[index+1] = data[index+1], data[index] chromosome.data = data @fitness = nil end end   chromosome-impl-seed  Seed function  -Initializes an individual solution (chromosome) for the initial population. The built in seed function generates a chromosome randomly, but you can use some problem domain knowledge, to generate better initial solutions (although this not always deliver better results, it improves convergency times).  : def self.seed data_size = @@costs[0].length available = [] 0.upto(data_size-1) { |n| available << n } seed = [] while available.length > 0 do index = rand(available.length) seed << available.delete_at(index) end return Chromosome.new(seed) end     search-impl Implementation of GeneticSearch  The GeneticSearch class is an generic class to try to solve any kind of problem using genetic algorithms. If you want to model another type of problem, you will have to modify the Chromosome class, defining its fitness, mutate, and reproduce functions.  search-impl-init Initialize the search  You have to provide two parameters during instantiation: The initial population size, and the how many generations produce. Large numbers will usually converge to better results, while small numbers will have better performance.  L search = GeneticAlgorithm::GeneticSearch.new(10, 20) result = search.run   search-impl-run  Run method  Once you initialize an instance of GeneticSearch class, you can perform the search executing the run method. This method will:     Choose initial population   9Evaluate the fitness of each individual in the population   0Repeat as many times as generations we allow    9Select randomly the best-ranking individuals to reproduce   dBreed new generation through crossover and mutation (genetic operations) and give birth to offspring   2Evaluate the individual fitnesses of the offspring   6Replace worst ranked part of population with offspring         search-impl-selection  Selection  Selection is the stage of a genetic algorithm in which individual genomes are chosen from a population for later breeding. There are several generic selection algorithms, such as tournament selection and roulette wheel selection. We implemented the latest.     OThe fitness function is evaluated for each individual, providing fitness values   6The population is sorted by descending fitness values.   The fitness values ar then normalized. (Highest fitness gets 1, lowest fitness gets 0). The normalized value is stored in the "normalized_fitness" attribute of the chromosomes.    A random number R is chosen. R is between 0 and the accumulated normalized value (all the normalized fitness values added togheter).   The selected individual is the first one whose accumulated normalized value (its is normalized value plus the normalized values of the chromosomes prior it) greater than R.   7We repeat steps 4 and 5, 2/3 times the population size.     'images/fitness.png   VThe previous image was taken from the wikipedia, so hail to the author: Simon Hatthon.   search-impl-reproduction  Reproduction  kThe reproduction function combines each pair of selected chromosomes using the method Chromosome.reproduce.   The reproduction will also call the Chromosome.mutate method with each member of the population. You should implement Chromosome.mutate to only change (mutate) randomly. E.g. You could effectivly change the chromosome only if:   6 rand < ((1 - chromosome.normalized_fitness) * 0.4)     example-run How to run the example  qYou can run the example with "ruby genetic_algorithm_example.rb". The genetic_algorithm_example.rb file contains:   require File.dirname(__FILE__) + '/../../lib/genetic_algorithm/genetic_algorithm' require 'csv' # Load data from data_set.csv data_set = [] CSV::Reader.parse(File.open("#{File.dirname(__FILE__)}/travel_cost.csv", 'r')) do |row| data_set << row end data_labels = data_set.shift data_set.collect! do |column| column.collect { |element| element.to_f} end GeneticAlgorithm::Chromosome.set_cost_matrix(data_set) puts "Beginning genetic search, please wait... " search = GeneticAlgorithm::GeneticSearch.new(800, 100) result = search.run puts "Result cost: #{result.fitness}" puts "Result tour: " result.data.each { |c| print " #{data_labels[c]}"}   more-genetic-run AMore about Genetic Algorithms and the Travelling salesman problem    (Travelling salesman problem at Wikipedia    .http://en.wikipedia.org/wiki/Genetic_algorithmGenetic Algorithms at Wikipedia    ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr title FArtificial intelligence for ruby :: ai4r :: download page at RubyForge body id introsection linkDArtificial intelligence for ruby - ai4r - download page at RubyForge  frameborder0height800pxsrc'http://rubyforge.org/frs/?group_id=4942width100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xptresourcetTfile:/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/c_wbn.pngpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`t image/pngpur[BTxp͉PNG  IHDRh6 pHYs  tIME /tEXtCommentCreated with The GIMPd%nCIDAT(푡 c.ZI:HL* ^UfVh<LuI[5IURfnUIi%ŞIENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptO/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/c_wbn.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xpP`sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xp fsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xp ftresourcetVfile:/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/europe3.pngpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`t image/pngpur[BTxpSPNG  IHDR} bKGDxh pHYs B4tIME !&| IDATxyxT KS bUY BI,[$B"*DADa)`(QqAX JVa,wfry|$ܹ,gXV+!88_D0aLBR !$ DlWĴ$i/͉c MA \Ԥ-#$(SKb|8FH A؟QB@lLB!$DGn0 "'g1:ft~]47=,:lPw8Y@'4G03\9هP ! Zk%u܄BHѡy D@p{2!BBL3&T&0R f"lz.ݣ. D`PZ|o@O#BB 9_v(݅P  9O5*:jBpq9hA !!:C~"*}v"cY!+ !!B@O nM$.Nu99BOp ! 8@-1'BGH"oL !!R&=1o@+d !!* .!BB'5zAB!$D7J& Ӕ(O8ݜVK3٣D+Q++~zR bG(r"Qḱ:bt&p ~JcIJ &,AƛvHH +teJA$BhbD`VG # #Zv Λ:BB(.l!d+YBLAf-rB4BZB(("{EBdq\K(|FBL-H(%ļ+QiE * &@ʊ^] !:B"hnnEA.B#S#!D}t}0Q⩵[a9&@^ ĈZz ё#ʖ9 QBJ+q1K 1J 4)tD [w(ń h zr!t&̈́0Ԗ0!1LnB!$DE7+B!$w;`{C 0&1AB&jFt !!>E#A=(]8@tC?:JB(Z(dP mB̅jZ Do">NЃs|B7ke+!BBQp  [x "Bϴ!P.nЈ7$51-NTF⧤Xi֨ӛ@r'j'p"tTZhJOH(x)cFQX_ ,zJ B!$ |6HPn Bƌ r="nT 4]ҏG(&t: tF5K-hQThp5+-(r=dP  -Z6}N%vt} " ɜVb(?ocR~dbJvo 4c: !!Dj-v]kհaCP j@B(P C%-#uPd?v !!#J U (RBHQUt(< \nNݢADG*ZʼnP шĴ$F!BbNc@&#$ X.A q9D&PHf۬ !QepYˍ?)w{iO(FօhԺ>'w]6q.5a4n}+{ Fxܹsꛯ3 +Ͻ"Х=7 7gAdd$UU/??y&&^3k,ع)ۯqQ?)4Ed(1]{uéy/tcC%ݤ<{QQHJHŠ5+дIS׳X,x鹥9WGgEuM5&7=_ܙs0[#** a$%$yTWI&ub|:B"PeivL3 7G[A{WK='dP,$48FH' )#5%OM7*5$6,tf]!|X&O]ޖH-#7/,c0BZE ~Z祯tzojO&Gy{OT1$:BB:&ulN;V.8v* u+Q؅z-6uG]pԄnn(!wP &]D zeiQ@_WH7HGH8C"T=C:B d0}_6ղ [Ri ! uj ppvpHdkE !Q}2]rMZ3ڥ- 4_Y d78MAW^8!6U)3E8{T 5-J!d-yabA*vV6)t+ Zhi<4N $/=mߡ-}4JB V<-]ڢ$N:D<#9$T#ܧ.E91#C[@qIEy!/ 8ػE.Pnq%BAxz :9\QL.'ɨ)ZD<ճJ] lWQHLKIPG S8KyvP$x0[UcҌy֤3 ERE9VH!4R IcSb(g`*6ӳq ='(Q)CYXδ1Yr6E0t7w%Oefax#9oiOH!ME (D4Tsb &g#$T)[eר6BDBsJAS\anP鵃?,HeBM+2Z=Aْ7{>-0[YWD)թ:blBkLsȂ-FU_@HyJ!4R 6=gɵ IyD8|WYP;5J+Ciiz,zI-7еfWTYktn"ig(ˋyܠN, "6i+Bu\k]8F(KRbIaP?5}@-S&(!8.#jC`(ۈD/b*v L(u\jV HtՑ+kݠXcAY5‰iI641qDSй'#4G}CEff&L6m`׮]/^ge^,dݘI6@֍Y{/:bڕ8XXfMa3sܻ62e([T_ U a4rC++ >}54b1n8미Kh"{͛7_8\z8y$vݻw#55ppAl{w>z} ҲEK<_p77VGxx8Nu*jL`S#C.oЈIpyα7 h}h(P W8_zJ?Ocbf|j{ƍs]w݅F!..3LExx8{G>,#@XX8:upCzF%(dQV93H a],/SvoՊ9;wW'*;lKQ;|{ Mį ©N I7K;s>ア@ { C; w+*+o7/OѴISiߵGW >+;İonxI"^Z_}2Hqk"k+딮Lց#\xہ"E[pfB}}f<04=()-E!Q V]}z$tiSaɸ9{eL>#o'& ״n~(h7 [h[BNͼ}cп6x`Au^[p0 {>݃~/~Wp8ohЄ"C#p1A.봷XD=uw۟۾fξF}lՌ">1;Tĸ߷~CV\+(,@MM )1|xf3(++lh_WJ u\W=x!a_L=#q L<25kv10G?^-Z y x a8F3rzeJc)dҨQȧ;y1A x8`Q 7HS͞E/Q3 k__:\veZe+!&&.`@! ޖ8 I3ٻDtZ }}1IF?_\X?M=^Lb͌nԨ15eqLt/+´)b?%̂s'2d"Wo<61ebn0\P]؅z*K'{qc¸Nl7`X`cb msG{5~ۚT#h $zy`&M⥼?пw###g'A:B d͑(hpjyII &N KdjaW._R j Tw.ޥlʍy'P\tR`_ +~E n8c, )3[4oV]OXq:bw9ʊWp٥aga?_ǾΞ> KuŢ' u^I$6gs}HD8ow (+/GZj>ٷ]킽"N*6m[/A0{,v,n̚yޛ&`_`^[1{,\{͵6{:8z({ys ,tB9O)-}1k۶mQyQf?c?¶wS[3guoLW#:*ڔ %٘Shw+mW4i#HINA݀bH`@iݺt/SN81|)=Pntzg~5B}}=ߞ̆p\#Wo|#=rcܥSFBn4&ܜ=^߭K7ع)ۯqQ?)4AKc7("af(nq.8y$.D4noy#- j,\KǒPp'Qw,ٌ쑋[l-K6;q^]QO~}!o/yZ+x4iՊP]S9 SXӒP!RL0 {A8߭K7|g.LGJrw'~W^~Պ"HG*f,vMp\ٳx֫@uuNf?XGpł p}g$㑜˗[nh6fޫGO{5Llse7*4mZ(+/C^Ѿݥo~|8DDD`Ǯ;1M4!-5-F#QF4Eae5~\_q-ZY믿lk4m:vmzmڵq|L3DEFaRvMT zsjj.r +qהIB; 7Fz4kRPWWԔT@tT4gc,_*fŴYsuM5&7G݂3{~.pMѤI\:TWWs|PAQ ,4:B5Z2u\5u^ REE*=9lYdfg!Mcwklߴ 9\|&;= Gly#C[Y W"c󛛰-xv"╠1y >>+A p&6!JYL,zޕ?|1Ҟ*qX]v{'Kˑ5Ӧ<ҲRdfgacq8fM{PZV pƒKx&tDi(Z|7[)gwԗ(!fZtm +#,(,nZdtǵ\Ek:{PZVg~=[6x 555:_}.l+Ͻ}NPs--(3n4z[SW 9[#ͳ-n~c@t*9g'g".ů{V> %Q\"ɷX u6\L{4۴`w! vEŨ(?s(.*vWۓtEQQQHNN֭[222Cn,Xx~ w"%={KHnv&Wk)q>eѸsxx&<stA-zjߟ>}:Ν;cȑ.0g\ akkPUMݕb?%ܨOrg'*޼Daq-wډ_x@3{xQi麢oiu3-Yn1z(ZX\'ü063)=Xkd%Zȁ$%Pq&cjpX O.5z¾t"um}-tqE'%ҹh8!( j%@ʊ?gdAnZ2k=O:7ozY Dz[PٚHBGHkC^^0aׯ&TpQNW(Z9OLͮBvӋ _#Ə?Q*΢+#4Dg3.mo_`8SŒ~-{['h`cB^nI/O(@9*]bſ93{b ˍQmIɗ`z$7jDg56&Q) ,Cm%Bg.rcA%x=7,l8144ƣg 4"ꁿCޮ+8e(j:sBPeuf{[QwlʊsȨfx}@ "¡5B`/cH `ЀZЄr<_y)FztF؆˹/u7QEP,&P-`fwI)r3|?}SqyXC#ninQE_@=ͼUx';DyE96jQУ *nL- R sB_kF#*+t,ixJْB\84 oښZ {X՟((A zQxBEzC<PNm~sӒ.o-L*80 G;#rS=C!Ԡ9");{oOB|{v]V3&X^^6;xq̚2P )=7mC-̒Eߓƍc`=bx}}U`GBL˽ݿE'F+:u] #r_4O_,>Bh"S*K %'J,{Zh{ e[QQu-;WB N#o-U8:~ ]Yvyo_oCXb [UU>_?XXj<:1<#(--w9r6qxg˻8_w> )R^ۃ("HYuns01[,xVk%bbbPybK΃չ|w◰=xؾs^rGD˯Np\EhX?'wG>~Mo *=EMȸA(D!|-/.:q(?`hҤ R2#ݮ9VKKK7֢ {ƥ.;ozZjּpiXVTUWjth-bZwdFtN#3*%o3AòQS[h"|׌FZj6uLz7pNUW^iSSf CDDs'.Lҩ$գgJs:N(9NW 93hkP(%*BErZPCAC-Z O OF6x#CrN_n1J !JܓARe"ֽKd'L.jj9؉0~ƚAg) lډlթISSpf",%*+c@IiH\_RĀF =ZSB,@EEIsVoƪe$qsR I羍T=b߿XQ9 n`DِY0LtDv!\k;~;Ļ5x`%)!6WmoܽµZu& )/vjg؛qH~XB(t #*%8ޞ_CAtOק.#4^kP3+u\^/O H4M^(DaR`m7ѷbUti !0@7%jZ_ # _Y| 6m@Ee-[ӏ?x _YWwvV!O(Fb4j]F 1|f!@ee%X0N !P RE}ǘ`Ipnht;|-o':;b]lEEF!K7{ntnH{Rz2 -[8^4.|) Z zPkj;og [D={P =5=iՊ3x(r\*\;+, ^zn)~;>ށW_\yQ?yVxGiߓ}>J$z] EEe9 fEUu8ZwxotwO?6Av 6 3; Sg.c'~<;߄8cޣ lco&bFtT4gcN덾}1m44qƿWxvH9M;uy$Oixb<}`QshԨ|*|3/b*wx8 xqxgMʺ#XE F:qݑxju{:ʓ:_qɠrTdb C;4mΟ?߰†{: N&%av}xsO?M$(BHԍ(Etށv9wU/I /X2ŜysonxK5kuG>ٳQ[[|r7)lM],,#h%r@n Lΰ'1&ݡ44#͛IMvLhaȭ7~нxs]?^}sRw!%6&ikD;x0b'"A%[v7ߡm]޺fφv~Ȯ0=}FuTz+X\\ٲpa{yIc'!&ܣs"ʡ}tPo} RG4ZB֢⒅ј-!͌E(kw_rGoTȉ@BcD76% *gT` f/QrEK9FlynPtT2X Hw&ʬ[_ ta@):C`.цO, ?ag/>]޳Z:2>F]G.WeRޤ9Jpbh7$/.>q """pÈoWtztd/CpA= ݠlE:ζ"x4>1-{nۄ\NXv%n;G}}%Nc(y{q!yaTF(`hy%RBhbˁҎxdyDBH7h wn$8f0Shܸ1-Lע]zV+PWWP@7GAߌ.Ԏ]:6*&h%Fuz)BB=o-Eg_9c#z'p:~ՕWaڔ1fADxƏݒhd9999olu\+_@SCC_[5pS內O}VݧJ4^Nͩ}ZIZBoPؘ#4;U% R|/D"~gVs%Pq hdGDtT-F\33PK{&xrJ΂ =$K4P4Z fEOVۢijzF!4aID bƮQc47jԉ}S'hԺ_թfEş+b9s@/A0E Z ;-#P G(o̱?s,;#C='mdhP8~}Bd=;vpĵs|Fo?CJJ ڵkN> łW_}2d,C J]XB(b\bhJ뿳5ߝci?m b.̌6;> }oħ~Çc(++sw)|ظqLBQmqJ EuzZctTN YiLá QV^O}^|~/a͚5Xd ӧOGV555!]ghE.BHB] "r@0*2 I IXf6i{3ϝ;'6x?<<EƁ9Et]ܓ]fb ݠ/1$afXn5[~9*8cUaCe 7+;` Ww6x'FjJ;184g(rrr0l0lٲE@f0 d.y\,|n!*k*˩o|('wh⢓hԺuguu?hRM!޼DR{}íq@6>!n{>h^=0x` 3; SsÆMq3x~s~õexQRZ Xz v܁CHJO} +Ì(/)ljx3GUWb!BAI;MH뙆'CYy9> F~Td$?PSS}!g1|.?xNO Sfth\ݧ %(Wog",ĵ@UMG7#gE3:Bo'BAםDa<'DQQHJHŠ5+дIӋj <9sʊeİل5Ew`^v=KgW\ĹJ&GxxtX+XvHpx ;74s'^QYo~}Q^a`QU]:^կ>xajkeVE4[>^=DO*͢"i<{bAk䢐=>(Ѽys<\4k05w*\"%z,|]k,a7okWm ]aڔi NrhqXP)&"Rkټ,YQ~)FօyXHN#5%hd9}3bڬiXԳ{1쎿b ۘ| \4 V <jzۻ6.oG[__~ /Odfd:^3o.F?gao`0z"֚7&ox "22n݄!<<&žO -5-HYP~jXjwuօsʓܷFE7Cօ P7cVGt'!P9}4bcc]^KINi8wOi(MonB֍Y8, ғѪU+Lr ?|MmFkz9b1-6 t!0wc>7)ڄ-e8TqQYqZ?m 6nÏW^~ְkwk-ZPuiɵBR(YeKvuDPu+m-C >i_W#*2 Ww{Aߌؕݤ-OE]}.2XVTUU-Z#&PI1Hw_$k&R'iVߜ9sPPP?'>93ysr+ƣ%UW^iSK?Ndl.lب)悧OhX طr>jgo^"bLB}Ei3jvq0*B!Tk]PC=UMQ]PNW0R)B~X_GG]1)B ƅBE`EЈ36 @F\S+#\O䮸x6ូD&MH4Є@Ew/5y +m^3]^l7-~[FKQ CΕfDlJJJm۶11 ,R7M ޻r-%@z(0VsAo8O)YѡCkڵÓO>blYs>ibZRGC9/,j&s8g$MOl!bƌL<6uuw$Dވˮ@N!JGH$rر^}U]v?~MX]wv܉VZ_\r JKKQ]]X<32e ЫW/!??&MBaa!"""G})))jEJJ MaÆ_͛j*]w֭݅[111y檔-3AE0^r`J=I?zozͱf,Yb;L]+++gL0QUUo5j~W|WTT46c5;;ӧ;1ʒHOӘy̽)=h!S`Z,ǂ ej"##Νĉ0[w:w>4n^{-̙9s> $wxx8,oC)+ʋ֓%s|s~+鎷ҲyO=_;_ !Qvը… Ѹqc4nGFNpM7!''Æ Ö-[|ʕ5j,Y!##K,AC% 1-c0{l[bƎ9sEXz{x?gcҨqD8}]u=Y%i^˙Yz$C( !EUX1@u8#+!q f #Z 0_SBkZMTŮ vI t6"x1E "AG`GtlP޿'S !:oFޞ}mgC7 (,CN:hn0{Ytؠ p !4rC WN!BBmbZIP !1oA?"B&BHE9mBuj"#ŐP zmF8\0fBJ=J\ BT ց{3zb9y.$BHX(yTWgU1 Qc1,DP jQck#Ⱥ[ aX!ŎP z[ǠLpmBu%r8-$BGH!HB2Ĝ$C!!B+@KG(&~j Hļ!BBnyC(h( P !*9BktBH n0M ӔO8:ܜ^KB#% b 7*~R5+%XN7 b?""Uy>bڂeA)_0.0wsЮV"xP 17Qnm\G(XAz /7Q1BB$g(F r3$BBt&ňC5E 4J !!&sz4B(p^^ JsB 0v R0G#Q (rǮy!JY"( Q]ńĭlBs5NӂP)ĪHA"Bh@ #8oMP  &!Ő,L(:BBD(J(R[D41!sb!B(Bڭ:)Lj X*ŐPS Q[^B :=!zV.HuH˺F%f \WhAb%w(`K:B_[ T='ۄ:AR8B) ǍC3#d#t_LRbZGh4a6D:DbZ! , |V "@3˵6H!!,AԲcp ,tބXbDqa![لbyGnb0k;J "nF D}TkTdG@(#XB3bi!%GbD`(!%\J+RPa0SV ,@AkLs/B(]č|tBqA !cy=HO 1!&rJFf f$rMKVQ(WzU5ePJqN#zѺC)&PE >:nЛ 3!& ,xVrl| !!A] Ȅ !1 9 $DY˜Č"hs !BBdK !BBJ%8fpFQpB!$Dc=ztP 10P""X n3Ds)1(3.a #$Do@.VB(HB!$>"dB!$D 78iCC8Aݠ'oI kx ;%BbeYhϡKhO ‰Pm*rP )R? 5#$\!U&BH +l !8-]!@#$: 3wAxz6D!!& #$DV 4]ҏG(t: tFuK-hQThp5+=(J=ギ#"@@Z lj)BH(szgsĥ&%z2Ē剠4c: !!D-v]հaCP @B(P C%=3uPd?v !!:#J U (RBHTt((BH4Gbv<K5Gh 'RpYhDB\%X8zмu3닧,abIFM,Gp0.\BaQG+2Du `Ot vh|r:%/|mxsRldխkE'(F)3J[kTY?Ԏ0QîQ 7Q8M]~|.W +g7?"A~<#P9ym~zh٢%JKK$~Z@cYzu#-ӌK`U0u=oKq"քc0}rP)G55OK7*5$6,*k:2e֕kY2q2& 3{EPw^Kor(BB!4Iy{!-,O'E)ցc *t Sƃ288:BA3h w]J9ϯZ9`8C=CqQz ,ަlt EP\`eOZ3Q^EIPv&z;6@F9::,$׫['wPM(rlQwe_[뽢k X VK5-F*KXo)$ /P[]7 t`˖BH4nZ9SIϏRFBoY5= Л; RĔqbm1#>@ձP!8Z2=_ı/8r'RIA~~ƞB14 YB۹lB_Au?_`Q9d 0V JӋBGHt5)l0m)D V6Jm8#ć]ccK#AFV)eذR V+Z1S^cѢQ€=n|=FI!$tŠϔT:HE團+-y!tA/ Zo| Z8= Ŭ{J ?<}BlIOi ONbB@B:BBdzjbjY] WtV^$j4, )A:iTzY &vH!EXɴ41YJupAu׬^(PkY[Ur\uUrRhފ31~c '`+^[FHnStʮQ BDBsjA[\(@eEJ' 7B(Wdz^%V%ov!`{ |@eKbרACuo]cRSN [Vٍ*~}6B)Pzk[Zq杔{R6(NV?e]wr]6!="R%FVR/"楨2i*}]E͢ *ꓶ"O $dz!JkvI_,) >rd2A! q92. +Mmrb1eBP eVUB-]Eu5Zc:AV0UBvI640rHKеupJjV.::Pz;wp&ޮ!pj?+1B j3Bc V'4' +I"K7L+S+[o_~Ao;+Yf_~HKKCvv64hݻw;?xbL>M76OGޞCld t }dNt/{֭¡#yY&:Sg.waP4T)AR9){VT)IW(?54fZ=0l0\pǢEծ]}иqc/hݺ5ك;;mlSu9/@AӏcG~IP&qaߞ0|P-X!CoB`Pvp~]nڵ8uڰaÜ":j(TV qqqn7r,Ñܹ Eg@_n|{cR58-Zzb/7WyKοv;yQd'Ə̙3}:IOWytk`"jW^raa&{GGE… ۯq@@- 9-3\|!VҰr1?=RSRq`~]~ZwhwWy]N1/k|~K1I\J[C:BE0te!e\V;jEBF .I]I&-_nQ@lX<"##1 }œqXr/ƌ !**'^_<Śc;|K#TmB&^ t4"#"?8m>FԭSװҨ{f0֫6oCXRES9B%ObRpk%PV@cNb/sh=3P"htxըuXSn]/`WPn=3A ]2r,wD}ߓ{MHb.*.S'`MJl19B C=C^t y{aպUزsTVVm6= ǏAߌ>=9zwK0\sm59x7++[?{k'7w#<<G F\tM-?Gp~<}m΢:B E^wq*1.ESvvnŋQ^=䡬 r:œ>% QXX-ۮ c])EBh wԽsBgЃp&=e5k#p˟ow^Sbj mسnsc s1BGвy#q^xW5ҩQ`86?&? &MEߣ6SֽhҸ v;JJJ]ӻo#&&77H!oˍ VqQkgVV sQ٣19$faRDil!!4tgcC sEut&rA$x3joqw}Ie_ ] ֨^+|knv٨(nk #$^)**„ tR= KicW_HAԈkD՞d9Pj-5P@|'r=*&Zhܸ1QfMdeeaԩ~)))[oUE9yq%v{ԗ;F<HMwEkw?b6TV 0`Xkk1R5য়~>}}AII ͛K)0ubbL/ѳ5Kп^{On qhug+9a)Pu9m&M`ɒ%۷/Ν#66l6}y4ƲФq, 8v6ߟ铧aѺek,za\z T=;EE8i$uL}hug+|yKtʆ}/:w铧9{=>2cgeGVG#kP?5'OÝw܉I'/]'O7^J7H!ԋ ϟG~~8α~öO{kGh?3 EE]˒ B4?7lY|q$&$MlF_OFo@Iݳ7 򑖑cr~o:u| l݃/6@LTVV:mZѯqI棢G DB'H߸c]/|~g֠,KyUH-p 6C;Nh٢%Ν?_Ō)i& =r .h۪ ?1zBߌ>6`Ǯ[>!N< D:A zC/;!n-jl\[ǒPpY'Qp~;ꀆ дISϷz>vJJ;jp Cx{ocFF\pb_oӪ :vݍNHLh/?gΠY[VA:PCڳvq9ɓf/Ǘ_{y_vwi.JZHGB,]mZAڵ;tEkr1?=RSRQT\()-A5ܾEҹ njo ر 9իWi1)F#QG4EauiҤ n&tcƌ!C\7gϞhР8'Q;apFσ="fR/aTh!Add$;%9u tL] 2o`&^ԔTL6J>bSc0~x<=n|Ϸiw4իWG-QZZAE-NfV0-g(Gp**jV+ KHHG\8>ؾq2sU>p#6 _V.1c DVL(j&1|2D;VW[m⡬ETVVR%''eÄg':[PXzwua㿐Sɇ r,ZD&l\[*pMUrمaȑxQV-E+fH\FDD8ni |_)8{'"!f.:BlNoex钳NIz-J?'T^HꘄEee%njtG-pk@Uh2U_dj`(mٳp*맓OSS#<614oF,B(@TMW?qrT87w?aÆʕ+WV^Zj!66˗/3<Ν;cÆ (//ǓO>~<)|aJKKQvmzv&j֌ xDn~uKn]ݮկ_3}fJ !l:t(&M71czj~7p ;~ç~ nZ͘7Y#tE|v&'iX[AYV)f4B=ݠzqq1<={2220q&O유QVV?^Em;'7^un4.+Ղ15O̞VA 5Z~GeLxQRR4׳}{(G $5Z]YUDrBj.c~8zGzHHH͛ѯ_?|HII{mڴΝ;cUo^GjJ*vrM%PбBfr)Fk+C&`,BjҤqqqطoV\CbƌS֬Y'OF=ТE 4-pL;3[,CܟݵV߽FJV=[xvY #,Rg~֢'MzϠb%3m}RgKvzT66uRj]J )Z{7 eU2+>Ԝ?aL!4ST7\A0yofC¥1)_kr]6OƫzLc[AR){֣vټUS]δy)@oLB=ZbMvmJ 8ziS- t-)"+ 6GRUg-6&QQ) V:.fs9xRQ0P=t\q*1NJzB"[tpIםݷ03YVprvQ܆ڝt}6~gY%r Ԡ`x)ϓ8Bx[fB)ݢ-}ˬwvjREBdR0I=g(F}>j|{BcF *{/aⳓ7L_F֍iUu+ma#_( `0*KHHG\8T r< }ttU;s6J qnPsPly)9.)Y!#"4.sQv-H;#rSC!ԡyBzngC";<>::iEZF:''`m[..YDFFG8|^_n5>߾hۺ-&eOt_3*q~9"[Zj'Pu?Q3''5m__Z:uQPXXz|ibj8 u=H6nވ+!Z8—D;ZȧU(Y`ט<>|>~ [´^ ]жu[ bֿ%%~:R̚?} }Hy~ NL#dA6UZ }fÙʿBLL ._{K΋VTT}v7?}>ځ[zDD8ni :u8iAŕH!$&GWĔٺǽ _+_:]:wAF1G^OꘄCee%nn|3v;JJKPZZs4 \?ȉ܊f18SfnPK͞3PV^Wh"|s*Q+:&}'0fr<=v5 ')f CDDO9=0ȩuJgYY\E[+lvʝe.'5z;,ԌQPCZAC-"b%!#$BְK|QgRs"wQRG ͐'"=Vb.QN.1^oaM;іX :B:"x[UpRP dq0sI٤Z4d#J2gzf5'igKX${N $!|r݇:o[ >T^ץ5/.j FMv9 Ԫi+(I.V|gb1'HAL 1]i"Vް5j~8zu硻 (6V(B"7P0j@% \2!n}z [fqs" "/^Bk؁ҲRDFFQ5ߺxw9DA1$Bh6w-z3"O?رk^X8_։ RSN1Hwn߮&"6 7E 7ѭow~q''^DŽ_P}}`զti !0H7iv;{x76йC,[z6n@b֩?xk{G~TrZnj ˗1w9ݻwǦMF7/ŶO^ݺA}_1Ҳ2|GxvTa˞g/ !!-Hv ;!w&|۽"̽fWxcXr4 \={s͑R`(Atr1?=RSRQRZ{ҹ &<9ߟ0szؕͪuqxp/]r^߰q21~63cO B}pq|n˳u?Ǵ !JZ薁~3% RSR1i$5/-+ƠWm9#u״Tl޺w;{m~h?3 EEn=7ybC(,*r~ԿOn5kp 8aBh2U^ݺ~|v뮟qzW`=@j&uJPXT"k`5( ժU:_))oo _fVѺCko_~(++ӥ; A{G"ŹC%,:*mrJ4jT}W^Za}T맩]'%cc:辣HHSy&,BLQyEUS1cLv! EpZ5BC+zg^={av}=:rlވo»+oA\%vr;QzAAs$YX.6l܀B6!2g]"o@au5ZϮ=7?9zQfM䡬 p > >zu":* l™_qֈeM nDn8P)xn9\'8ғ2p8'o8r rdϷa;թS_^ =v ;!w&|o9P|y3wtRQjpuDP0={E/"22Z/HuCEe4nݎTT/#5%مzk[U=%}xK3^nVWhrA!+4I ^;wLիsѫG/6Lʞ< [ >1kԊn70] 33ݻv^S徃{ hZq(o 7n >S8aAg#UKPo!uLnЈqbal`!8R-XW-)xR~K?An DR)E#^]f/ۍPB!q?ŕhJL iUi`1B"ufP|1`q})JinQ !$ClپzQQIBґ"H!j ,݁JEQNP)C :C`!5S]oaox~C907s uQTF[bw9ʊ8 ebI(ClAwyxjL6$}o7S* 7\؍wJ7V^F I`,0v8kW/G|r.^T%0ncZ?#Ur3 *}ٟϢft ƍ_5HIGHW(cǏ1c99kkݡ5ׯJlb3X9ǘ ԌWǪ\Sکv/񊎐xairv~<#Ĺa<:|0/_GR$$8(o͆ań_P}axٳ;Ty+ŗ5n(" :BS#wf`ZJ*6o݌g[qo6;$w/GZF:Ə} 6 /k ^*ݟuKs^B~A cC|r;4^5-? X6ќonH(tB) sCaQۋA^¦-p3r;ɝ}~",uoY)c zKH?Zπ()+AZا)HLtT4cڕhtc#Ԩ^w`c3lŰ ժ]**? k]k` ֌ Ee`˶-l𙡜*ER0끟oBݩX~ Kzb|{PRZn \K5 tQmY6j zΚQRl6 Nx Gdᡬx/x=56>e @aa!`պUxx@<5ڐJ 3`xEGCaWYDjuyI׽ LIcFCĎnkEBF .I]I&a`'mȠ/`ѰҚ2~]۝/UVV /RҜg̛~O:_"f>;zCC׻+aˆ0`8rx?I$A9ej'vPt'sޅ3^yfBbb2%3;wnEQ\w[jTc~:>͆lx+ի٣пw&Nx ?luWcC QHYt+_)t0w @g\a8ڴ6l?3{͚6 \pϷa;թSGץGs52l'NĤiQ|5koG\]hFBNI81TTVF7э!;}ZBHEDJP63f@-0{lv̘L._(DGGsxW0}tʕ+ٳ'-Z 4ov/_ƕ+WKHH͛ѯ_?|n㓞%*-˙41GoaA0m 7ߌR_Fdd$"##͛W^DiӦ*_j%K &&RRRdt+laӧʕ+1tP̘1u5k|cLL9pF E==n2U 7O# P i>ʭpE{ax \̣П >Cq&a0+@v_1==Y^h>T}&=X Ә$ieRUT踌S+&]!ϡO]RZ8aOG3~-B\1@u8#+U q f #Z 0͗_SB4kZMTŮ vI v6weՐ'B]F1E "AG`G lP޿'S !of˾smgENHY)B!TMR !pAE"H$BH&D2u8'H(B1$V'!U!!BY@ f G!YA -jnzL!BC!B(C !)rABZV )B!R !\pB!!bU?rPm&'IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptQ/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/europe2.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xptVsr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xp4srjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xp tfilet?cocoon://menulinks-forum.html?pipelinehash=-5085751048703191687tFG-file-cocoon://menulinks-forum.html?pipelinehash=-5085751048703191687sq~ i]txslttJfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xsltQT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xslsq~ q~tOfile:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xsltVT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xslsq~ 1ti18ntH/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_tOT-i18n-/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_xtBPK_G-file-cocoon://menulinks-forum.html?pipelinehash=-5085751048703191687_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-book.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/book-to-book-i18n.xsl_T-i18n-/home/sfierens/workspace/ai4r/site/src/documentation/translations?en_US_sr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xptTppur[BTxpCXML copyrightCDATASCopyright 2002-2005 The Apache Software Foundation or its licensors, as applicable.titleApache ForrestsoftwareForrestbook i18n!http://apache.org/cocoon/i18n/2.1tab label Homemenu   Indexhref index.html description'ai4r - Artificial Intelligence for Ruby menu-item   Practical Examples   Genetic AlgorithmsgeneticAlgorithms.htmlGenetic Algorithms in ruby   Machine LearningmachineLearning.htmlID3 Decision Trees in ruby   Neural NetworksneuralNetworks.html&Backpropagation Neural Network in ruby     Downloadsdownloads.htmlai4r - Download Files   Forum forum.html ai4r - Forum   Source Code repositorysvn.htmlai4r Subversion repository   ai4r project PDF wholesite.pdf   ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr links to changes.html (or ../changes.html if in subdir). - Provide aliases for external URLs in the external-refs section. Eg, links to http://cocoon.apache.org/ See http://forrest.apache.org/docs/linking.html for more info  The label attribute of the outer "site" element will only show in the linkmap (linkmap.html). Use elements project-name and group-name in skinconfig to change name of your site or project that is usually shown at the top of page. No matter what you configure for the href attribute, Forrest will always use index.html when you request http://yourHost/ See FAQ: "How can I use a start-up-page other than index.html?" labelCDATAai4rhreftabsite Homeabout Index index.html description 'ai4r - Artificial Intelligence for Rubyindex   Practical ExamplespracticalExamples Genetic AlgorithmsgeneticAlgorithms.html Genetic Algorithms in rubygeneticAlgorithms Machine LearningmachineLearning.html ID3 Decision Trees in rubymachineLearning Neural NetworksneuralNetworks.html &Backpropagation Neural Network in rubyneuralNetworks   Downloadsdownloads.html ai4r - Download Filesdownload Forum-http://forum.jadeferret.com/viewforum.php?f=3  Ai4r Forumforum### API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html  Ai4 RDoc docsrdoc''' Source Code repositorysvn.html ai4r Subversion repositorysvn+++ ai4r project PDF wholesite.pdf ai4r_site_pdf...  ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrgq~tXfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslt_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslsq~ #q~tLfile:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsltST-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xslsq~ q~tnfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=neuralNetworks.htmltuT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=neuralNetworks.htmlsq~ Pq~tifile:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=neuralNetworks.htmltpT-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=neuralNetworks.htmlxt?PK_G-file-cocoon://site.navigation.links.xml?pipelinehash=786357640368091306_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-selectnode.xsl;path=neuralNetworks.html_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/relativize-linkmap.xsl;path=neuralNetworks.htmlsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(ppur[BTxp +CXML  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You 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.  Forrest site.xml This file contains an outline of the site's information content. It is used to: - Generate the website menus (though these can be overridden - see docs) - Provide semantic, location-independent aliases for internal 'site:' URIs, eg links to changes.html (or ../changes.html if in subdir). - Provide aliases for external URLs in the external-refs section. Eg, links to http://cocoon.apache.org/ See http://forrest.apache.org/docs/linking.html for more info  The label attribute of the outer "site" element will only show in the linkmap (linkmap.html). Use elements project-name and group-name in skinconfig to change name of your site or project that is usually shown at the top of page. No matter what you configure for the href attribute, Forrest will always use index.html when you request http://yourHost/ See FAQ: "How can I use a start-up-page other than index.html?" site tabCDATAlabelHomeabout Indexhref index.html description 'ai4r - Artificial Intelligence for Rubyindex   Practical ExamplespracticalExamples Genetic AlgorithmsgeneticAlgorithms.html Genetic Algorithms in rubygeneticAlgorithms Machine LearningmachineLearning.html ID3 Decision Trees in rubymachineLearning Neural NetworksneuralNetworks.html &Backpropagation Neural Network in rubyneuralNetworks   Downloadsdownloads.html ai4r - Download Filesdownload Forum-http://forum.jadeferret.com/viewforum.php?f=3  Ai4r Forumforum""" API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html  Ai4 RDoc docsrdoc&&& Source Code repositorysvn.html ai4r Subversion repositorysvn*** ai4r project PDF wholesite.pdf ai4r_site_pdf---  ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr result[1] && result[0] > result[2] "TRIANGLE" elsif result[1] > result[2] "SQUARE" else "CROSS" end end puts "Training Examples" puts "#{net.eval(tr_input).inspect} => #{result_label(net.eval(tr_input))}" puts "#{net.eval(sq_input).inspect} => #{result_label(net.eval(sq_input))}" puts "#{net.eval(cr_input).inspect} => #{result_label(net.eval(cr_input))}" puts "Examples with noise" puts "#{net.eval(tr_with_noise).inspect} => #{result_label(net.eval(tr_with_noise))}" puts "#{net.eval(sq_with_noise).inspect} => #{result_label(net.eval(sq_with_noise))}" puts "#{net.eval(cr_with_noise).inspect} => #{result_label(net.eval(cr_with_noise))}" puts "Examples with base noise" puts "#{net.eval(tr_with_base_noise).inspect} => #{result_label(net.eval(tr_with_base_noise))}" puts "#{net.eval(sq_with_base_noise).inspect} => #{result_label(net.eval(sq_with_base_noise))}" puts "#{net.eval(cr_with_base_noise).inspect} => #{result_label(net.eval(cr_with_base_noise))}"     nn-custom 'Customizing your neural network in ai4r  ~Sometime for a given problem, you will have to "play around" with some parameters to get to a solution. This parameters are:   strong2 threshold22: A real number which we will call Threshold. Experiments have shown that best values for q are between 0.25 and 1. You can optionally pass this parameter to the initialization method of your network.   22lambda22: The Learning Rate: a real number, usually between 0.05 and 0.25. You can optionally pass this parameter to the initialization method of your network.   22momentum22: A momentum will avoid oscillations during learning, converging to a solution in less iterations. You can optionally pass this parameter to the initialization method of your network.   22transference function22: By default, f(x) = 1/(1 + e^(-x)). This function is called "Sigmoid function". You can see it like a "smoothed" version of the "Heaviside step function". It will always provide a value between 0 and 1.    Sigmoid functionimages/sigmoid.png    Sometimes you will have better results with f(x) = x. You can change the transference function from the default sigmoidal function to the linear one, overriding NeuralNetwork::Neuron.f and NeuralNetwork::Neuron.f_prime (derived function of f):    a class NeuralNetwork::Neuron def self.f(x) x end def self.f_prime(x) 1 end end    nn-more .More about Neural Networks and Backpropagation   href66http://en.wikipedia.org/wiki/Artificial_neural_networklink8/Wikipedia article on Artificial Neural Networks88   66,http://en.wikipedia.org/wiki/Backpropagation88.Wikipedia article on Backpropagation Algorithm88   66>http://www.tek271.com/articles/neuralNet/IntoToNeuralNets.html880Neural Networks - An Introduction by Abdul Habra88   66:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html88iA graphical explanation of the backpropagation algorithm by Mariusz Bernacki and Przemysław Włodarczyk88     ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr} RCóbŊcǎQS޲2ooo2C!A9=EQ_7oޜFd`U;==}ƌJŅCMӧO/Z[꯿7>|?O>1 ---RTRJ%J[ZZp@@0hg }[lINNF!99y˖-?y`gg!$#GDZcb1`=!lnn\ d \~~+W.]k{.BXYY(Ϟ=SJJJڿ!wP%/*ͭ#>|bkkCƐCo߾믋D"\~}?sLH4s|@E(D4 :B uoo/MHHj( SB;vX///6mmmJ%cǎ-..IMM.\>Bgg5ϝ;j9p''';v$&&Ce˖-^qь!2,))9>>><< T*MKKknnNMMuss!vve`ׁ]u&VII Thmm-gϞuuut;,]444TףբE-[QS^x!߻wގ9qmZuZ}a///ZmEISJC,௃?{Ν;&9Ɲ;wBBBض>v.\!|뭷 FdggO6 -C(DTQVlt:\Ϙ3ђι/YUUU#:PUUEO&Mm۶G_PQQ!/F<YZ&ڵ)**jx'55/Jhndee԰wWEpzu0F}T&[Y )//S?77W"`B:yddЩDCJ5kjkk[___HO7뛛9mǏ?ԟ2eT*Bt_H)SP)88X,ϛ77nL>],/Y|P(|Wо>u)6EMfQ1 : 5ĉ!!!999-b ;<Bggl:WZtRz@QQgvE oD"gϞϰe2e>G,mܸqz`0嵷ֽ3/^looGK`N ;J$"KN<4ڋ0 iقUÃz4k׮( UG:d:- 0GGGt28u:]ii)!gq`$& &M***zQBBɓR:3a2.d2\cZ\ksF-nذ!**qoյca]m.tvv) tZeC]ί-`ɯnV܌@t͜7_\&sK)ƍ+-->}G1dq+8º\JeccsB) 5p5[[[,X>Ck pR\!.]rrrPr9o63\r۷owpp>}k׬ js!NNND0!2F PYYC},a vgK~ [}G~wnnnlvV}FoN~is9/m.ڰaJJII:u*b0}}}w;wH$:q1#9OV}hl[PdaaaƳLj2Xݻ6Ծw1[euO<9u}>|<b߈0W\ 1mx°%iyzz, iC}T&sE`{{{E"ε(cԷca]m.rhG!ŎwOŋ׭[oZݹsY>C;̯)))h@jsy^s7xj52m.[ !|T*UbbuBccaEm.044W_˫/,, ^f -//H$6lDڦMNzܹ˗//,e1l3 K~-VZGխ[,Κ5k2L&h ,6Sj,e\B0 BnqqqRT xzz&%%uuuؒP{{1cDFF^zΜ9}}};w8qP(twwϟ>}g&]ˠ>]h[5/+W \;@0xOoPD;}x6ׂUhs SIڷo;`1GNǎc#cYcetqQϾ 4fی@Jcc؊63h=JOvMs4{;DjsD"̩Et.^xQC0fQ???^DsA/oܸ_0컙:0(`֬Ybx֬YpBjs í[gϞ]TTTZZ:o޼0t1` 8WkkJbxYuXKuUHͣG _uRջw x,+33СC#آ5cԷ#l9chvKHܪ9D}ܹbŋûmEX5_js5 t-'IJҘU_=zٲ/2`-Pص`|mZWaccS\\Lo|rCr< }Gp.5onnjd_Ȫ?\cu0Gk6ͅ.\p曟}֧hש蹖/_9[K¹pS_Hִ47774 e/! Q O6@m.݌Lk斖:88$%%)ʿ;99y̘1x*J''DRYQQn:'''Dw~/gH1xΟ??m43gO6*rX.˴kss EHHX,r̘]ۇݼy/gPhs6yms~hsGZ m.1x'%"!I$//H)9V `XA~݆OA/piL 3?h&z~^KUmVV.݆,*/LaNa:IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptN/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/t_wn.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xpP`Asr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xp%psrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xp%ptresourcetSfile:/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/s_wn.pngpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xpP`t image/pngpur[BTxpBPNG  IHDRh6 pHYs  tIME  4wtEXtCommentCreated with The GIMPd%nIDAT(ύR; )(=E.@3p02[dؠ.x2LӄX{ss"tTR b 7mn, b5uSJifoְ֪qʶuyOqߏ|zcif=/cz-Dsly^׵d1Z/l^AI+]IENDB`ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptN/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/s_wn.pngw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xp(gsr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xp#qsrjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xp#qtfilet;cocoon://book-linkmap.html?pipelinehash=7666300897731965627pxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(eppur[BTxpCXML copyrightCDATASCopyright 2002-2005 The Apache Software Foundation or its licensors, as applicable.titleApache ForrestsoftwareForrestbook i18n!http://apache.org/cocoon/i18n/2.1tab label Homemenu   Indexhref index.html description'ai4r - Artificial Intelligence for Ruby menu-item   Practical Examples   Genetic AlgorithmsgeneticAlgorithms.htmlGenetic Algorithms in ruby   Machine LearningmachineLearning.htmlID3 Decision Trees in ruby   Neural NetworksneuralNetworks.html&Backpropagation Neural Network in ruby     Downloadsdownloads.htmlai4r - Download Files   Forum-http://forum.jadeferret.com/viewforum.php?f=3 Ai4r Forum   API doc (Rdoc))http://ai4r.rubyforge.org/rdoc/index.html Ai4 RDoc docs   Source Code repositorysvn.htmlai4r Subversion repository   ai4r project PDF wholesite.pdf   ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrX,~{{{GFF>omrΝ_,//F!ч<3 $VLg +W[ĉmmmEEEA>gAXƏqG U*A 斔@ǺE,Qn&VAA***/a$48-[ D"AQ8\+q…7np}]Ų}fG ñX8(;( )8x{hxzPD>3֯_0M ֭_'HobmPM6-PkǽZJŲm۶;v(k׮ חL&wɽ*JɹgսGԱnݺ͛7;w "??D RX,e4y~ffggg c|`Y*Wl#EQ Z)aY*4MQT,3usEqQGQE1A0EFCd8d(xOJJz'Μ9syJ ---55uff qyx'(: & 9EQt8 k:έ[fffܹsa׬YaȵkBؘO Eyy9#@`0j5EQ.kzz$Ie!###op@ q\ p8>EQҥmB` d!%( q_2XqAL 1.^_d ˲~BnT*$855r\.,Iܼ K"Lie( .VWW78RryJJJqqqgg6beϞ=Ҳo߾l^p8 z{{O<)Hyi:55Uբ(z)߯  Hzoܸ!peU*NKJJJ$''WhQya F?_UVf2T*.KV(J$=00`0fsFFbӷnbFRD@ pMaRRRbq4q<_~8zv)))0bqHtuttC?22rU#--l6ޙ橩) -ZTUUVQrjJOO!r6C(\]RR$I.\yðr9>>><6mٜN' :n8;wvIQ1)))###33S`z{{{n9z+H*++ |‚\z<wwuFyqCCd|5YYZ,*|E$F I7abܟY^1E!dyUU0 ~$t( de2Y(˲2lddj.|GeP(AM\jκԱl>AϜegq7}nWաP(caF1))i``ze!Éb-Jr)/>$-Z裿MX"!sU5A(z#ܜD"U.AV ope^KR A۞b H(|( title FArtificial intelligence for ruby :: ai4r :: download page at RubyForge body id introsection linkDArtificial intelligence for ruby - ai4r - download page at RubyForge  frameborder0height800pxsrc'http://rubyforge.org/frs/?group_id=4942width100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsrgq~tXfile:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslt_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xslsq~ #q~tLfile:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xsltST-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xslxtXPK_G-file-cocoon://site.navigation.links.xml?pipelinehash=786357640368091306_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/absolutize-linkmap.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/site-to-site-normalizetabs.xsl_T-xslt-file:/usr/local/forrest/main/webapp/resources/stylesheets/normalizehrefs.xslsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp(eppur[BTxp CCXML  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You 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.  Forrest site.xml This file contains an outline of the site's information content. It is used to: - Generate the website menus (though these can be overridden - see docs) - Provide semantic, location-independent aliases for internal 'site:' URIs, eg links to changes.html (or ../changes.html if in subdir). - Provide aliases for external URLs in the external-refs section. Eg, links to http://cocoon.apache.org/ See http://forrest.apache.org/docs/linking.html for more info  The label attribute of the outer "site" element will only show in the linkmap (linkmap.html). Use elements project-name and group-name in skinconfig to change name of your site or project that is usually shown at the top of page. No matter what you configure for the href attribute, Forrest will always use index.html when you request http://yourHost/ See FAQ: "How can I use a start-up-page other than index.html?" tabCDATAlabelai4rsite Homeabout Indexhref  index.html description 'ai4r - Artificial Intelligence for Rubyindex   Practical ExamplespracticalExamples Genetic Algorithms geneticAlgorithms.html Genetic Algorithms in rubygeneticAlgorithms Machine Learning machineLearning.html ID3 Decision Trees in rubymachineLearning Neural Networks neuralNetworks.html &Backpropagation Neural Network in rubyneuralNetworks   Downloads downloads.html ai4r - Download Filesdownload Forum -http://forum.jadeferret.com/viewforum.php?f=3  Ai4r Forumforum### API doc (Rdoc) )http://ai4r.rubyforge.org/rdoc/index.html  Ai4 RDoc docsrdoc''' Source Code repository svn.html ai4r Subversion repositorysvn+++ ai4r project PDF  wholesite.pdf ai4r_site_pdf...  ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsrLorg.apache.cocoon.components.source.impl.SitemapSource$SitemapSourceValidity+{yyLvalidityt,Lorg/apache/excalibur/source/SourceValidity;xpsr;=?<>@=?@>@A?AB@ACACEBDFCEGDFHEGIFHIGIJHJKIJLJLNKMOLNPMOQNPROQSPRTQSTRTUSUVTVWUVXUWYVY[XZ\Y[]Z\^[]_\^`]_a^`b_ac`bdacebdecefdfgeghfhighjgikhjlikmjlnkmolnpmoqnqsprtqsurtvsuwtvxuwyvxzwy{xz|y{}z|~{}|~}~¾ÿ!Created with The GIMP! , H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨSVjϕ 6vcV:ոs^ @@'t+_n|Ȓ$Ev7m Y: ƾ}{dn`PJ@h 8dJ$F.50<LU%G@0\pF/rN,:(& `@)%x2\NdEG@p(xDp iW@\H B˓p(Εc^@f( uJ"nx`}qCm̛CB`'N" /-V &|(\Chr[zcI2Z)BIoPݭRp<`Ckбc$QBpaZ٤m /pSmxk)0EA.ch e",DpeV7+.aԪh5tAiJ H}al\5.{>k38 X)G`ݎ(6>JpWlhSSM@!,*7u5yOK`ZX6L *Jꤷ;G5Gb%{@ꪲtW­4;תލ£ԫ|-SLфG"C-8Du 6$V?ޒŶҎ e F u+cA@' K mJP[o=(zAQw 4I!QAuSppf'_hk$|rvoV(II}eDVF MH K"s# <®h:<эwo+@lTq=G#.2:tc3ʳ Z (8 р&s f0.al>G^b~kkd+QP"pPj0-2&Z7@.Qƃ" h"+ pZ50Ad7&wnd)P 5"( fFSH`<."! 'aX ]_ːtF&qF40` oFl" (xw o3r E Sg !vyrz` ` nebq"n!+"%P'?p,>P]ue y'݀0=nj8*IS >6gD{ހ6+jp6PplGx>ͥ.}!` j 0y  9Hi 0;2<P`/|A W A-c L9@0 ( t /G 5> Sep!  >(0@ijuR+,ݦ0t j"=o FZWq0P=SP@ R&1 ` xbC]s?&js  0簛S-d0@+ dA " |cDR{/`$! 50A% auC bk vp #s8`P&c"*kݐ!a a0@ZЄc ڢjxvH5 "( , ppPee A ` ?j"P}S}&ap{5qȟ@ `PjpHP06` DDQ!P 7 8P`2D|6g0` D u04ɨ  Á$@@R 5Ч( QtJz2 s QJ@ ce"v ~3 m `@&9@ pai"0`PȐpQ4 o!j JSpj@ Ā ̰ ~|0گ> 𙰙 f v! %" $sA >FҘ$!S0)%m I> a[@ %pZePKpWG0d0PV0) 0VjFP`P+X p- % e@+J%%0a pSƀLz>i U  XeP0`'a w׻> cX i#1pO  @=@ I$ 0 rS@.Il F2 Ԋ ɨPmm @1=OJa  /Z 0x|*@0纶 0sx!`'u Gt G8:u0!0ja@f* ꅟp+L" eT 4,AQD0" vۢ F@!:Xc~1 >>@y >W0 p@nl)L2@egp K}Z ) .aLeP" E w`?! 6 B@aPi|!b0U y kj0{R ! = b3( ?GfD| !j b!P2` p€'j` zQj, 2Q7`Seq;16} h ՐpB$:ʵy $0A$p@\a0[=d!MmZ9kƐ$O@P }-@ cj"u)g!D<b=A`e9 0=P̥P W^@&bAw v| L@}JO\ >"xP*` UD@6 p1 a`~<jP@P"m5HBvѕ="h 27`7A@ǛP PU^`ɱ MD.  )9/ߚX i ;2 uAzj Q8Ph3;0mjCFB sTS0!@Qa[s !} P<ѶVsIHoC& P,q" ʀ}  )g .+ 2C9&`%GaZL?xZ 2"`x%r#D"C$-OTB ] Ss#Ϸ+TERlI 6x Q )?r]!,100胯Z*Ϭ)AA= >4 wSYCMk4+0DՅiRuE 7KcxPV,_m0\-TPT <*:= 76x(_0uR`Y"0%x ar(bJZ<1H y`X#Z6>Sxyf( &xa9Rf(x I 0Ec ut]͗+ˮO "yvG HFl Rpe\5A(E'מ,͒%FQ }Rf@UfG}!h\5'mr"`ām޿r'ݯ/op]Pr,X"(?mǕ#^˃ V7^>c Ia/3Q (G` „8'Ad%X;GC)EQz`̔""7x0=`TQpXyGR` pq%E4cz `U2pB-bnQDjC,dq" 9U QKb XQ4*cxr."Xfo*#}K@v9jFs7XJ+ 8 Ѝ jG8AHjXB`P]1: RA+)^l`+m <‚ Ġ"dBy0,4$8& ( @ bn3f,A($Rx#QRYR9'B˛a-<8 5TA"ZS>̃ `s~DE*"!<0³5(-,e[rap|p:C 5e4ir]r)H(^h>&2Թ4j]w_Z ]RD .A/V!/{V®;BKXBt±BB#M18vw!SDq1P`mjκR5 jV  ݝ(2<5u%Ϙ2 nmsP&"pp$ >n6(4'#l1|b)1+"hB0cH.r|YiPS-d1OvE5aU TgE3юZdP j @DWfLDeEa8bIKz C#j>)dU 6{~ZQLqCW(F(XHyZx0s膏@O?M4*{< h Sp dAAs*RҴ 8ȉ`Zh(U 10ġ!7X_(Qh-m>m܊O"2"#EKh˜QLxAhū t)qX 8TUqt$ kAc^(( u8PoR)p+FA3rXrtYUX * SN꜌_qh_0ϰ)5Ɂ[6ͳH,R*`Gн(Oi-1(ivJ@2;0ѯ >љ r.P<C,`D?F ?DDQh xAѨ7 RoҠX1  hXL2hP"XuR*_ѵ2xBZl8lѽLB gPiS7gÏaL{ C2J=;T8i-Spՙ 1X*@1_M˴nxJt28< q%*0@̤yMV8K%[㞠v!9SXRC\q 3zj.݀$qjqzU=D]BtXu ,p^獓0h;sRټ` 8|`8yv7TUDHRdeEL({s60͂I7)"ɡaUCh^\E5BJ]ȅYŠPЈ 0Ո_ ^v 0-U/0Q^8YאUj&fxHڨS҈02cX(@C|أ͍uQ S(&F1Y`(hQH+1FY]_xR(Z89ȧ Vߛ-A Z(eaQ{*;Nt>j A\0Jq)M#3hŝf"H@yzQ͌=(bݛ-jLWnN@7(x)ldx*q^8ߥHP*7W; Mސ<+ɋIU4g#d 9-a܊Hh`؁H$Q%aR` /a؀ih]ʀ_l)(VOˌWA Aϐ&h7by2bk)IM`WCXd0I ЃmaAWGQGvhǰگ0dxȃ =@MX!4;p=f`C8L.pZ  P>8*5ĬXxԘ8?^)-KמP >[tHK `Rƀ^" bH97> - R@f2QIS8WOѾ S+IxY$U ixrXr)@ n4$?d1C p^7`j8bv'qZ`fe8(`K>)k#fj2:?4`篴k[8ɏ>l)P74?"sAQ ΚoH(f=YGD;[8 : wPtpɀeZ000 =(/e/xmp[*=-Hp: ؀` @fWs_Swq G쀽.7 HL^ Us \(" Q,@O"\Bt֥Gް\wM&TЈ[Ȅ5pRXP,J`ru642`lGMC0]lP0;С,EKh>`0qQ@xcƓaЯhj4`6t$psBMY@8 rXK`  4vc`Bv(kh ,`+P1қix<ɣHs](<2@V-| ^ \bTHR0RC`(( 耹!Xp'U(_nb[pG,h „ 2laAx$8"ƌ7r# ,i]2c2i&Μ:om'РB+Z4ZJydT@K(s|D0k ^^4 *c zUW! &A d6S<2/\7cl3Z(sGd@`5<m۲ (0kHtM!3/Kر+l q:kQGK 21J;#/uJ_I)%`/y ZHx!_W &d pwȂNzFd/e@'6e% Ȣ)dИ0/KN݌!lNpR`[$PW4/XntH12%hfF@@޴'IBIbd!2 @L@Lv2Le+ci[,vjD/E(<[. s2p$-a^D&'`kS8BUD—6&/ᑎnbbpfp q͈ =1d>"stͪ^yHe^U?j[slHwxHB%d.j@d(a#>KEED4-l}Q]^QN(ݘ#0)lF@%`M28UYl/ȅ\tE7DS,dy,FN,V^,fn,v~,ȆȎ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,,--&.-6>-FN-V^-fn-v~-؆؎-ٖٞ-ڒ9۶۾--"eU)EQe.2>&N6.^.".n\!|.膮.~Ur...Ʈ.֮.nZ.nHol^. /)jn>`,/B<`Bn/^/////Ư/֯///00'/07?0GO0W_0go0wp{.B)-8ypj#$AX 0겂XD8 !`Y -+bH"F0p.ʁêA6S@!@ET)HC+`@l6,,-|hn0™A#QF&S )͔B|<+\cB&|B$,Yi(E $2 fvҩK$LqJBX(p++4sCJ@l'jk;tJFO&-XÝ@!0vt+< FBfy :[POn,F |Ö 4# iHM-K+ava)'i, <X "ngXd ֏c Lv+̀XmmwVqF,Xd:>u7@ߒ{E3p؉GyF4fwX-Kvl@N3.`|hBB{Ybp7FB^]>셩@:NtT@H(%lRQ C+mF.\@ xQK:dzSQ(@B 8+D4;A 0qX^" ȁWj- lɘ*lIEaƔ@8`A&TaC!>v&Ad0st fWQ'!82(<6xqclHF,Gi)xLa X5>.L i>|}O l:)XK  |JrP>hĀ eH0> QLQYl wTs6/@kJU|- pk\*8D"R), Dtd!$!n)-)fʀ _$MT`-tZ[? 4n &+,#s LT(pY))`FOA Ub0dYkFʼn1TsF0\_ ?VB`Ǿq'n6Ypp) ymt:E[02ǒPn9W֪͉]{;P[x CfKr|!Xb(у:(8BX27eB(5'nGX6N$v,yAF9+\(C,ĀZ9 0# EOЄ꫱^Փ!R$_ gn@`5KJHxvLɝ5@1(r*kyDF XꄎB&Z` :# \ nrN]oS̨Pjw ~e.(8e:f ʘv@Yz88&'KP*C=0=ή (E(8( }#KY @,.T$ wP'B Aєf!A0`%$x*"ڨ %|i#UF$$5FaC-B R ,HyC)$` 3*mF?))~D|@=A=*S4 ;` + /שZd؀wmqەG`*ޠE`20 "E68gszv#d<Fvp0v7L0,*`Iz'Z±/Aؐ0$k@:\@ĕ/8EX17ÅeGf@B @b$Ex`җUTv}@*?/Yр@7Q2~{-v+7|Ѓoe<2 C+9 !s}V(R@"<('a軲w[15s`^80d BHV԰d0|ҍ`Ù55Ohttq^ Cd_qE|MKdP@YGwpZ`А\p^RAV@ "')@{8BS>moC>(豈@0c(j Q PyEAL!g" ܀ŕAH0EA|`p@pnaT G z N`Z R<h0x NxN"!`T1 ahal`a*R| l},EhJ:(p Ā T%Ua&JjAC6+",G ""*cAHaĀ P@ V| ` Z TRd-a&r&` x@ @n` d'{"z1 hؐ*Pl>A .J ,f Qds6is>ءa>a H*` ""1(~K*s*4B( v TF6Gj#D"D26ρZ` j@/_ A"("S !fAцR ~a(V fB ,aed1pEW+2e6VK^P` 4At'!n !j '؁R`( VHd6A1b ` $@Mt D|b@яJD"ށd`L ,8RLɊph3@```! tS!bځ" JAS5H! D*,rh)7 , >S9GB>`!cj!`pUTa(#ءĀjHg#nU`AV~Kz,f!B>ށk!VjnDI t$#ҡ tAolbs vG!nC>R c-)}nt£*s'TC"#t!lʀ k1b2"$B֏XʠD!l2jy3:HbR N<EX!#R P~ї! 4}F!hJEҁ \F@0 H XQ$TJ@Xb(DI/'?tf/R ,ڡ"`t1Dx0˅A#Ч*m6?  8hH}@ C$bah/.^:lB?hA/al$ o`B*B^3Wm)G(܁$C9!sOO#`ؔtH!2`T~`Ly#*d">3Ĭ8zq|"c0bRPUMj)w',<KA_hOvc`j%VTl0<1H„o\1 oE2V X!aba$cah A4:o蠟d2 "hl@4!Az@ i,#!2@-I2z($~ a!:ƕE :N" hhOB ՚2:c8jHpÊƀ " aHÌ{@&~ RAaL N 4 L$A3ੵ >8("AN#! $@>BP2B@ raz/*֠AZqK@&n`2b @n Plʶ, J:xa ܀Z(0d" Q|r,# LU&HpT` 襮`bV9TA- B  A%-,aB9 0*@M<Va H% &i2<$ ֆ<y!LAV̵:{>I}3@k! `ϏqYPx1SD:W*C4H62` |"y\5h`22J`L"k!&ṵY5n^Ha T :9!Y-ܡv)|V(;>| (A^JE}pT !ط`QAR!r V`.f  ܀LB c)wS;X1rhǡBx`EMĔ=bFA$-! |Rf 2!rAOX* :]恭*\QE!+!` RjH `8~(!"2T!mP@Bru6\rj hB  Aha 8Ō3_ X1G\POF5Uvݔ:eIЛ0Gjhp`y8 ċ?dU/#Fe $@1ԋ5hL4 Zne^" roP2_z%TI^08Bg0Uf~ (,/eVFEQUd 0in:<4@ơw J)=Y -unmXU됱P WQf"KŴx;,|ubqq Q⦟GUC @ B+<",D@X%-<*|kT;HqS@H7O r|0pEϟ~W#OACTsst+La@0g0/ J*&Ԡ OBEEZA+Պ/K oC UE $'<$ F s$*8D ʓq%jq\ U`k؉/, b8CJP)! S(rTÍr,!El!dB"@ tϒ,)QSra Y Xr-o\r/ ` s,1d*sl3 hJsԬ5ljs7 Θ;ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpBۘsr java.io.File-E Lpathq~xptM/home/sfierens/workspace/ai4r/site/src/documentation/resources/images/ero.gifw/xsrnet.sf.ehcache.ElementlyP{VJ creationTimeJhitCountJlastAccessTimeJnextToLastAccessTimeJversionLkeytLjava/lang/Object;Lvalueq~xp(=sr*org.apache.cocoon.caching.PipelineCacheKey;KJћIhashCodeLkeystLjava/util/List;LtoStringtLjava/lang/String;xpjm'srjava.util.ArrayListxaIsizexpwsr+org.apache.cocoon.caching.ComponentCacheKey*cZ cachePointIhashCodeItypeL identifierq~LkeytLjava/io/Serializable;LtoStringq~xpD8ttextt[file:/usr/local/forrest/main/webapp/skins/pelt/css/print.css;localizable=true;encoding=nullpsq~ itpatterntKfile:/usr/local/forrest/main/webapp/./resources/chaperon/grammars/link.xlexpsq~ +txslttUfile:/usr/local/forrest/main/webapp/./resources/chaperon/stylesheets/pattern2link.xslpxpsr(org.apache.cocoon.caching.CachedResponseq6?J lastModifiedL contentTypeq~LexpirestLjava/lang/Long;[responset[B[validityObjectst-[Lorg/apache/excalibur/source/SourceValidity;xp( ppur[BTxp2CXML/http://chaperon.sourceforge.net/schema/text/1.0sourceCDATA title CArtificial intelligence for ruby :: ai4r :: Forum page at RubyForge body id introsection linkAArtificial intelligence for ruby - ai4r - Forum page at RubyForge src3http://rubyforge.org/forum/forum.php?forum_id=19341 frameborder0height800pxwidth100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xp̐sr java.io.File-E Lpathq~xptM/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/forum.htmlw/xsr DATA_LABELS = [ 'city', 'age_range', 'gender', 'marketing_target' ] DATA_SET = [ ['New York', '<30', 'M', 'Y'], ['Chicago', '<30', 'M', 'Y'], ['Chicago', '<30', 'F', 'Y'], ['New York', '<30', 'M', 'Y'], ['New York', '<30', 'M', 'Y'], ['Chicago', '[30-50)', 'M', 'Y'], ['New York', '[30-50)', 'F', 'N'], ['Chicago', '[30-50)', 'F', 'Y'], ['New York', '[30-50)', 'F', 'N'], ['Chicago', '[50-80]', 'M', 'N'], ['New York', '[50-80]', 'F', 'N'], ['New York', '[50-80]', 'M', 'N'], ['Chicago', '[50-80]', 'M', 'N'], ['New York', '[50-80]', 'F', 'N'], ['Chicago', '>80', 'F', 'Y'] ]   @You can create an ID3 Decision tree to do the dirty job for you:   , id3 = ID3.new(DATA_SET, DATA_LABELS)   IThe Decision tree will automatically create the "rules" to parse new data., and identify new posible marketing targets:    id3.to_s # => if age_range=='<30' then marketing_target='Y' elsif age_range=='[30-50)' and city=='Chicago' then marketing_target='Y' elsif age_range=='[30-50)' and city=='New York' then marketing_target='N' elsif age_range=='[50-80]' then marketing_target='N' elsif age_range=='>80' then marketing_target='Y' else raise 'There was not enough information during training to do a proper induction for this data element' end id3.eval(['New York', '<30', 'M']) # => 'Y'    mach-dataload Better data loading   In real life you will use many more data training examples, with more attributes. Consider moving your data to an external CSV (comma separate values) file.     data_set = [] CSV::Reader.parse(File.open("#{File.dirname(__FILE__)}/data_set.csv", 'r')) do |row| data_set << row end data_labels = data_set.shift id3 = ID3.new(data_set, data_labels)     mach-eval A good tip for data evaluation  : The ID3 class provides a method to evaluate new data.    3 id3.eval(['New York', '<30', 'M']) # => 'Y'    But instead of going through the tree every time, you can take advantage of the fact that the method "to_s" generates proper ruby code!     id3 = ID3.new(DATA_SET, DATA_LABELS) age_range = '<30' city = 'New York' gender = 'M' marketing_target = nil eval id3.to_s puts marketing_target # => 'Y'    mach-more !More about ID3 and decision trees   href*http://en.wikipedia.org/wiki/Decision_treelink#Wikipedia article on Decision trees *http://en.wikipedia.org/wiki/ID3_algorithm"Wikipedia article on ID3 Algorithm     ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xppsr java.io.File-E Lpathq~xptV/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/machineLearning.xmlw/xsrbody #top .searchbox { bottom: 0px; } #top .searchbox { position: absolute; right: 10px; height: 42px; font-size: 70%; white-space: nowrap; text-align: right; color: white; background-color: #000000; z-index:0; background-image:   1images/rc-t-l-5-1header-2searchbox-3searchbox.png 1url(images/rc-t-l-5-1header-2searchbox-3searchbox.png)  ; background-repeat: no-repeat; background-position: top left; bottom: -1px; /* compensate for IE rendering issue */ } #top .searchbox form { padding: 5px 10px; margin: 0; } #top .searchbox p { padding: 0 0 2px 0; margin: 0; } #top .searchbox input { font-size: 100%; } #tabs { clear: both; padding-left: 10px; margin: 0; list-style: none; } /* background: #CFDCED url("images/tab-right.gif") no-repeat right top;*/ #tabs li { float: left; background-image:   ;images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png @url(images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png)  >; background-repeat: no-repeat; background-position: top right; background-color: #000000; margin: 0 3px 0 0; padding: 0; } /*background: url("images/tab-left.gif") no-repeat left top;*/ #tabs li a { float: left; display: block; font-family: verdana, arial, sans-serif; text-decoraMtion: none; color: black; white-space: nowrap; background-image:   ;images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png @url(images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png)  ; background-repeat: no-repeat; background-position: top left; padding: 5px 15px 4px; width: .1em; /* IE/Win fix */ } #tabs li a:hover { cursor: pointer; text-decoration:underline; } #tabs > li a { width: auto; } /* Rest of IE/Win fix */ /* Commented Backslash Hack hides rule from IE5-Mac \*/ #tabs a { float: none; } /* End IE5-Mac hack */ #top .header .current { background-color: #4C6C8F; background-image:   7images/rc-t-r-5-1header-2tab-selected-3tab-selected.png  title FArtificial intelligence for ruby :: ai4r :: download page at RubyForge body id introsection linkDArtificial intelligence for ruby - ai4r - download page at RubyForge src'http://rubyforge.org/frs/?group_id=4942 frameborder0height800pxwidth100%iframe ur-[Lorg.apache.excalibur.source.SourceValidity;l|e0xpsr?org.apache.excalibur.source.impl.validity.FileTimeStampValidity ǹJ m_timeStampLm_filetLjava/io/File;xpAsr java.io.File-E Lpathq~xptQ/home/sfierens/workspace/ai4r/site/src/documentation/content/xdocs/downloads.htmlw/xsr