<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[nochmal genetische algorythmen diemal in c++]]></title><description><![CDATA[<p>so habe soweit meinen algorythmus fertig mein problem aber er kommt zu keiner lösung der vorher in ansi c kam zu einer lösung was mache ich falsch?<br />
Quellcode:main</p>
<pre><code class="language-cpp">#include &quot;inout.h&quot;

int main (int argc, char *argv[])
{

    int a;
    cout&lt;&lt;&quot;Zahl: &quot;;
    cin&gt;&gt;Zahl;

    POP pop;
    pop.setsize(5);
    pop.pop_init();

    pop.check_Fitness();
    while(1){
            if(pop.return_best_fitness()&gt;-5){//wenn die fitness in einem grenzwert ist ausgeben
                string out=pop.return_best_genes();
                cout&lt;&lt;&quot;Fitness : &quot;&lt;&lt;pop.return_best_fitness()&lt;&lt;endl;
                cout&lt;&lt;out&lt;&lt;endl;
            }

            pop.find_the_best();
            pop.changeGenes();
            pop.mutate(0.2);
            pop.check_Fitness();
             string out=pop.return_best_genes();
             cout&lt;&lt;&quot;Fitness : &quot;&lt;&lt;pop.return_best_fitness()&lt;&lt;endl;

            if((pop.return_best_fitness()==0)){//wenn fitness 0 abbrechen und ausgeben
                cout&lt;&lt;&quot;Fitness ist 0 abbruch\n&quot;&lt;&lt;&quot;Gene der Zahl:&quot;&lt;&lt;endl;
                break;
            }
    }
    string out=pop.return_best_genes();
    cout&lt;&lt;out.data()&lt;&lt;endl;
  return 0;
}  /* main()*/

void swap(int *pa,int *pb)
{
   int tmp=*pa;
   *pa=*pb;
   *pb=tmp;
}
</code></pre>
<p>so jetzt meine inout.h header:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;

#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include &lt;string&gt;
#define drand()  (rand()*(1.0/(RAND_MAX +1.0)))
#
void swap(int *pa,int *pb);
int Zahl;
using namespace std;

class IND{
    public:
        void ind_init(){
            for(int i=0;i&lt;5;i++){//es gib nur die 5 Gene
                genes[i]=Zahl*drand() ;

            }
        }

        void ind_fitness(){
            int sum=0;
            for(int i=0;i&lt;5;i++){
                sum=sum+genes[i];
            }
            if(sum==Zahl){
                fitness=abs(sum-Zahl);
            }
            else
                fitness=-abs(sum-Zahl);
        }
        void ind_mutate(double prob){
            if (drand() &gt;= prob) return;
            do genes[(int)(5 *drand())] = (int)(Zahl *drand());
            while (drand() &lt; prob);
        }

        string ind_genes_return(){
            string output;
            for(int i=0;i&lt;5;i++){
            output=output.data()+genes[i];
            }
            return output;
        }

        string ind_fitness_return(){
            string output;
            output=fitness;
            return output;
        }

    public:
        int fitness;
        int n;
        int genes[5];
};
class POP{
    public:
        void pop_init(){
            srand (time(NULL));
            best.fitness=0;

            for(int i=0;i&lt;size;i++){
            best.genes[i]=0;
            inds[i].n=i;
            inds[i].ind_init();
            }
        }
    void find_the_best(){
        for(int obergrenze=5;obergrenze&gt;0;--obergrenze)
            {
                for(int pos=0;pos&lt;4;pos++)
                {

                    if(inds[pos].fitness&gt;inds[pos+1].fitness){
                    swap(inds[pos].genes,inds[pos+1].genes);
                    swap(&amp;inds[pos].fitness,&amp;inds[pos+1].fitness);
                    }

                }
            }
        best=inds[0];
    }

    void changeGenes(){
        int i,t;
        for (int i = 0; i &lt; size-2; i += 2) {
        i=(rand() %5);

        t              = inds[i].genes[i];
        inds[i].genes[i] = inds[i+1].genes[i];
        inds[i+1].genes[i] = t;
        }
    }

    void check_Fitness(){
        for(int i=0;i&lt;size;i++){
            inds[i].ind_fitness();
            }
    }

    void mutate(double prob){
        for(int i=0;i&lt;size;i++){
            inds[i].ind_mutate(prob);
        }
        inds[0]=best;
    }

    void setsize(int i){
        size=i;
    }

    string return_best_genes(){
        string output;
        char buffer[20];
        for(int i=0;i&lt;5;i++){
        sprintf(buffer,&quot;%d&quot;,best.genes[i]);

        output.append(buffer);
        output.append(&quot; &quot;);
        }
        return output;
    }
    int return_best_fitness(){
        return best.fitness;
    }

    public:
        int size;
        IND inds[5];
        IND best;
};

                        /* (population) */

#endif // INOUT_H_INCLUDED
</code></pre>
<p>schonmal danek für eure antworten und entschuldigung dass der quelltext so lang ist aber ich weiß einfach ni woran dass liegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258836/nochmal-genetische-algorythmen-diemal-in-c</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 02:21:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258836.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jan 2010 17:44:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Fri, 15 Jan 2010 17:48:42 GMT]]></title><description><![CDATA[<p>so habe soweit meinen algorythmus fertig mein problem aber er kommt zu keiner lösung der vorher in ansi c kam zu einer lösung was mache ich falsch?<br />
Quellcode:main</p>
<pre><code class="language-cpp">#include &quot;inout.h&quot;

int main (int argc, char *argv[])
{

    int a;
    cout&lt;&lt;&quot;Zahl: &quot;;
    cin&gt;&gt;Zahl;

    POP pop;
    pop.setsize(5);
    pop.pop_init();

    pop.check_Fitness();
    while(1){
            if(pop.return_best_fitness()&gt;-5){//wenn die fitness in einem grenzwert ist ausgeben
                string out=pop.return_best_genes();
                cout&lt;&lt;&quot;Fitness : &quot;&lt;&lt;pop.return_best_fitness()&lt;&lt;endl;
                cout&lt;&lt;out&lt;&lt;endl;
            }

            pop.find_the_best();
            pop.changeGenes();
            pop.mutate(0.2);
            pop.check_Fitness();
             string out=pop.return_best_genes();
             cout&lt;&lt;&quot;Fitness : &quot;&lt;&lt;pop.return_best_fitness()&lt;&lt;endl;

            if((pop.return_best_fitness()==0)){//wenn fitness 0 abbrechen und ausgeben
                cout&lt;&lt;&quot;Fitness ist 0 abbruch\n&quot;&lt;&lt;&quot;Gene der Zahl:&quot;&lt;&lt;endl;
                break;
            }
    }
    string out=pop.return_best_genes();
    cout&lt;&lt;out.data()&lt;&lt;endl;
  return 0;
}  /* main()*/

void swap(int *pa,int *pb)
{
   int tmp=*pa;
   *pa=*pb;
   *pb=tmp;
}
</code></pre>
<p>so jetzt meine inout.h header:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;

#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include &lt;string&gt;
#define drand()  (rand()*(1.0/(RAND_MAX +1.0)))
#
void swap(int *pa,int *pb);
int Zahl;
using namespace std;

class IND{
    public:
        void ind_init(){
            for(int i=0;i&lt;5;i++){//es gib nur die 5 Gene
                genes[i]=Zahl*drand() ;

            }
        }

        void ind_fitness(){
            int sum=0;
            for(int i=0;i&lt;5;i++){
                sum=sum+genes[i];
            }
            if(sum==Zahl){
                fitness=abs(sum-Zahl);
            }
            else
                fitness=-abs(sum-Zahl);
        }
        void ind_mutate(double prob){
            if (drand() &gt;= prob) return;
            do genes[(int)(5 *drand())] = (int)(Zahl *drand());
            while (drand() &lt; prob);
        }

        string ind_genes_return(){
            string output;
            for(int i=0;i&lt;5;i++){
            output=output.data()+genes[i];
            }
            return output;
        }

        string ind_fitness_return(){
            string output;
            output=fitness;
            return output;
        }

    public:
        int fitness;
        int n;
        int genes[5];
};
class POP{
    public:
        void pop_init(){
            srand (time(NULL));
            best.fitness=0;

            for(int i=0;i&lt;size;i++){
            best.genes[i]=0;
            inds[i].n=i;
            inds[i].ind_init();
            }
        }
    void find_the_best(){
        for(int obergrenze=5;obergrenze&gt;0;--obergrenze)
            {
                for(int pos=0;pos&lt;4;pos++)
                {

                    if(inds[pos].fitness&gt;inds[pos+1].fitness){
                    swap(inds[pos].genes,inds[pos+1].genes);
                    swap(&amp;inds[pos].fitness,&amp;inds[pos+1].fitness);
                    }

                }
            }
        best=inds[0];
    }

    void changeGenes(){
        int i,t;
        for (int i = 0; i &lt; size-2; i += 2) {
        i=(rand() %5);

        t              = inds[i].genes[i];
        inds[i].genes[i] = inds[i+1].genes[i];
        inds[i+1].genes[i] = t;
        }
    }

    void check_Fitness(){
        for(int i=0;i&lt;size;i++){
            inds[i].ind_fitness();
            }
    }

    void mutate(double prob){
        for(int i=0;i&lt;size;i++){
            inds[i].ind_mutate(prob);
        }
        inds[0]=best;
    }

    void setsize(int i){
        size=i;
    }

    string return_best_genes(){
        string output;
        char buffer[20];
        for(int i=0;i&lt;5;i++){
        sprintf(buffer,&quot;%d&quot;,best.genes[i]);

        output.append(buffer);
        output.append(&quot; &quot;);
        }
        return output;
    }
    int return_best_fitness(){
        return best.fitness;
    }

    public:
        int size;
        IND inds[5];
        IND best;
};

                        /* (population) */

#endif // INOUT_H_INCLUDED
</code></pre>
<p>schonmal danek für eure antworten und entschuldigung dass der quelltext so lang ist aber ich weiß einfach ni woran dass liegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839437</guid><dc:creator><![CDATA[klg71]]></dc:creator><pubDate>Fri, 15 Jan 2010 17:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Fri, 15 Jan 2010 17:53:24 GMT]]></title><description><![CDATA[<p>Was funktioniert denn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839441</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Fri, 15 Jan 2010 17:53:24 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Fri, 15 Jan 2010 17:56:04 GMT]]></title><description><![CDATA[<p>nja die fitness wird leider ni 0 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839443</guid><dc:creator><![CDATA[klg71]]></dc:creator><pubDate>Fri, 15 Jan 2010 17:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 05:50:46 GMT]]></title><description><![CDATA[<p>klg71 schrieb:</p>
<blockquote>
<p>so habe soweit meinen algorythmus fertig</p>
</blockquote>
<p>Das heißt &quot;Algorithmus&quot; mit i.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839600</guid><dc:creator><![CDATA[nursoamrande]]></dc:creator><pubDate>Sat, 16 Jan 2010 05:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 06:25:26 GMT]]></title><description><![CDATA[<p>Erst mal solltest du deinen Code ordenlich einrücken, damit man es lesen kann.<br />
Dann solltest du dich mal mit nem Debugger beschäftigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839602</guid><dc:creator><![CDATA[nursoamstadtrande]]></dc:creator><pubDate>Sat, 16 Jan 2010 06:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 08:36:48 GMT]]></title><description><![CDATA[<p>dein code ist zum kotzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839618</guid><dc:creator><![CDATA[^^^^^]]></dc:creator><pubDate>Sat, 16 Jan 2010 08:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 13:32:44 GMT]]></title><description><![CDATA[<p>nja habt ihr ahnung von genetischen algorithmen? oder soll ich den thread in rechtschreibreform umbenennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839749</guid><dc:creator><![CDATA[klg71]]></dc:creator><pubDate>Sat, 16 Jan 2010 13:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 13:52:10 GMT]]></title><description><![CDATA[<p>Kannste gerne machen, die Kritik an deinem Code bleibt bestehen. Ich verstehe nicht wie Leute mit so einem Code arbeiten können. Da guckt man drüber und möchte sich sofort die Augen ausstechen. Hau den erstmal ordentlich in den Thread, dann kann man weiter gucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839756</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 16 Jan 2010 13:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 13:57:59 GMT]]></title><description><![CDATA[<p>Der Code ist zwar nicht besonders gut lesbar, aber es fällt sofort auf, dass das swap zwei int vertauscht, du wendest es aber auf ein 5-elementiges Array von int (genes) an. Ist das Absicht, dass nur jeweils das erste Element des genes-Arrays vertauscht wird? Falls ja, würde ich das explizit machen: swap(&amp;...genes[0], ...). Falls nicht, haben wir deinen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839759</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 16 Jan 2010 13:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 14:34:21 GMT]]></title><description><![CDATA[<p>klg71 schrieb:</p>
<blockquote>
<p>nja habt ihr ahnung von genetischen algorithmen? oder soll ich den thread in rechtschreibreform umbenennen?</p>
</blockquote>
<p>Aber du...</p>
<blockquote>
<pre><code class="language-cpp">if(sum==Zahl){
                fitness=abs(sum-Zahl);
            }
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1839774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839774</guid><dc:creator><![CDATA[schlorf]]></dc:creator><pubDate>Sat, 16 Jan 2010 14:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 15:46:50 GMT]]></title><description><![CDATA[<p>schlorf schrieb:</p>
<blockquote>
<p>klg71 schrieb:</p>
<blockquote>
<p>nja habt ihr ahnung von genetischen algorithmen? oder soll ich den thread in rechtschreibreform umbenennen?</p>
</blockquote>
<p>Aber du...</p>
<blockquote>
<pre><code class="language-cpp">if(sum==Zahl){
                fitness=abs(sum-Zahl);
            }
</code></pre>
</blockquote>
</blockquote>
<p>Wird wohl immer 0 rauskommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839816</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 16 Jan 2010 15:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 20:53:57 GMT]]></title><description><![CDATA[<p>ja soll es auch bloß dass passiert nie^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839942</guid><dc:creator><![CDATA[klg71]]></dc:creator><pubDate>Sat, 16 Jan 2010 20:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sat, 16 Jan 2010 23:28:11 GMT]]></title><description><![CDATA[<p>Zum Spass mal in C++ umgeschrieben</p>
<pre><code class="language-cpp">#ifndef INOUT_H_INCLUDED
#define INOUT_H_INCLUDED

#include &lt;cassert&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;numeric&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

template&lt;typename T&gt;
inline T random(T factor) { return factor * std::rand() / ( RAND_MAX + 1 ); }

class Individual
{
public:
    explicit Individual(std::size_t num_genes, int num_variants)
    {
        std::generate_n( std::back_inserter( genes ), num_genes, std::tr1::bind( random&lt;int&gt;, num_variants ) );
    }

	friend Individual make_individual(std::size_t num_genes, int num_variants)
    {
        return Individual( num_genes, num_variants );
    }

    int get_fitness(int optimum_value) const
    {
        return -std::abs( std::accumulate( genes.begin(), genes.end(), -optimum_value ) );
    }

    std::string get_genes() const
    {
        std::ostringstream result;
        std::copy( genes.begin(), genes.end(), std::ostream_iterator&lt;int&gt;( result, &quot; &quot; ) );
        return result.str();
    }

    void crossover(Individual&amp; other)
    {
        assert( genes.size() == other.genes.size() );
        using std::swap;
        std::size_t gene = random( genes.size() );
        swap( genes[ gene ], other.genes[ gene ] );
    }

    void mutate(int num_variants)
    {
        for ( std::size_t num_mutations = random( genes.size() ) + 1; num_mutations-- != 0; )
            genes[ random( genes.size() ) ] = random( num_variants );
    }

private:
    std::vector&lt;int&gt; genes;
};

class FitnessCompare : public std::binary_function&lt;Individual,Individual,bool&gt;
{
public:
    explicit FitnessCompare(int optimum) : optimum( optimum ) {}
    bool operator()(const Individual&amp; lhs, const Individual&amp; rhs)
    {
        return lhs.get_fitness( optimum ) &lt; rhs.get_fitness( optimum );
    }
private:
    int optimum;
};
class Population
{
public:
	Population(std::size_t num_individuals, std::size_t num_genes, int num_variants)
    {
        std::generate_n( std::back_inserter( individuals ), num_individuals, std::tr1::bind( make_individual, num_genes, num_variants ) );
    }

    const Individual&amp; best_individual(int optimum) const
    {
        return *std::max_element( individuals.begin(), individuals.end(), FitnessCompare( optimum ) );
    }

    void crossover()
    {
        for ( std::vector&lt;Individual&gt;::iterator individual = individuals.begin(); individual != individuals.end(); ++individual )
            individual-&gt;crossover( individuals[ random( individuals.size() ) ] );
    }

    void mutate(int num_variants, double prob)
    {
        for ( std::vector&lt;Individual&gt;::iterator individual = individuals.begin(); individual != individuals.end(); ++individual )
            if ( random( 1.0 ) &lt; prob )
                individual-&gt;mutate( num_variants );
    }

private:
    std::vector&lt;Individual&gt; individuals;
};

#endif // INOUT_H_INCLUDED

#include &quot;inout.h&quot;
#include &lt;ctime&gt;

int main()
{
    std::srand( static_cast&lt;unsigned&gt;( std::time( NULL ) ) );

    int num_individuals = 0; std::cout &lt;&lt; &quot;Anzahl Individuen: &quot;; std::cin &gt;&gt; num_individuals;
    int num_genes = 0;       std::cout &lt;&lt; &quot;Anzahl Gene: &quot;;       std::cin &gt;&gt; num_genes;
    int num_variants = 0;    std::cout &lt;&lt; &quot;Anzahl Varianten: &quot;;  std::cin &gt;&gt; num_variants;
    int optimum = 0;         std::cout &lt;&lt; &quot;Optimum: &quot;;           std::cin &gt;&gt; optimum;

    Population population( num_individuals, num_genes, num_variants );

    for ( ;; )
    {
        const Individual&amp; best = population.best_individual( optimum );
        int fitness = best.get_fitness( optimum );
        if ( fitness &gt; -num_genes )
        {
            std::cout &lt;&lt; &quot;Fitness : &quot; &lt;&lt; fitness &lt;&lt; '\n'
                      &lt;&lt; best.get_genes() &lt;&lt; std::endl;
            if ( fitness == 0 )
                break;
        }

        population.crossover();
        population.mutate( num_variants, 0.2 );
    }
}
</code></pre>
<p>Dabei ist mir dann aufgefallen, dass die changeGenes Funktion nicht funktionieren dürfte.<br />
Ohne Selektion ist das natürlich noch kein genetischer Algorithmus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839974</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 16 Jan 2010 23:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Sun, 17 Jan 2010 10:43:59 GMT]]></title><description><![CDATA[<p>das heist da muss noch eine auswahlfunktion rein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840061</guid><dc:creator><![CDATA[klg71]]></dc:creator><pubDate>Sun, 17 Jan 2010 10:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to nochmal genetische algorythmen diemal in c++ on Mon, 18 Jan 2010 07:41:32 GMT]]></title><description><![CDATA[<p>Die Auswahlwahrscheinlichkeit sollte in Abhängigkeit von ihrer Fitness stehen.<br />
D.h. je höher die Fitness, desto höher die Wahrscheinlichkeit, ausgewählt zu werden.</p>
<p>Ich nehme immer das Roulettewheel-Verfahren.<br />
Das geht aber nur solange gut, wie man von Inzucht weit entfernt ist. Wenn fast alle Elemente gleich sind, macht das keinen Spaß mehr. Insofern ist es manchmal auch besser, ein weniger &quot;perfektes&quot; Genome für Crossover zu nutzen, damit mal etwas &quot;frisches Blut&quot; in die Population kommt.</p>
<p>Ich logge immer die Durchschnittswerte und Standardabweichungen jedes Gens mit und kann so prüfen, ob sich<br />
a) der genetische Algorithmus an einzelnen Stellen auf einen bestimmten Wert festlegt ( ist auch eine Aussage )<br />
b) die Population sich der Inzucht nähert, wogegen man dann etwas unternehmen sollte. ( Paarungen mit einer anderen Population ( sofern vorhanden ), einkreuzen von neuen Genomen, Mutationsrate erhöhen, etc. )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840588</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Mon, 18 Jan 2010 07:41:32 GMT</pubDate></item></channel></rss>