// Получение входов нейросети (входы первого слоя) private NodeNet[] GetInputNodesNet(string s_NameFirstLayer) { // Получение входных узлов из БЗ SparqlResultSet s_InputNodesNet = (SparqlResultSet)g_Graph.ExecuteQuery(GetRequests("getinputnodesnet", s_NameFirstLayer)); // Массив узлов NodeNet[] n_Nodes = new NodeNet[s_InputNodesNet.Count]; // Просмотр каждого узла и получение информации для него for (int i = 0; i < s_InputNodesNet.Count; i++) { // Имя узла string s_NameNode = GetName(s_InputNodesNet[i]["input"]); // Label узла string s_Label = s_InputNodesNet[i]["label"].ToString(); // Связанные узлы (для входов сети нет) string[] s_NamesLinkedNodes = null; // Имя оператора (для входов сети нет) string s_NameOperator = ""; // Значение для оператора (для входов сети нет) double d_Value = 0; // Создание узла n_Nodes[i] = new NodeNet(s_NameNode, s_Label, s_NamesLinkedNodes, s_NameOperator, d_Value); } return(n_Nodes); }
// Получение конкретного смещения private static double GetOffset(NodeNet n_Node) { double d_Offset; switch (n_Node.GetNameOperator) { case "ins:less": d_Offset = n_Node.GetValue; break; case "ins:more": d_Offset = -n_Node.GetValue; break; case "ins:or": d_Offset = -0.5; break; case "ins:and": d_Offset = -n_Node.GetNamesLinkedNodes.Length + 0.5; break; case "ins:equal": d_Offset = 0.5; break; default: d_Offset = 0; break; } return(d_Offset); }
// Получение выходов любого слоя private NodeNet[] GetOutputNodes(string s_NameLayer) { // Получение выходных узлов из БЗ SparqlResultSet s_OutputNodes = (SparqlResultSet)g_Graph.ExecuteQuery(GetRequests("getoutputnodes", s_NameLayer)); // Массив узлов NodeNet[] n_Nodes = new NodeNet[s_OutputNodes.Count]; // Просмотр каждого узла и получение информации для него for (int i = 0; i < s_OutputNodes.Count; i++) { // Имя узла string s_NameNode = GetName(s_OutputNodes[i]["output"]); // Label узла string s_Label = s_OutputNodes[i]["label"].ToString(); // Связанные узлы SparqlResultSet s_LinkedNodes = (SparqlResultSet)g_Graph.ExecuteQuery(GetRequests("getlinkednodes", s_NameNode)); string[] s_NamesLinkedNodes = new string[s_LinkedNodes.Count]; for (int j = 0; j < s_LinkedNodes.Count; j++) { s_NamesLinkedNodes[j] = GetName(s_LinkedNodes[j]["linked"]); } // Имя оператора SparqlResultSet s_Operator = (SparqlResultSet)g_Graph.ExecuteQuery(GetRequests("getoperator", s_NameNode)); string s_NameOperator = GetName(s_Operator[0]["operator"]); // Значение для оператора, если оператор or или and, то значение не получать double d_Value = 0; if (s_NameOperator != "ins:or" && s_NameOperator != "ins:and") { SparqlResultSet s_Value = (SparqlResultSet)g_Graph.ExecuteQuery(GetRequests("getvalue", s_NameNode)); d_Value = Convert.ToDouble(s_Value[0]["value"].ToString()); } // Создание узла n_Nodes[i] = new NodeNet(s_NameNode, s_Label, s_NamesLinkedNodes, s_NameOperator, d_Value); } return(n_Nodes); }
// Получение конкретного веса private static double GetWeight(string s_InputName, NodeNet n_Node) { double d_Weight = 0; string s_Name = Array.Find(n_Node.GetNamesLinkedNodes, x => x == s_InputName); if (s_Name != null) { switch (n_Node.GetNameOperator) { case "ins:less": d_Weight = -1; break; case "ins:more": d_Weight = 1; break; case "ins:or": d_Weight = 1; break; case "ins:and": d_Weight = 1; break; case "ins:equal": d_Weight = -1; break; default: d_Weight = 0; break; } } return(d_Weight); }