Ignore:
Timestamp:
02/15/18 00:42:07 (6 years ago)
Author:
Maciej Komosinski
Message:

Added support for "checkpoints" (intermediate phases of development of the Model when converting between genetic encodings). See Model.checkpoint() and conv_f1.cpp for an example.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/_demos/printconvmap.cpp

    r348 r732  
    11// This file is a part of Framsticks SDK.  http://www.framsticks.com/
    2 // Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
     2// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
    33// See LICENSE.txt for details.
    44
     
    66#include <stdio.h>
    77#include <frams/util/multimap.h>
     8#include <frams/model/model.h>
    89
    910#define GEN1MAX 15
    1011
    11 void printN(const char* t,int maxlen)
     12void printN(const char* t, int maxlen)
    1213{
    13 while(maxlen-- > 0)
    14         if (*t) putchar(*(t++));
    15         else putchar(' ');
     14        while (maxlen-- > 0)
     15                if (*t) putchar(*(t++));
     16                else putchar(' ');
    1617}
    1718
    18 void printN(char t,int maxlen)
     19void printN(char t, int maxlen)
    1920{
    20 while(maxlen-- > 0) putchar(t);
     21        while (maxlen-- > 0) putchar(t);
    2122}
    2223
    23 void printmapping(const char* gen1, int len1,const MultiRange &mr,const char* gen2,int len2)
     24void printmapping(const char* gen1, int len1, const MultiRange &mr, const char* gen2, int len2)
    2425{
    25 printN(' ',GEN1MAX-len1);
    26 printN(gen1,len1);
    27 printf(" : ");
    28 int i;
    29 for(i=0;i<len2;i++)
    30         if (mr.contains(i))
    31                 putchar(gen2[i]);
    32         else
    33                 putchar('.');
    34 putchar('\n');
     26        printN(' ', GEN1MAX - len1);
     27        printN(gen1, len1);
     28        printf(" : ");
     29        int i;
     30        for (i = 0; i < len2; i++)
     31                if (mr.contains(i))
     32                        putchar(gen2[i]);
     33                else
     34                        putchar('.');
     35        putchar('\n');
    3536}
    3637
    3738void stripstring(SString &str)
    3839{
    39 char *t=str.directWrite();
    40 for(;*t;t++)
    41         if (strchr("\n\r\t",*t)) *t=' ';
     40        char *t = str.directWrite();
     41        for (; *t; t++)
     42                if (strchr("\n\r\t", *t)) *t = ' ';
    4243}
    4344
    44 void printConvMap(const SString& gen1,const SString& gen2,const MultiMap& map)
     45void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map)
    4546{
    46 int y,y2,len1;
    47 int id=0;
    48 if (map.isEmpty())
     47        int y, y2, len1;
     48        int id = 0;
     49        if (map.isEmpty())
    4950        {
    50         printf("{ empty }\n");
    51         return;
     51                printf("{ empty }\n");
     52                return;
    5253        }
    53 len1=gen1.len();
    54 SString g1=gen1;
    55 stripstring(g1);
    56 SString g2=gen2;
    57 stripstring(g2);
    58 const char* g=g1.c_str();
    59 y=0;
    60 MultiRange *mr;
    61 MultiRange emptyrange;
    62 printN(' ',GEN1MAX);
    63 printf("   %s\n",g2.c_str());
    64 int begin=map.getBegin();
    65 int end=map.getEnd();
    66 while(y<len1)
     54        len1 = gen1.len();
     55        SString g1 = gen1;
     56        stripstring(g1);
     57        SString g2 = gen2;
     58        stripstring(g2);
     59        const char* g = g1.c_str();
     60        y = 0;
     61        MultiRange *mr;
     62        MultiRange emptyrange;
     63        printN(' ', GEN1MAX);
     64        printf("   %s\n", g2.c_str());
     65        int begin = map.getBegin();
     66        int end = map.getEnd();
     67        while (y < len1)
    6768        {
    68         if (y<begin)
     69                if (y < begin)
    6970                {
    70                 mr=&emptyrange;
    71                 y2=begin;
     71                        mr = &emptyrange;
     72                        y2 = begin;
    7273                }
    73         else if (y>end)
     74                else if (y > end)
    7475                {
    75                 mr=&emptyrange;
    76                 y2=len1;
     76                        mr = &emptyrange;
     77                        y2 = len1;
    7778                }
    78         else    {
    79                 id=map.findMappingId(y);
    80                 mr=&map.getMapping(id)->to;
    81                 y2=map.getMapping(id+1)->begin;
     79                else    {
     80                        id = map.findMappingId(y);
     81                        mr = &map.getMapping(id)->to;
     82                        y2 = map.getMapping(id + 1)->begin;
    8283                }
    83         if ((y2-y) > GEN1MAX) y2=y+GEN1MAX;
    84         if (y2>(y+len1)) y2=y+len1;
    85         printmapping(g+y,y2-y,*mr,g2.c_str(),g2.len());
    86         y=y2;
     84                if ((y2 - y) > GEN1MAX) y2 = y + GEN1MAX;
     85                if (y2 > (y + len1)) y2 = y + len1;
     86                printmapping(g + y, y2 - y, *mr, g2.c_str(), g2.len());
     87                y = y2;
    8788        }
    8889}
    8990
    90 void printModelMap(const SString& gen1,const MultiMap& map)
     91const MultiMap & getModelDisplayMap()
    9192{
    92 SString g2("012345678901234567890123456789");
    93 printN(' ',GEN1MAX);
    94 printf("   Parts     Joints    Neurons\n");
    95 printConvMap(gen1,g2,map);
     93        static MultiMap display_map;
     94        if (display_map.isEmpty())
     95        {
     96                for (int i = 0; i < 10; i++)
     97                {
     98                        display_map.add(Model::partToMap(i), Model::partToMap(i), i, i);
     99                        display_map.add(Model::jointToMap(i), Model::jointToMap(i), 10 + i, 10 + i);
     100                        display_map.add(Model::neuroToMap(i), Model::neuroToMap(i), 20 + i, 20 + i);
     101                }
     102        }
     103        return display_map;
    96104}
     105
     106void printModelMap(const SString& gen1, const MultiMap& map)
     107{
     108        MultiMap combined_map;
     109        combined_map.addCombined(map, getModelDisplayMap());
     110        SString g2("012345678901234567890123456789");
     111        printN(' ', GEN1MAX);
     112        printf("   Parts     Joints    Neurons\n");
     113        printConvMap(gen1, g2, combined_map);
     114}
Note: See TracChangeset for help on using the changeset viewer.