source: cpp/frams/_demos/printconvmap.cpp @ 732

Last change on this file since 732 was 732, checked in by Maciej Komosinski, 6 years ago

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.

  • Property svn:eol-style set to native
File size: 2.4 KB
RevLine 
[286]1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
[732]2// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
[286]3// See LICENSE.txt for details.
[109]4
5#include "printconvmap.h"
6#include <stdio.h>
7#include <frams/util/multimap.h>
[732]8#include <frams/model/model.h>
[109]9
10#define GEN1MAX 15
11
[732]12void printN(const char* t, int maxlen)
[109]13{
[732]14        while (maxlen-- > 0)
15                if (*t) putchar(*(t++));
16                else putchar(' ');
[109]17}
18
[732]19void printN(char t, int maxlen)
[109]20{
[732]21        while (maxlen-- > 0) putchar(t);
[109]22}
23
[732]24void printmapping(const char* gen1, int len1, const MultiRange &mr, const char* gen2, int len2)
[109]25{
[732]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');
[109]36}
37
38void stripstring(SString &str)
39{
[732]40        char *t = str.directWrite();
41        for (; *t; t++)
42                if (strchr("\n\r\t", *t)) *t = ' ';
[109]43}
44
[732]45void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map)
[109]46{
[732]47        int y, y2, len1;
48        int id = 0;
49        if (map.isEmpty())
[109]50        {
[732]51                printf("{ empty }\n");
52                return;
[109]53        }
[732]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)
[109]68        {
[732]69                if (y < begin)
[109]70                {
[732]71                        mr = &emptyrange;
72                        y2 = begin;
[109]73                }
[732]74                else if (y > end)
[109]75                {
[732]76                        mr = &emptyrange;
77                        y2 = len1;
[109]78                }
[732]79                else    {
80                        id = map.findMappingId(y);
81                        mr = &map.getMapping(id)->to;
82                        y2 = map.getMapping(id + 1)->begin;
[109]83                }
[732]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;
[109]88        }
89}
90
[732]91const MultiMap & getModelDisplayMap()
[109]92{
[732]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;
[109]104}
[732]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 TracBrowser for help on using the repository browser.