Ниже приведен пример использования операции SetMs для изменения параметров уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, параметры выполнения операции, настройки уравнения для метода «Нелинейная регрессия» и шаблон получения измененных данных. В результате выполнения операция возвращает модель, содержащую измененное уравнение.
Для выполнения примера уравнение должно содержать входную и выходную переменные.
{
"Envelope" :
{
"Body" :
{
"SetMs" :
{
"tMs" :
{
"id" : "S82!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "true",
"item" :
{
"key" : "3674",
"model" :
{
"transform" :
{
"formulas" : ""
}
}
}
},
"meta" :
{
"item" :
{
"k" : "3674",
"type" : "Model",
"modelMd" :
{
"transform" :
{
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "NonLinearRegression",
"method" :
{
"nonLinearRegression" :
{
"missingData" :
{
"method" : "LinTrend"
},
"confidenceLevel" : "0.9",
"useDerivatives" : "true",
"initialApproximation" :
{
"d" :
[ "0.15", "0.09" ] }, "maxIterations" : "500", "maxStep" : "0.4", "dampingFactorTolerance" : "0.6", "expression" : "@_3675:0[] * a + b", "result" :
{
"slice" :
{
"k" : "0",
"id" : "262",
"n" : "MyOutputVavable",
"vis" : "true",
"variableKey" : "3676",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "262"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
},
"operands" :
{
"its" :
{
"Item" :
{
"slice" :
{
"k" : "0",
"id" : "261",
"n" : "MyInputVavable",
"vis" : "true",
"variableKey" : "3675",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "261"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
}
}
},
"coefficients" :
{
"it" :
[ "a", "b" ] } } } } ] }
}
},
"period" :
{
"identificationStartDate" : "1990-01-01",
"identificationEndDate" : "2006-01-01",
"forecastEndDate" : "2010-01-01"
}
}
}
},
"metaGet" :
{
"obInst" : "true",
"scenarios" : "Get",
"item" :
{
"key" : "2803",
"problem" :
{
"metamodel" :
{
"calculationChain" : "Get",
"calcChainPattern" :
{
"modelPattern" :
{
"transform" :
{
"formulaCount" : "true",
"formulas" :
{
"method" : ""
},
"equationsFormula" :
{
"method" : ""
},
"kind" : "true"
}
}
},
"visualControllerPattern" :
{
"variableRubricatorKey" : "true",
"chainWorkbookKey" : "true",
"freeVariables" : "true"
}
}
}
}
},
"execParams" :
{
"execSaveModel" : "true"
}
}
}
}
}
}
{
"Envelope" :
{
"Body" :
{
"SetMsResult" :
{
"id" :
{
"id" : "S82!M!S!C1"
},
"meta" :
{
"obInst" :
{
"obDesc" :
{
"@isShortcut" : "0",
"i" : "MODELSPACE",
"n" : "Контейнер моделирования",
"k" : "1581",
"c" : "5121",
"p" : "1580",
"h" : "0"
}
},
"dirty" : "0",
"scenarios" :
{
"nodes" :
{
"it" :
{
"@isFolder" : "0",
"k" : "1628",
"id" : "OBJ1628",
"n" : "Базовый",
"vis" : "1",
"scenDesc" :
{
"@isShortcut" : "0", "i" : "OBJ1628", "n" : "Базовый", "k" : "1628", "c" : "5124", "p" : "1627", "h" : "0" } } }
},
"item" :
{
"k" : "2803",
"id" : "TEMP_MODEL",
"n" : "TEMP_MODEL",
"vis" : "1",
"type" : "Problem",
"problemMd" :
{
"metamodel" :
{
"k" : "2804",
"calculationChain" :
{
"its" :
{
"Item" :
{
"k" : "3674",
"id" : "OBJ3674",
"n" : "MyOutputVavable[t] = MyInputVavable[t] * a + b",
"vis" : "1",
"type" : "Model",
"excluded" : "0",
"model" :
{
"transform" :
{
"formulaCount" : "1",
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "NonLinearRegression",
"method" :
{
"nonLinearRegression" :
{
"missingData" :
{
"specifiedVector" : "",
"method" : "LinTrend",
"methodParameter" : "5",
"specifiedValue" : "0"
},
"confidenceLevel" : "0.900000",
"useDerivatives" : "1",
"initialApproximation" :
{
"d" :
[
"0.150000",
"0.090000"
]
},
"maxIterations" : "500",
"maxStep" : "0.400000",
"dampingFactorTolerance" : "0.600000",
"expression" : "@_3675:0[] * a + b",
"result" :
{
"slice" :
{
"k" : "0",
"id" : "262",
"n" : "MyOutputVavable",
"vis" : "1",
"variableKey" : "3676",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "262"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
},
"lag" : "",
"key" : "0",
"termToText" : "{MyOutputVavable[t]}",
"termToInnerText" : "@_3676:0[]",
"termInfo" :
{
"k" : "4294967295",
"lag" : "0",
"inversion" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
}
},
"operands" :
{
"its" :
{
"Item" :
{
"k" : "0",
"slice" :
{
"k" : "0",
"id" : "261",
"n" : "MyInputVavable",
"vis" : "1",
"variableKey" : "3675",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "261"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
},
"lag" : "",
"key" : "1",
"termToText" : "{MyInputVavable[t]}",
"termToInnerText" : "@_3675:0[]",
"termInfo" :
{
"k" : "4294967295",
"lag" : "0",
"inversion" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
}
}
}
},
"coefficients" :
{
"it" :
[
"a",
"b"
]
}
},
"inversionInfo" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
} }, "calendarLevel" : "Year", "outputSliceKey" : "0" } ] } }, "kind" : "Simple" }
}
}
}
},
"visualController" :
{
"variableRubricatorKey" : "2805",
"chainWorkbookKey" : "2837",
"freeVariables" :
{
"its" : "" } } } } } } } } } }
Функция SetMsNonLinearRegr изменяет метод расчёта уравнения. Входные параметры:
ms. Экземпляр открытого контейнера моделирования;
modelKey. Ключ модели, содержащей уравнение;
eq. Экземпляр открытого уравнения. Для выполнения примера уравнение должно содержать входную и выходную переменные;
eqKey. Ключ уравнения.
В результате выполнения функция возвращает модель, содержащую уравнение.
Для создания шаблона извлечения изменённых данных используется функция createMetaGetPattern, описанная в разделе «Настройка параметров метода «Подбор вида зависимости»».
public static MsItem SetMsNonLinearRegr(MsId ms, ulong modelKey, MsModel eq, ulong eqKey)
{ // Получаем входную и выходную переменные
MsFormulaTransformVariable inp = eq.transform.inputs.its.GetValue(0) as MsFormulaTransformVariable;
MsFormulaTransformVariable outp = eq.transform.outputs.its.GetValue(0) as MsFormulaTransformVariable;
// Задаем параметры выполнения операции
var setMsOp = new SetMs();
setMsOp.tMs = ms;
setMsOp.tArg = new SetMsArg()
{ // Задаем шаблон изменения данных
pattern = new MsMdPattern()
{
item = new MsItemPattern()
{ // Указываем ключ уравнения
key = eqKey,
model = new MsModelPattern()
{
transform = new MsFormulaTransformPattern() { formulas = new TsFormulaPattern() { } }
}
}
}, // Задаем данные, которые необходимо изменить
meta = new MsMd()
{
item = new MsItem()
{ // Указываем ключ уравнения
k = eqKey,
type = MsItemType.Model,
modelMd = new MsModel()
{ // Задаём периоды расчёта
period = new MsModelPeriod()
{
identificationStartDate = DateTime.Parse("01.01.1990"),
identificationEndDate = DateTime.Parse("01.01.2006"),
forecastEndDate = DateTime.Parse("01.01.2010")
},
transform = new MsFormulaTransform()
{
formulas = new TsFormulas()
{
its = new TsFormula[]
{
new TsFormula()
{
kind = TsFormulaKind.NonLinearRegression,
method = new TsMethod()
{ // Задаём параметры расчёта метода
nonLinearRegression = new TsNonLinearRegressionMethod()
{ // Задаём метод обработки пропусков
missingData = new StatMissingData(){method = StatMissingDataMethod.LinTrend},
//Задаём значимость доверительных границ
confidenceLevel = 0.90,
// Используем производные для повышения точности расчёта
useDerivatives = true, // Задаём максимальное число итераций для расчёта метода maxIterations = 500, // Задаём точность определения параметра регуляризации
dampingFactorTolerance = 0.6,
// Задаём переменные, участвующие в расчёте
operands = new MsFormulaTerms()
{
its = new MsFormulaTerm[]
{
new MsFormulaTerm()
{slice = inp.slices.its.GetValue(0) as MsFormulaTransformSlice}
}
}, // Задаём формулу для расчёта
expression = "@_" + inp.k + ":0[] * a + b",
// Задаём коэффициенты
coefficients = new string[] {"a", "b"},
// Задаём начальные приближения коэффициентов
initialApproximation = new double[] {0.15, 0.09},
// Задаём максимальное расстояние между приближениями
maxStep = 0.4,
// Задаём результирующую переменную
result = new MsFormulaTerm()
{slice = outp.slices.its.GetValue(0) as MsFormulaTransformSlice}
} } } } } }
} } }, // Задаём шаблон извлечения измененных данных metaGet = createMetaGetPattern(modelKey),
execParams = new MsMdExecParams() { execSaveModel = true }
}; // Создаем прокси-объект для выполнения операции
var somClient = new SomPortTypeClient();
// Задаем параметры выполнения операции
var result = somClient.SetMs(setMsOp);
return result.meta.item;
}
См. также:
SetMs: Операция | Метод «Нелинейная регрессия»
SOAP