Changeset 739 for cpp/frams/_demos


Ignore:
Timestamp:
02/18/18 02:54:36 (7 years ago)
Author:
Maciej Komosinski
Message:

Unlimited number of model Parts/Joints/Neurons? when displaying the genotype-to-phenotype mapping

Location:
cpp/frams/_demos
Files:
3 edited

Legend:

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

    r732 r739  
    116116}
    117117
     118static int goodWidthForFormat(int genotype_format)
     119{
     120        return genotype_format == '0' ? 45 : 15; // more space for long f0 lines
     121}
     122
    118123// arguments:
    119124//     genotype (or - meaning "read from stdin") [default: X]
     
    182187                        printf("Conversion map:\n");
    183188                        m.print();
    184                         printConvMap(g1.getGenes(), g2.getGenes(), m);
     189                        printConvMap(g1.getGenes(), g2.getGenes(), m, goodWidthForFormat(g1.getFormat()));
    185190                        printf("Reverse conversion map:\n");
    186191                        MultiMap rm;
    187192                        rm.addReversed(m);
    188193                        rm.print();
    189                         printConvMap(g2.getGenes(), g1.getGenes(), rm);
     194                        printConvMap(g2.getGenes(), g1.getGenes(), rm, goodWidthForFormat(g2.getFormat()));
    190195                }
    191196
    192197                Model mod1(g1, 1);
    193198                printf("\nModel map for f%c genotype:\n", g1.getFormat());
    194                 printModelMap(g1.getGenes(), mod1.getMap());
     199                ModelDisplayMap dm1(mod1);
     200                dm1.print(goodWidthForFormat(g1.getFormat()));
    195201                MultiMap mod1combined;
    196                 mod1combined.addCombined(mod1.getMap(), getModelDisplayMap());
     202                mod1combined.addCombined(mod1.getMap(), dm1.getMap());
    197203                mod1combined.print();
    198204                Model mod2(g2, 1);
    199205                printf("\nModel map for f%c genotype:\n", g2.getFormat());
    200                 printModelMap(g2.getGenes(), mod2.getMap());
     206                ModelDisplayMap dm2(mod2);
     207                dm2.print(goodWidthForFormat(g2.getFormat()));
    201208                MultiMap mod2combined;
    202                 mod2combined.addCombined(mod2.getMap(), getModelDisplayMap());
     209                mod2combined.addCombined(mod2.getMap(), dm2.getMap());
    203210                mod2combined.print();
    204211        }
  • cpp/frams/_demos/printconvmap.cpp

    r732 r739  
    55#include "printconvmap.h"
    66#include <stdio.h>
    7 #include <frams/util/multimap.h>
    8 #include <frams/model/model.h>
    9 
    10 #define GEN1MAX 15
    117
    128void printN(const char* t, int maxlen)
     
    2218}
    2319
    24 void printmapping(const char* gen1, int len1, const MultiRange &mr, const char* gen2, int len2)
     20void printmapping(const char* gen1, int len1, const MultiRange &mr, const char* gen2, int len2, int left_column_padding)
    2521{
    26         printN(' ', GEN1MAX - len1);
     22        printN(' ', left_column_padding - len1);
    2723        printN(gen1, len1);
    2824        printf(" : ");
     
    4339}
    4440
    45 void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map)
     41void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map, int left_column_padding)
    4642{
    4743        int y, y2, len1;
     
    6157        MultiRange *mr;
    6258        MultiRange emptyrange;
    63         printN(' ', GEN1MAX);
     59        printN(' ', left_column_padding);
    6460        printf("   %s\n", g2.c_str());
    6561        int begin = map.getBegin();
     
    8278                        y2 = map.getMapping(id + 1)->begin;
    8379                }
    84                 if ((y2 - y) > GEN1MAX) y2 = y + GEN1MAX;
     80                if ((y2 - y) > left_column_padding) y2 = y + left_column_padding;
    8581                if (y2 > (y + len1)) y2 = y + len1;
    86                 printmapping(g + y, y2 - y, *mr, g2.c_str(), g2.len());
     82                printmapping(g + y, y2 - y, *mr, g2.c_str(), g2.len(), left_column_padding);
    8783                y = y2;
    8884        }
    8985}
    9086
    91 const MultiMap & getModelDisplayMap()
     87ModelDisplayMap::ModelDisplayMap(Model &m)
     88        :model(m)
    9289{
    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;
     90        joint_offset = max(10, (int(9 + model.getPartCount()) / 10) * 10);
     91        neuron_offset = joint_offset + max(10, (int(9 + model.getJointCount()) / 10) * 10);
     92        max_element = neuron_offset + max(10, (int(9 + model.getNeuroCount()) / 10) * 10);
     93        for (int i = 0; i < model.getPartCount(); i++)
     94                map.add(Model::partToMap(i), Model::partToMap(i), i, i);
     95        for (int i = 0; i < model.getJointCount(); i++)
     96                map.add(Model::jointToMap(i), Model::jointToMap(i), joint_offset + i, joint_offset + i);
     97        for (int i = 0; i < model.getNeuroCount(); i++)
     98                map.add(Model::neuroToMap(i), Model::neuroToMap(i), neuron_offset + i, neuron_offset + i);
    10499}
    105100
    106 void printModelMap(const SString& gen1, const MultiMap& map)
     101void ModelDisplayMap::print(int left_column_padding)
    107102{
    108103        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);
     104        combined_map.addCombined(model.getMap(), getMap());
     105        static const SString t09("0123456789");
     106        SString g;
     107        for (int i = 0; i < max_element; i += 10)
     108                g += t09;
     109        printN(' ', left_column_padding);
     110        printf("   Parts     ");
     111        printN(' ', joint_offset - 10);
     112        printf("Joints    ");
     113        printN(' ', (neuron_offset - joint_offset) - 10);
     114        printf("Neurons\n");
     115        printConvMap(model.getGeno().getGenes(), g, combined_map, left_column_padding);
    114116}
  • cpp/frams/_demos/printconvmap.h

    r732 r739  
    77
    88#include <frams/util/sstring.h>
     9#include <frams/model/model.h>
     10#include <frams/util/multimap.h>
    911
    1012class MultiMap;
    1113
    12 void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map);
    13 void printModelMap(const SString& gen1, const MultiMap& map); //automaticaly combines the map with the ModelDisplayMap
    14 const MultiMap & getModelDisplayMap(); // mapping: true model -> display (so the regular map printing/debugging tools can be used for model maps, avoiding invonveniently huge numbers)
     14void printConvMap(const SString& gen1, const SString& gen2, const MultiMap& map, int left_column_padding = 15);
     15
     16class ModelDisplayMap
     17{
     18        MultiMap map;
     19        Model &model;
     20        int joint_offset, neuron_offset, max_element;
     21public:
     22        ModelDisplayMap(Model &m);
     23        void print(int left_column_padding = 15);
     24        const MultiMap & getMap() { return map; } //mapping: true model -> display (so the regular map printing/debugging tools can be used for model maps, avoiding invonveniently huge numbers)
     25};
    1526
    1627#endif
Note: See TracChangeset for help on using the changeset viewer.