MCPcopy Create free account
hub / github.com/RootHarold/Lycoris / loadViaString

Function loadViaString

LycorisNet/sources/lycoris.cpp:833–910  ·  view source on GitHub ↗

Import the pre-trained model via string.

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 1

cloneMethod · 0.45

Tested by

no test coverage detected