Example #1
0
        private DirectoryInfo PrepareExperimentEnvironment(ApiExperimentModel data)
        {
            string dataDirectoryName = DateTime.UtcNow.Ticks.ToString();

            logger.Info($"Creating experiment data folder: [{dataDirectoryName}].");
            var dataDirectory = Directory.CreateDirectory(Path.Combine(currentDirectoryPath, dataDirectoryName));

            logger.Info($"Creating data model xml.");
            experimenterDataService.WriteModelDataToFile(GetDataPath(dataDirectory), data);

            logger.Info($"Creating expscenario model xml.");
            experimenterDataService.WriteExperimentScenarioToFile(GetExpscenarioPath(dataDirectory), data);

            return(dataDirectory);
        }
        public void WriteModelDataToFile(string fileName, ApiExperimentModel model)
        {
            XDocument doc = new XDocument(new XDeclaration("1.0", "windows-1251", "yes"));
            XElement  xml = new XElement(
                "model",
                new XAttribute("name", "Имитационная модель промышленного предприятия. Работа с контрактами."),
                new XAttribute("version", "1.4"),
                new XAttribute("revision", "2005.01.29"),
                new XAttribute("copyright", "Авторские права (С) 2002-2005 Сергей А. Альховик и др."));

            doc.Add(xml);

            xml.Add(GetModelParametersAsXml(model));
            xml.Add(GetResponsesAsXml());

            doc.Save(fileName);
        }
