/*struct MatrixСобиратель * { * MatrixСмежная[][] смежность; * double matrix[,] matrix; * }*/ /// <summary> /// получение вероятностей /// </summary> /// <param name="смежность"></param> /// <param name="nod"></param> /// <param name="list"></param> /// <returns></returns> public bool getValues_editors(MatrixСмежная[][] смежность, Node_struct nod, List <Node_struct> list) { Node nodeclass = new Node(); double[] values = new double[nod.props.Count]; int n = смежность.Length; int m = смежность[0].Length; double[,] matrix = new double[n, m]; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < m; j++) { Node_struct idnod = смежность[i][j].nod; Propertys_struct nameprop = смежность[i][j].property; double v1 = getNodPropsValueEditor(list, idnod, nameprop); matrix[i, j] = v1; } } Console.WriteLine("down nod - " + nod.ID + " " + nod.Name); /*Parallel.For(0, m, (j, state) =>*/ for (int j = 0; j < m; j++) { for (int i = 1; i < n; i++) { /*if (nodeclass.getEstProperyTrueFix(смежность[i][j].nod.props) == false) * {*/ double a1 = matrix[0, j]; double a2 = matrix[i, j]; matrix[0, j] = a1 * a2; /*} * else if (смежность[i][j].property.proc100 == false) * { * matrix[0, j] = matrix[0, j] * 0; * }*/ } }//); for (int i = 0; i < values.Length; i++) { values[i] = 0; for (int j = 0; j < nod.props[i].values.Count; j++) { try { values[i] += nod.props[i].values[j] * matrix[0, j]; } catch (System.IndexOutOfRangeException ex) { Console.WriteLine("Ошибка индекса (getValues_editors). " + ex.ToString()); return(false); } } //values[i] = Math.Round(values[i], 4); nod.props[i].value_editor_down = nod.props[i].value_editor = values[i]; } Console.WriteLine("down nod - " + nod.ID + " " + nod.Name); return(true); }
public List <Node_struct> nodeAddNewProperty(TreeNode nod, List <Node_struct> list) { if (nod.Level == 1) { Parallel.ForEach(list, (nownod, state) => { if ((nownod.ID.ToString() + nownod.Name) == nod.Name) { Propertys_struct pr = new Propertys_struct(); pr.name = "Props" + (1 + nownod.props.Count); pr.values = new List <double>(); Parallel.ForEach(nownod.props[0].values, (val) => { pr.values.Add(0); }); nownod.props.Add(pr); Parallel.ForEach(nownod.connects_out, (ot) => { Parallel.For(0, ot.props.Count, (j, saww) => { int len = (nownod.props.Count * ot.props[0].values.Count / (nownod.props.Count - 1)) - ot.props[0].values.Count; /*for (int i = 0; i < len;i++ ) * ot.props[j].values.Add(ot.props[j].values[i]);*/ ot.props[j].values.AddRange(ot.props[j].values.GetRange(0, len)); }); }); state.Break(); } }); } return(list); }
public List <Node_struct> getNewNode(List <Node_struct> list) { Node_struct nod = new Node_struct(); nod.ID = get_new_id(list); nod.Name = "New Node " + nod.ID; nod.props = new List <Propertys_struct>(); Propertys_struct p_s = new Propertys_struct(); p_s.name = "Props1"; p_s.value_editor = 0.5; p_s.values = new List <double>(); p_s.values.Add(0.5); nod.props.Add(p_s); p_s = new Propertys_struct(); p_s.name = "Props2"; p_s.value_editor = 0.5; p_s.values = new List <double>(); p_s.values.Add(0.5); nod.props.Add(p_s); nod.connects_out = new List <Node_struct>(); nod.connects_in = new List <Node_struct>(); list.Add(nod); return(list); }
public double getNodPropsValueEditor(List <Node_struct> list, Node_struct nod, Propertys_struct proppppp) { double value = -1; bool enab = false; foreach (var propi in nod.props) { if (propi.proc100) { enab = true; break; } } if (enab /*&& nod.connects_in.Count == 0*/) //тут у нас просто ребенок поэтому ему можем спокойно присвоить 1 и 0 { if (proppppp.proc100) { value = 1; } else { value = 0; } } /*else if (enab && nod.connects_in.Count > 0) //а тут раз у нас и родитель и беренок то это событие нужно отлавливать * { * //вот этот момент интересне это родитель и сын одновременно * }*/ else if (proppppp.values.Count > 1) { иззаошибки: MatrixСмежная[][] см = new EditNode().getMatrixСмежность(nod, nod.connects_in.Count, nod.props[0].values.Count, list); if (getValues_editors(см, nod, list) == false) { goto иззаошибки; } value = proppppp.value_editor = proppppp.value_editor_down;//nod.props[i].value_editor; } else /*if (nod.connects_in.Count > 0)*/ { value = proppppp.value_editor_down = proppppp.value_editor = proppppp.values[0];//nod.props[i].values[0]; } return(value); }
public List <Node_struct> loadFife(List <Node_struct> listnodesold) { try { OpenFileDialog op = new OpenFileDialog(); op.Multiselect = false; op.Filter = "UGL файлы (*.samiandouble)|*.samiandouble|Все файлы (*.*)|*.*"; DialogResult res = op.ShowDialog(); if (res != DialogResult.OK) { return(listnodesold); } String path = op.FileName; XmlDocument doc = new XmlDocument(); doc.Load(path); if (listnodesold.Count > 0) { res = MessageBox.Show("У вас уже открыт файл. Сохранить его прежде чем открыть новый?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (res == DialogResult.Yes) { if (!saveToFile(listnodesold)) { retgoto: res = MessageBox.Show("Ошибка при сохранении. Повторить попытку или открыть новый файл? " + "Отказавшись от сохранения текущего проекта, вы рискуете потерять изменения, которые еще не сохранены", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes && saveToFile(listnodesold) == false) { goto retgoto; } } } else { retelse: res = MessageBox.Show("Отказавшись от сохранения текущего проекта, вы рискуете потерять изменения, которые еще не сохранены. Сохранить открытый проект?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes && saveToFile(listnodesold) == false) { goto retelse; } } } List <Node_struct> listnodes = new List <Node_struct>(); List <pirtopi> listconnectnodes = new List <pirtopi>(); foreach (XmlNode line in doc.DocumentElement) { Node_struct nod = new Node_struct(); nod.ID = int.Parse(line.ChildNodes[0].InnerText); nod.Name = line.ChildNodes[1].InnerText; nod.props = new List <Propertys_struct>(); foreach (XmlNode pxml in line.ChildNodes[2].ChildNodes) //проверти { Propertys_struct prrrr = new Propertys_struct(); prrrr.name = pxml.ChildNodes[0].InnerText; prrrr.values = new List <double>(); foreach (XmlNode valuexml in pxml.ChildNodes[1].ChildNodes) //значения из списка { double val; if (!double.TryParse(valuexml.InnerText, out val)) { if (!double.TryParse(valuexml.InnerText.Replace(".", ","), out val)) { if (!double.TryParse(valuexml.InnerText.Replace(",", "."), out val)) { MessageBox.Show("Указанный файл хранит данные неподходящие для приложения. Выберите правильный файл.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return(listnodesold); } } } prrrr.values.Add(val); } nod.props.Add(prrrr); nod.connects_in = new List <Node_struct>(); nod.connects_out = new List <Node_struct>(); } if (line.ChildNodes.Count > 2) { List <int> connecslist = new List <int>(); int oneconnect; foreach (XmlNode conxml in line.ChildNodes[3]) { oneconnect = int.Parse(conxml.ChildNodes[0].InnerText); connecslist.Add(oneconnect); } if (line.ChildNodes[3].Name == "in") { foreach (var coni in connecslist) { pirtopi p = new pirtopi(); p.one = coni; p.two = nod.ID; listconnectnodes.Add(p); } } else if (line.ChildNodes[3].Name == "out") { foreach (var coni in connecslist) { pirtopi p = new pirtopi(); p.two = coni; p.one = nod.ID; listconnectnodes.Add(p); } nod.connects_out = new List <Node_struct>(); } else { MessageBox.Show("Указанный файл хранит данные неподходящие для приложения. Выберите правильный файл.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return(listnodesold); } } /*if (line.ChildNodes.Count > 3) * { * List<int> connecslist = new List<int>(); * int oneconnect; * * foreach (XmlNode conxml in line.ChildNodes[4]) * { * oneconnect = int.Parse(conxml.ChildNodes[0].InnerText); * connecslist.Add(oneconnect); * } * * if (line.ChildNodes[4].Name == "in") * { * foreach (var coni in connecslist) * { * pirtopi p = new pirtopi(); * p.one = coni; * p.two = nod.ID; * listconnectnodes.Add(p); * } * nod.connects_in = new List<Node_struct>(); * } * else if (line.ChildNodes[4].Name == "out") * { * foreach (var coni in connecslist) * { * pirtopi p = new pirtopi(); * p.two = coni; * p.one = nod.ID; * listconnectnodes.Add(p); * } * nod.connects_out = new List<Node_struct>(); * } * else * { * MessageBox.Show("Указанный файл хранит данные неподходящие для приложения. Выберите правильный файл.", "Ошибка", * MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); * return listnodesold; * } * }*/ listnodes.Add(nod); } Node nodeclass = new Node(); foreach (var connect in listconnectnodes) { var nodисходит = nodeclass.getNodeПоИд(listnodes, connect.one); var nodвходит = nodeclass.getNodeПоИд(listnodes, connect.two); nodисходит.connects_out.Add(nodвходит); nodвходит.connects_in.Add(nodисходит); } if (проверкаЗагруженногоФайла(listnodes)) { return(listnodes); } else { return(listnodesold); } } catch (XmlException ex) { MessageBox.Show("Указанный файл хранит данные неподходящие для приложения. Выберите правильный файл. \n" + ex.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return(listnodesold); } }