コード例 #1
0
ファイル: MainForm.cs プロジェクト: bimaxd/modelExecutor
        public void Algorithm()
        {
            using (neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text))
            {
                agentInstances = neoDataLoader.GetAllInstancesIdByName("Агент");
            }

            foreach (string agentID in agentInstances)
            {
                // Получаем формулу на текущем состоянии

                string currentStateID;
                string currentStateFormula;
                using (neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text))
                {
                    string        stateID         = neoDataLoader.GetParameterValue(agentID, "Состояние");
                    List <String> relatedStatesId = neoDataLoader.GetStatesInWhichNodeGoes(stateID);
                    foreach (string state in relatedStatesId)
                    {
                        if (ExpressionChecker(neoDataLoader.GetRelationshipBetweenStatementsParameterValue(stateID, state, "comment")))     // Состояние меняется каждый раз ДОПИШИ ПАРСЕР ФОРМУЛ я хочу спать, не могу
                        {
                            neoDataLoader.SetNodeParameter(agentID, "Состояние", state);
                        }
                        foreach (string food in neoDataLoader.GetAllNodesWithNameInstancesId("Пища")) //Тут состояние не менятся на покой пока не будет найдена пища
                        {
                            if (checkSamePosition(food, agentID))
                            {
                                neoDataLoader.SetNodeParameter(agentID, "Состояние", "0");
                            }
                        }
                    }
                    currentStateID      = neoDataLoader.GetParameterValue(agentID, "Состояние");
                    currentStateFormula = neoDataLoader.GetParameterValue(currentStateID, "comment");
                }
                // Парсим формулу и применяем её (надо сделать проверку может ли она быть применена)

                FormulaParser(currentStateFormula, agentID);
                try
                {
                    if (currentStateID.Equals("1"))
                    { //1 = Перемещение (Это костыль)
                        neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text);
                        moving(System.Convert.ToInt32(neoDataLoader.GetParameterValue(agentID, "X")), System.Convert.ToInt32(neoDataLoader.GetParameterValue(agentID, "Y")), agentID);
                    }
                }
                catch (FormatException)
                {
                    // the FormatException is thrown when the string text does
                    // not represent a valid integer.
                }
                catch (OverflowException)
                {
                    // the OverflowException is thrown when the string is a valid integer,
                    // but is too large for a 32 bit integer.  Use Convert.ToInt64 in
                    // this case.
                }
                //Здесь делаем проверку перехода в другое состояние и, если можем перейти, переходим
                TransitionParser(); ////// Заглушка
            }
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: bimaxd/modelExecutor
        private void FillDataGridView(string agentID)
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            using (neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text))
            {
                string stateID = neoDataLoader.GetParameterValue(agentID, "Состояние");
                parameters.Add("Состояние №", stateID + " ("
                               + neoDataLoader.GetParameterValue(stateID, "name") + ")");
                parameters.Add("Сытость: ", neoDataLoader.GetParameterValue(agentID, "Сытость"));
                parameters.Add("X ", neoDataLoader.GetParameterValue(agentID, "X"));
                parameters.Add("Y ", neoDataLoader.GetParameterValue(agentID, "Y"));
                //List<String> ownedItemsId = neoDataLoader.GetRelatedNodesIdList("Принадлежит", agentID);
                //foreach (string item in ownedItemsId)
                //{
                //    parameters.Add("Владеет предметом " + "Пища"/*neoDataLoader.GetNodeLabels(item).First()*/,
                //                    neoDataLoader.GetParameterValue(item, "Количество"));
                //}
                parameters.Add("Владеет предметом Пища: ", neoDataLoader.GetParameterValue(agentID, "Пища"));
                parameters.Add("Формула на текущем состоянии:", neoDataLoader.GetParameterValue(stateID, "comment"));
                List <String> relatedStatesId = neoDataLoader.GetStatesInWhichNodeGoes(stateID);
                foreach (string state in relatedStatesId)
                {
                    parameters.Add("Переход в состояние " + neoDataLoader.GetParameterValue(state, "name"), neoDataLoader.GetRelationshipBetweenStatementsParameterValue(stateID, state, "comment"));
                }
            }
            //dataGridView1.Rows.Add(parameters)
            foreach (DataGridViewColumn c in dataGridView_agentParameters.Columns)
            {
                c.DefaultCellStyle.Font = new Font("Arial", 18F, GraphicsUnit.Pixel);
            }
            dataGridView_agentParameters.DataSource = parameters.ToArray();
            dataGridView_agentParameters.Refresh();
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: bimaxd/modelExecutor
        private void FormulaApply(string[] mas, string id)
        {
            using (neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text))
            {
                if (mas.Length != 3)
                {
                    textBox4.Text = "Формула неверная";
                    return;
                }

                string paramValue = neoDataLoader.GetParameterValue(id, mas[0]);
                switch (mas[1])
                {
                case "-=":
                    int result1 = Convert.ToInt32(paramValue) - Convert.ToInt32(mas[2]);
                    neoDataLoader.SetNodeParameter(id, mas[0], result1.ToString());
                    break;

                case "=":
                    neoDataLoader.SetNodeParameter(id, mas[0], mas[2]);
                    break;

                case "+=":
                    int result2 = Convert.ToInt32(paramValue) + Convert.ToInt32(mas[2]);
                    neoDataLoader.SetNodeParameter(id, mas[0], result2.ToString());
                    break;
                }
            }
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: bimaxd/modelExecutor
 public double CalculateAverageSatiety()
 {
     using (neoDataLoader = new NeoDataLoader("bolt://localhost:" + textBox1.Text, textBox2.Text, textBox3.Text))
     {
         List <string> agentsID = neoDataLoader.GetAllInstancesIdByName("Агент");
         double        sum      = 0;
         foreach (string agent in agentsID)
         {
             sum += Convert.ToDouble(neoDataLoader.GetParameterValue(agent, "Сытость"));
         }
         sum /= agentsID.Count();
         return(sum);
     }
 }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: bimaxd/modelExecutor
 public bool checkSamePosition(string firstObj, string secondObj)
 {
     return(neoDataLoader.GetParameterValue(firstObj, "X").Equals(neoDataLoader.GetParameterValue(secondObj, "X")) &&
            neoDataLoader.GetParameterValue(firstObj, "Y").Equals(neoDataLoader.GetParameterValue(secondObj, "Y")));
 }