Example #3
0
        private void SendExperimentResultsToServer(IList <Run> results, ApiExperimentModel model)
        {
            if (results != null)
            {
                logger.Info($"Sending success results to server");
                var serializerSettings = new JsonSerializerSettings();
                serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                logger.Info($"Preparing results...");
                var data = JsonConvert.SerializeObject(results, serializerSettings);

                logger.Info($"Sending success results to server...");
                apiService.SendExperimentResult(data, model.ExperimentId);
            }
            else
            {
                logger.Info($"Sending failed results to server...");
                apiService.SendExperimentResult(null, model.ExperimentId);
            }
        }
        public void WriteExperimentScenarioToFile(string fileName, ApiExperimentModel model)
        {
            XDocument doc        = new XDocument(new XDeclaration("1.0", "windows-1251", "yes"));
            XElement  experiment = new XElement("experiment", new XAttribute(TYPE, "FullFactorial"));

            doc.Add(experiment);

            XElement experimentParameters = new XElement("experiment-parameters");

            experiment.Add(experimentParameters);

            experimentParameters.Add(GetModelParametersAsXml(model));
            experimentParameters.Add(GetResponsesAsXml());
            experimentParameters.Add(new XElement("number-of-replicate-runs", model.CountRuns));

            XElement experimentResults = new XElement("experiment-results");

            experiment.Add(experimentResults);

            doc.Save(fileName);
        }
        private XElement GetModelParametersAsXml(ApiExperimentModel experiment)
        {
            XElement parameters = new XElement("parameters");

            experiment.Products  = experiment.Products.OrderBy(p => p.RkProductInExperimentId).ToList();
            experiment.Resources = experiment.Resources.OrderBy(r => r.RkResourceInExperimentId).ToList();
            foreach (var product in experiment.Products)
            {
                product.Resources = product.Resources.OrderBy(r => r.RkResourceInExperimentId).ToList();
                product.Shipments = product.Shipments.OrderBy(s => s.ShipmentDatetime).ToList();
            }

            XElement variable = new XElement(VARIABLE, new XAttribute(NAME, "__Период времени (мес.)"));

            variable.Add(new XElement(VALUE, experiment.Period));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "__Интервал сбора статистики (мес.)"));
            variable.Add(new XElement(VALUE, experiment.Interval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "_Количество видов продукции (ед.)"));
            variable.Add(new XElement(VALUE, experiment.Products.Count));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "_Количество видов ресурсов (ед.)"));
            variable.Add(new XElement(VALUE, experiment.Resources.Count));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "План-график производства: Интервал планирования (дн.)"));
            variable.Add(new XElement(VALUE, experiment.PlanningInterval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "План-график производства: Количество интервалов планирования (ед.)"));
            variable.Add(new XElement(VALUE, experiment.PlanningIntervalsCount));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Производство: Длительность цикла (дн.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].CycleTime));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Производство: Расход ресурсов (ед.рес./ед.прод.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                for (int j = 0; j < experiment.Resources.Count; j++)
                {
                    XElement item = new XElement(VARIABLE, new XAttribute(INDEX, string.Format("{0},{1}", i, j)));

                    var resourceInProduct   = experiment.Products[i].Resources.FirstOrDefault(r => r.RkResourceInExperimentId == experiment.Resources[j].RkResourceInExperimentId);
                    var resourceConsumption = resourceInProduct != null ? resourceInProduct.ResourceConsumption : 0;

                    item.Add(new XElement(VALUE, resourceConsumption.ToString(CultureInfo.InvariantCulture)));
                    variable.Add(item);
                }
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Запасы: Готовая продукция (ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, (int)experiment.Products[i].FinishedProductCount));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Запасы: Себестоимость готовой продукции (руб./ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].FinishedProductCost.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Запасы: Материальные ресурсы (ед.)"));
            for (int i = 0; i < experiment.Resources.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Resources[i].StoredResourcesCount));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Запасы: Цена материальных ресурсов (руб./ед.)"));
            for (int i = 0; i < experiment.Resources.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Resources[i].StoredResourcePrice.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Количество отгрузок: (ед.)"));
            variable.Add(new XElement(VALUE, experiment.ShipmentsCount));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Время отгрузки: (мес.)"));
            for (int i = 0; i < experiment.ShipmentsCount; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products.First().Shipments[i].ShipmentDatetime));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Объем продукции в отгрузке:(ед.)"));
            for (int productIndex = 0; productIndex < experiment.Products.Count; productIndex++)
            {
                for (int shipmentIndex = 0; shipmentIndex < experiment.ShipmentsCount; shipmentIndex++)
                {
                    XElement item = new XElement(VARIABLE, new XAttribute(INDEX, string.Format("{0},{1}", shipmentIndex, productIndex)));
                    item.Add(new XElement(VALUE, experiment.Products[productIndex].Shipments[shipmentIndex].Volume.ToString(CultureInfo.InvariantCulture)));
                    variable.Add(item);
                }
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между отгрузками: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.ShippingCycle));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между отгрузками: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.ShippingCycleStdDev));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между отгрузками: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.ShippingCycleDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Объем отгрузки: Среднее (ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].ShipmentVolume.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Объем отгрузки: Стандартное отклонение (ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].ShipmentVolumeStdDev.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Объем отгрузки: Вид функции плотности распределения (0;1;2)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, (int)experiment.Products[i].ShipmentVolumeDistrFuncType));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Срок платежа: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.PaymentDate));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Срок платежа: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.PaymentDateStdDev));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Срок платежа: Вид фукнции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.PaymentDateDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Реализация: Цены продукции (руб./ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].Price.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Коэффициент изменения цен (отн.ед./мес.)"));
            variable.Add(new XElement(VALUE, experiment.PriceChangeCoefficient.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Коэффициент изменения цен: Стандартное отклонение (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.PriceChangeCoefficientStdDev.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Коэффициент изменения цен: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.PriceChangeCoefficientDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между изменениями цен: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.PriceChangeInterval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между изменениями цен: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.PriceChangeIntervalStdDev));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Реализация: Интервал между изменениями цен: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.PriceChangeIntervalDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Срок платежа: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPaymentDate));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Срок платежа: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPaymentDateStdDev));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Срок платежа: Вид фукнции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.SupplyPaymentDateDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Снабжение: Цены ресурсов (руб./ед.)"));
            for (int i = 0; i < experiment.Resources.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Resources[i].Price.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Коэффициент изменения цен (отн.ед./мес.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPriceChangeCoefficient.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Коэффициент изменения цен: Стандартное отклонение (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPriceChangeCoefficientStdDev.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Коэффициент изменения цен: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.SupplyPriceChangeCoefficientDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Интервал между изменениями цен: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPriceChangeInterval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Интервал между изменениями цен: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.SupplyPriceChangeIntervalStdDev.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Снабжение: Интервал между изменениями цен: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.SupplyPriceChangeIntervalDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Финансы: Сумма на расчетном счету (руб.)"));
            variable.Add(new XElement(VALUE, experiment.SettlementAccountVolume.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Кредит: Использование для покрытия нехватки денежных средств (0;1)"));
            variable.Add(new XElement(VALUE, experiment.IsCreditUsed ? 1 : 0));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Кредит: Процентная ставка (отн.ед./год)"));
            variable.Add(new XElement(VALUE, experiment.InterestRate.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Кредит: Интервал между обращениями (дн.)"));
            variable.Add(new XElement(VALUE, experiment.CreditInterval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Кредит: Срок (дн.)"));
            variable.Add(new XElement(VALUE, experiment.CreditCycle));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Кредит: Коэффициент покрытия нехватки денежных средств (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.LiquidityRatio.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Постоянные (руб./мес.)"));
            variable.Add(new XElement(VALUE, experiment.FixedCosts.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Доля заработной платы в постоянных затратах (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.WageShare.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Затраты: Прочие переменные (руб./ед.прод.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].VariableCosts.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE_ARRAY, new XAttribute(NAME, "Затраты: Доля заработной платы в переменных затратах (отн.ед.)"));
            for (int i = 0; i < experiment.Products.Count; i++)
            {
                XElement item = new XElement(VARIABLE, new XAttribute(INDEX, i));
                item.Add(new XElement(VALUE, experiment.Products[i].WageShare.ToString(CultureInfo.InvariantCulture)));
                variable.Add(item);
            }
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Коэффициент изменения (отн.ед./мес.)"));
            variable.Add(new XElement(VALUE, experiment.CostsChangeCoefficient.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Коэффициент изменения: Стандартное отклонение (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.CostsChangeStdDev.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Коэффициент изменения: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.CostsChangeDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Интервал между изменениями: Среднее (дн.)"));
            variable.Add(new XElement(VALUE, experiment.CostsChangeInterval));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Интервал между изменениями: Стандартное отклонение (дн.)"));
            variable.Add(new XElement(VALUE, experiment.CostsChangeIntervalStdDev));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Затраты: Интервал между изменениями: Вид функции плотности распределения (0;1;2)"));
            variable.Add(new XElement(VALUE, (int)experiment.CostsChangeIntervalDistrFuncType));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Основные средства: Восстановительная стоимость (руб.)"));
            variable.Add(new XElement(VALUE, experiment.ReplacementCost.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Основные средства: Коэффициент износа (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.WearFactor.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Основные средства: Норма амортизации (отн.ед./год)"));
            variable.Add(new XElement(VALUE, experiment.AmortizationQuota.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Основные средства: Коэффициент переоценки (отн.ед./год)"));
            variable.Add(new XElement(VALUE, experiment.OvervalueCoefficient.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: НДС (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.VAT.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: С выручки (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.EarningsTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: С прибыли (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.ProfitsTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: С прибыли, остающейся в распоряжении предпрития (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.RestProfitsTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: В фонд социальной защиты (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.FundTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: С заработной платы (отн.ед.)"));
            variable.Add(new XElement(VALUE, experiment.WageTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: На недвижимость (отн.ед./год)"));
            variable.Add(new XElement(VALUE, experiment.RealEstateTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: Экологический (руб./ед.прод.)"));
            variable.Add(new XElement(VALUE, experiment.EcologicalTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            variable = new XElement(VARIABLE, new XAttribute(NAME, "Налоги: На землю (руб./мес.)"));
            variable.Add(new XElement(VALUE, experiment.LandTax.ToString(CultureInfo.InvariantCulture)));
            parameters.Add(variable);

            for (int i = 0; i < experiment.Accounts.Count; i++)
            {
                variable = new XElement(VARIABLE, new XAttribute(NAME, experiment.Accounts[i].Name));
                variable.Add(new XElement(VALUE, experiment.Accounts[i].Value.ToString(CultureInfo.InvariantCulture)));
                parameters.Add(variable);

                //-----------------------
                //What the f**k???
                //If remove account duplicate - system runs only one experiment, so, I cannot calculate BoxPlot values
                if (experiment.Accounts[i].Name == "_Счёт 84: Начальное значение(отн.ед.)")
                {
                    variable = new XElement(VARIABLE, new XAttribute(NAME, experiment.Accounts[i].Name));
                    variable.Add(new XElement(VALUE, experiment.Accounts[i].Value.ToString(CultureInfo.InvariantCulture)));
                    parameters.Add(variable);
                }
                //-----------------------
            }

            return(parameters);
        }