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); }
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); }