Import the pre-trained model via string.
| 831 | |
| 832 | // Import the pre-trained model via string. |
| 833 | Lycoris *loadViaString(const std::string &model, uint32_t capacity) { |
| 834 | auto data = LycorisUtils::split(model); |
| 835 | auto source = new Individual(); |
| 836 | source->inputNum = uint32_t(std::stoul(data[0])); |
| 837 | source->outputNum = uint32_t(std::stoul(data[1])); |
| 838 | source->innovationNum = uint32_t(std::stoul(data[2])); |
| 839 | source->nodeSum = uint32_t(std::stoul(data[3])); |
| 840 | source->fitness = std::stof(data[4]); |
| 841 | |
| 842 | source->nodeSlice = new std::vector<uint32_t>(std::stoul(data[5])); |
| 843 | uint32_t pointer = 6; |
| 844 | for (uint32_t i = 0; i < std::stoul(data[5]); ++i) { |
| 845 | (*(source->nodeSlice))[i] = uint32_t(std::stoul(data[pointer])); |
| 846 | pointer++; |
| 847 | } |
| 848 | |
| 849 | auto mapLength = uint32_t(std::stoul(data[pointer])); |
| 850 | pointer++; |
| 851 | source->nodeMap = new std::map<uint32_t, Node *>(); |
| 852 | for (uint32_t i = 0; i < mapLength; ++i) { |
| 853 | auto key = uint32_t(std::stoul(data[pointer])); |
| 854 | pointer++; |
| 855 | auto temp1 = data[pointer]; |
| 856 | pointer++; |
| 857 | auto temp2 = data[pointer]; |
| 858 | pointer++; |
| 859 | auto n = new Node(uint32_t(std::stoul(temp1)), uint32_t(std::stoul(temp2))); |
| 860 | n->value = std::stof(data[pointer]); |
| 861 | pointer++; |
| 862 | n->bias = std::stof(data[pointer]); |
| 863 | pointer++; |
| 864 | |
| 865 | auto genomeLength = uint32_t(std::stoul(data[pointer])); |
| 866 | pointer++; |
| 867 | for (uint32_t j = 0; j < genomeLength; ++j) { |
| 868 | Gen g; |
| 869 | g.in = uint32_t(std::stoul(data[pointer])); |
| 870 | pointer++; |
| 871 | g.out = uint32_t(std::stoul(data[pointer])); |
| 872 | pointer++; |
| 873 | Ome o; |
| 874 | o.weight = std::stof(data[pointer]); |
| 875 | pointer++; |
| 876 | o.innovationNum = uint32_t(std::stoul(data[pointer])); |
| 877 | pointer++; |
| 878 | (*(n->genomeMap))[g] = o; |
| 879 | } |
| 880 | |
| 881 | (*(source->nodeMap))[key] = n; |
| 882 | } |
| 883 | |
| 884 | auto layerSize = uint32_t(std::stoul(data[pointer])); |
| 885 | pointer++; |
| 886 | for (uint32_t i = 0; i < layerSize; ++i) { |
| 887 | source->layers.push_back(uint32_t(std::stoul(data[pointer]))); |
| 888 | pointer++; |
| 889 | } |
| 890 |