<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Arial" size="2"><span style="font-size:10pt;">
<div>Dear Mr. Wall,</div>
<div>&nbsp;</div>
<div>in my work with your Library GALib, I experienced some problem while using GADemeGA:</div>
<div>&nbsp;</div>
<div>When using an arbitrary number of populations for deme (for example the default value of 10) in combination with an arbitrary number of individuals per population (which can be set via <font face="Consolas" size="2"><span style="font-size:9.5pt;">gaNpopulationSize</span></font>),
the number of populations for deme does (of course) not necessarily match the number of individuals in pop.</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>In the current version, <font face="Consolas" size="2"><span style="font-size:9.5pt;">GADemeGA::nPopulatio</span></font><font face="Consolas" size="2"><span style="font-size:9.5pt;"> </span></font><font face="Consolas" size="2"><span style="font-size:9.5pt;">with
n=npop</span></font> does not do anything but returning that value (GADemeGA.C - line 252).</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>So in some cases there could happen an access violation while initializing the GEDeme object due to the copy process <font face="Consolas" size="2"><span style="font-size:9.5pt;">pop-&gt;individual(i).copy(deme[i]-&gt;best())</span></font> (GADemeGA.C - line
335) when the number of individuals in pop is smaller then the number of populations in deme.</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>In my opinion the function <font face="Consolas" size="2" color="blue"><span style="font-size:9.5pt;">int</span></font><font face="Consolas" size="2" color="blue"><span style="font-size:9.5pt;"> </span></font><font face="Consolas" size="2"><span style="font-size:9.5pt;">GADemeGA::nPopulations(</span></font><font face="Consolas" size="2" color="blue"><span style="font-size:9.5pt;">unsigned</span></font><font face="Consolas" size="2"><span style="font-size:9.5pt;">
</span></font><font face="Consolas" size="2" color="blue"><span style="font-size:9.5pt;">int</span></font><font face="Consolas" size="2"><span style="font-size:9.5pt;"> n)</span></font> (GADemeGA.C - lines 250-299) should be changed according to the red annotations
below, to assure the numbers of populations and the individuals per population always fit each other (even when n=npop, where not necessarily npop=pop-&gt;size):</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2" color="blue"><span style="font-size:9.5pt;">int</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">GADemeGA::nPopulations(<font color="blue">unsigned</font> <font color="blue">int</font> n) {</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; <font color="blue">if</font>(n &lt; 1 <font color="red"><strike>|| n == npop</strike></font>) <font color="blue">return</font> npop;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; <font color="blue">if</font>(n &lt; npop) {</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">for</font>(<font color="blue">unsigned</font> <font color="blue">int</font> i=n; i&lt;npop; i&#43;&#43;)</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> deme[i];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; GAPopulation** ptmp = deme;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; deme = <font color="blue">new</font> GAPopulation* [n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; memcpy(deme, ptmp, n * <font color="blue">sizeof</font>(GAPopulation*));</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> [] ptmp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; GAStatistics* stmp = pstats;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; pstats = <font color="blue">new</font> GAStatistics[n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">for</font>(<font color="blue">unsigned</font> <font color="blue">int</font> j=0; j&lt;n; j&#43;&#43;)</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstats[j] = stmp[j];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> [] stmp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">int</font>* rtmp = nrepl;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; nrepl = <font color="blue">new</font> <font color="blue">int</font>[n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; memcpy(nrepl, rtmp, n * <font color="blue">sizeof</font>(<font color="blue">int</font>));</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> [] rtmp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; npop = n;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; }</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; <font color="blue">else</font> <font color="red">if (n &gt; npop) </font>{</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; GAPopulation** ptmp = deme;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; deme = <font color="blue">new</font> GAPopulation* [n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; memcpy(deme, ptmp, npop * <font color="blue">sizeof</font>(GAPopulation*));</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> [] ptmp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">for</font>(<font color="blue">unsigned</font> <font color="blue">int</font> i=npop; i&lt;n; i&#43;&#43;)</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deme[i] = <font color="blue">new</font> GAPopulation(*deme[GARandomInt(0,npop-1)]);</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; GAStatistics* stmp = pstats;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; pstats = <font color="blue">new</font> GAStatistics[n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">for</font>(<font color="blue">unsigned</font> <font color="blue">int</font> j=0; j&lt;npop; j&#43;&#43;)</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstats[j] = stmp[j];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">delete</font> [] stmp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">int</font>* rtmp = nrepl;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; nrepl = <font color="blue">new</font> <font color="blue">int</font>[n];</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; memcpy(nrepl, rtmp, npop * <font color="blue">sizeof</font>(<font color="blue">int</font>));</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; <font color="blue">for</font>(<font color="blue">unsigned</font> <font color="blue">int</font> k=npop; k&lt;n; k&#43;&#43;)</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nrepl[k] = nrepl[0];&nbsp;&nbsp;&nbsp; </span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp;&nbsp;&nbsp; npop = n;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; }</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; params.set(gaNnPopulations, (<font color="blue">unsigned</font> <font color="blue">int</font>)n);</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; pop-&gt;size(npop);</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">&nbsp; <font color="blue">return</font> npop;</span></font></div>
<div style="padding-left:35.4pt;"><font face="Consolas" size="2"><span style="font-size:9.5pt;">}</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>I am looking forward to receiving an answer with your opinion to this situation.</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>Best regards</div>
<div>&nbsp;</div>
<div>Tobias Nuißl</div>
<div>Technische IT · CAE-Werkzeuge · Programmentwicklung (ext.)</div>
<div>&nbsp;</div>
<div>Schaeffler Technologies AG &amp; Co. KG</div>
<div>Industriestraße 1-3</div>
<div>91074 Herzogenaurach (Germany)</div>
<div>Tel. &#43;49 9132 82-7575</div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;"><a href="mailto:nuisstbi@schaeffler.com"><font face="Arial" size="2" color="blue"><span style="font-size:10pt;"><u>mailto:nuisstbi@schaeffler.com</u></span></font></a><font size="2"><span style="font-size:10pt;">&nbsp;</span></font><font face="Arial" size="2"><span style="font-size:10pt;">
·&nbsp; </span></font><a href="http://www.ina.de/"><font face="Arial" size="2" color="blue"><span style="font-size:10pt;"><u>http://www.ina.de</u></span></font></a></span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div>Sitz: Herzogenaurach</div>
<div>Registergericht: AG Fürth HRA 9349</div>
<div>&nbsp;</div>
<div>Persönlich haftende Gesellschafterin: Schaeffler AG</div>
<div>Sitz: Herzogenaurach </div>
<div>Registergericht: AG Fürth HRB 13202 &nbsp;&nbsp;</div>
<div>&nbsp;</div>
<div>Executive Board: </div>
<div>Dr. Jürgen M. Geißinger (Vors.)*, Wolfgang Dangel*, Prof. Dr. Peter Gutzmer*,
<br>

Kurt Mirlach*, Klaus Rosenfeld*, Robert Schullan*, Norbert Indlekofer, Oliver Jung, Prof. Dr. Peter Pleus, Dr. Gerhard Schuff<br>

<font size="1"><span style="font-size:8pt;">*Vorstand</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div><font size="1"><span style="font-size:8pt;">Diese Information ist für den Gebrauch durch die Person oder die Firma/Organisation bestimmt, die in der Empfängeradresse benannt ist und unterliegt u. U. dem Betriebsgeheimnis, dem Schutz von Arbeitsergebnissen
oder anderweitigem rechtlichen Schutz. Wenn Sie nicht der angegebene Empfänger sind, nehmen Sie bitte zur Kenntnis, dass Weitergabe, Kopieren, Verteilung oder Nutzung des Inhalts dieser E-Mail-Übertragung unzulässig ist. Falls Sie diese E-Mail irrtümlich erhalten
haben, benachrichtigen Sie den Absender bitte unverzüglich telefonisch oder durch eine E-Mail und löschen Sie diese Information aus Ihrem EDV-System.</span></font></div>
<div><font size="1"><span style="font-size:8pt;">&nbsp;</span></font></div>
<div><font size="1"><span style="font-size:8pt;">This e-mail message is intended only for the use of the named recipient(s) and contains information which may be confidential or privileged. If you are not the intended recipient, be aware that any distribution,
or use of the contents of this information is prohibited. If you have received this electronic transmission in error, please notify the sender and delete the material from the computer.</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
</span></font>
</body>
</html>