comparison libs/commons-math-2.1/docs/apidocs/src-html/org/apache/commons/math/genetics/ElitisticListPopulation.html @ 13:cbf34dd4d7e6

commons-math-2.1 added
author dwinter
date Tue, 04 Jan 2011 10:02:07 +0100
parents
children
comparison
equal deleted inserted replaced
12:970d26a94fb7 13:cbf34dd4d7e6
1 <HTML>
2 <BODY BGCOLOR="white">
3 <PRE>
4 <FONT color="green">001</FONT> /*<a name="line.1"></a>
5 <FONT color="green">002</FONT> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
6 <FONT color="green">003</FONT> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
7 <FONT color="green">004</FONT> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
8 <FONT color="green">005</FONT> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
9 <FONT color="green">006</FONT> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
10 <FONT color="green">007</FONT> * the License. You may obtain a copy of the License at<a name="line.7"></a>
11 <FONT color="green">008</FONT> *<a name="line.8"></a>
12 <FONT color="green">009</FONT> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
13 <FONT color="green">010</FONT> *<a name="line.10"></a>
14 <FONT color="green">011</FONT> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
15 <FONT color="green">012</FONT> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
16 <FONT color="green">013</FONT> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
17 <FONT color="green">014</FONT> * See the License for the specific language governing permissions and<a name="line.14"></a>
18 <FONT color="green">015</FONT> * limitations under the License.<a name="line.15"></a>
19 <FONT color="green">016</FONT> */<a name="line.16"></a>
20 <FONT color="green">017</FONT> package org.apache.commons.math.genetics;<a name="line.17"></a>
21 <FONT color="green">018</FONT> <a name="line.18"></a>
22 <FONT color="green">019</FONT> import java.util.Collections;<a name="line.19"></a>
23 <FONT color="green">020</FONT> import java.util.List;<a name="line.20"></a>
24 <FONT color="green">021</FONT> <a name="line.21"></a>
25 <FONT color="green">022</FONT> /**<a name="line.22"></a>
26 <FONT color="green">023</FONT> * Population of chromosomes which uses elitism (certain percentace of the best<a name="line.23"></a>
27 <FONT color="green">024</FONT> * chromosomes is directly copied to the next generation).<a name="line.24"></a>
28 <FONT color="green">025</FONT> *<a name="line.25"></a>
29 <FONT color="green">026</FONT> * @version $Revision: 811685 $ $Date: 2009-09-05 13:36:48 -0400 (Sat, 05 Sep 2009) $<a name="line.26"></a>
30 <FONT color="green">027</FONT> * @since 2.0<a name="line.27"></a>
31 <FONT color="green">028</FONT> */<a name="line.28"></a>
32 <FONT color="green">029</FONT> public class ElitisticListPopulation extends ListPopulation {<a name="line.29"></a>
33 <FONT color="green">030</FONT> <a name="line.30"></a>
34 <FONT color="green">031</FONT> /** percentage of chromosomes copied to the next generation */<a name="line.31"></a>
35 <FONT color="green">032</FONT> private double elitismRate = 0.9;<a name="line.32"></a>
36 <FONT color="green">033</FONT> <a name="line.33"></a>
37 <FONT color="green">034</FONT> /**<a name="line.34"></a>
38 <FONT color="green">035</FONT> * Creates a new ElitisticListPopulation instance.<a name="line.35"></a>
39 <FONT color="green">036</FONT> *<a name="line.36"></a>
40 <FONT color="green">037</FONT> * @param chromosomes<a name="line.37"></a>
41 <FONT color="green">038</FONT> * list of chromosomes in the population<a name="line.38"></a>
42 <FONT color="green">039</FONT> * @param populationLimit<a name="line.39"></a>
43 <FONT color="green">040</FONT> * maximal size of the population<a name="line.40"></a>
44 <FONT color="green">041</FONT> * @param elitismRate<a name="line.41"></a>
45 <FONT color="green">042</FONT> * how many best chromosomes will be directly transferred to the<a name="line.42"></a>
46 <FONT color="green">043</FONT> * next generation [in %]<a name="line.43"></a>
47 <FONT color="green">044</FONT> */<a name="line.44"></a>
48 <FONT color="green">045</FONT> public ElitisticListPopulation(List&lt;Chromosome&gt; chromosomes, int populationLimit, double elitismRate) {<a name="line.45"></a>
49 <FONT color="green">046</FONT> super(chromosomes, populationLimit);<a name="line.46"></a>
50 <FONT color="green">047</FONT> this.elitismRate = elitismRate;<a name="line.47"></a>
51 <FONT color="green">048</FONT> }<a name="line.48"></a>
52 <FONT color="green">049</FONT> <a name="line.49"></a>
53 <FONT color="green">050</FONT> /**<a name="line.50"></a>
54 <FONT color="green">051</FONT> * Creates a new ListPopulation instance and initializes its inner<a name="line.51"></a>
55 <FONT color="green">052</FONT> * chromosome list.<a name="line.52"></a>
56 <FONT color="green">053</FONT> *<a name="line.53"></a>
57 <FONT color="green">054</FONT> * @param populationLimit maximal size of the population<a name="line.54"></a>
58 <FONT color="green">055</FONT> * @param elitismRate<a name="line.55"></a>
59 <FONT color="green">056</FONT> * how many best chromosomes will be directly transferred to the<a name="line.56"></a>
60 <FONT color="green">057</FONT> * next generation [in %]<a name="line.57"></a>
61 <FONT color="green">058</FONT> */<a name="line.58"></a>
62 <FONT color="green">059</FONT> public ElitisticListPopulation(int populationLimit, double elitismRate) {<a name="line.59"></a>
63 <FONT color="green">060</FONT> super(populationLimit);<a name="line.60"></a>
64 <FONT color="green">061</FONT> this.elitismRate = elitismRate;<a name="line.61"></a>
65 <FONT color="green">062</FONT> }<a name="line.62"></a>
66 <FONT color="green">063</FONT> <a name="line.63"></a>
67 <FONT color="green">064</FONT> /**<a name="line.64"></a>
68 <FONT color="green">065</FONT> * Start the population for the next generation. The<a name="line.65"></a>
69 <FONT color="green">066</FONT> * &lt;code&gt;{@link #elitismRate}&lt;code&gt; percents of the best<a name="line.66"></a>
70 <FONT color="green">067</FONT> * chromosomes are directly copied to the next generation.<a name="line.67"></a>
71 <FONT color="green">068</FONT> *<a name="line.68"></a>
72 <FONT color="green">069</FONT> * @return the beginnings of the next generation.<a name="line.69"></a>
73 <FONT color="green">070</FONT> */<a name="line.70"></a>
74 <FONT color="green">071</FONT> public Population nextGeneration() {<a name="line.71"></a>
75 <FONT color="green">072</FONT> // initialize a new generation with the same parameters<a name="line.72"></a>
76 <FONT color="green">073</FONT> ElitisticListPopulation nextGeneration = new ElitisticListPopulation(this.getPopulationLimit(), this.getElitismRate());<a name="line.73"></a>
77 <FONT color="green">074</FONT> <a name="line.74"></a>
78 <FONT color="green">075</FONT> List&lt;Chromosome&gt; oldChromosomes = this.getChromosomes();<a name="line.75"></a>
79 <FONT color="green">076</FONT> Collections.sort(oldChromosomes);<a name="line.76"></a>
80 <FONT color="green">077</FONT> <a name="line.77"></a>
81 <FONT color="green">078</FONT> // index of the last "not good enough" chromosome<a name="line.78"></a>
82 <FONT color="green">079</FONT> int boundIndex = (int) Math.ceil((1.0 - this.getElitismRate()) * oldChromosomes.size());<a name="line.79"></a>
83 <FONT color="green">080</FONT> for (int i=boundIndex; i&lt;oldChromosomes.size(); i++) {<a name="line.80"></a>
84 <FONT color="green">081</FONT> nextGeneration.addChromosome(oldChromosomes.get(i));<a name="line.81"></a>
85 <FONT color="green">082</FONT> }<a name="line.82"></a>
86 <FONT color="green">083</FONT> return nextGeneration;<a name="line.83"></a>
87 <FONT color="green">084</FONT> }<a name="line.84"></a>
88 <FONT color="green">085</FONT> <a name="line.85"></a>
89 <FONT color="green">086</FONT> /**<a name="line.86"></a>
90 <FONT color="green">087</FONT> * Sets the elitism rate, i.e. how many best chromosomes will be directly<a name="line.87"></a>
91 <FONT color="green">088</FONT> * transferred to the next generation [in %].<a name="line.88"></a>
92 <FONT color="green">089</FONT> *<a name="line.89"></a>
93 <FONT color="green">090</FONT> * @param elitismRate<a name="line.90"></a>
94 <FONT color="green">091</FONT> * how many best chromosomes will be directly transferred to the<a name="line.91"></a>
95 <FONT color="green">092</FONT> * next generation [in %]<a name="line.92"></a>
96 <FONT color="green">093</FONT> */<a name="line.93"></a>
97 <FONT color="green">094</FONT> public void setElitismRate(double elitismRate) {<a name="line.94"></a>
98 <FONT color="green">095</FONT> if (elitismRate &lt; 0 || elitismRate &gt; 1)<a name="line.95"></a>
99 <FONT color="green">096</FONT> throw new IllegalArgumentException("Elitism rate has to be in [0,1]");<a name="line.96"></a>
100 <FONT color="green">097</FONT> this.elitismRate = elitismRate;<a name="line.97"></a>
101 <FONT color="green">098</FONT> }<a name="line.98"></a>
102 <FONT color="green">099</FONT> <a name="line.99"></a>
103 <FONT color="green">100</FONT> /**<a name="line.100"></a>
104 <FONT color="green">101</FONT> * Access the elitism rate.<a name="line.101"></a>
105 <FONT color="green">102</FONT> * @return the elitism rate<a name="line.102"></a>
106 <FONT color="green">103</FONT> */<a name="line.103"></a>
107 <FONT color="green">104</FONT> public double getElitismRate() {<a name="line.104"></a>
108 <FONT color="green">105</FONT> return this.elitismRate;<a name="line.105"></a>
109 <FONT color="green">106</FONT> }<a name="line.106"></a>
110 <FONT color="green">107</FONT> <a name="line.107"></a>
111 <FONT color="green">108</FONT> }<a name="line.108"></a>
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 </PRE>
173 </BODY>
174 </HTML>