Exemplo n.º 1
0
        /*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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }