Ниже приведен пример использования операции SetMs для изменения параметров уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, параметры выполнения операции, настройки уравнения для метода «ARIMA» и шаблон получения измененных данных. В результате выполнения операция возвращает модель, содержащую измененное уравнение.
{
"Envelope" :
{
"Body" :
{
"SetMs" :
{
"tMs" :
{
"id" : "S36!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "true",
"item" :
{
"key" : "3049",
"model" :
{
"transform" :
{
"formulas" : ""
}
}
}
},
"meta" :
{
"item" :
{
"k" : "3049",
"type" : "Model",
"modelMd" :
{
"transform" :
{
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "Arima",
"method" :
{
"arima" :
{
"maxIteration" : "600",
"constantMode" : "ManualEstimate",
"constantValue" : "5.7",
"missingData" :
{
"method" : "SpecifiedValue",
"specifiedValue" : "4.7"
},
"confidenceLevel" : "0.96",
"ARMA" :
{
"parseAR" :
{
"value" : "1-3",
"assignOrder" : "true"
},
"parseMA" :
{
"value" : "1-3",
"assignOrder" : "true"
},
"parseARSeas" :
{
"value" : "1,4",
"assignOrder" : "true"
},
"parseMASeas" :
{
"value" : "1,3",
"assignOrder" : "true"
},
"initAR" :
{
"d" : "0.0025"
},
"initMA" :
{
"d" : "0.0025"
},
"initIntercept" : "3",
"estimationMethod" : "GaussNewton",
"diff" : "2",
"diffSeas" : "0",
"initARSeas" :
{
"d" : "0.003"
},
"initMASeas" :
{
"d" : "0.0015"
},
"periodSeas" : "4",
"useAnalyticDeriv" : "true",
"useBackCast" : "false"
}
},
"name" : "ARIMA",
"inversionInfo" :
{
"type" : "PCH",
"lag" : "PrecidingValue",
"previousLag" : "2"
}
} } ] } } } } } }, "metaGet" :
{
"obInst" : "true",
"scenarios" : "Get",
"item" :
{
"key" : "2803",
"problem" :
{
"metamodel" :
{
"calculationChain" : "Get",
"tag" : "true",
"calcChainPattern" :
{
"modelPattern" :
{
"transform" :
{
"inputs" : "Get",
"outputs" : "Get",
"formulaCount" : "true",
"formulas" :
{
"method" : ""
},
"equationsFormula" :
{
"method" : ""
},
"series" : "Get",
"kind" : "true",
"transformVariable" :
{
"slices" : "Get",
"transformSlice" :
{
"selection" : "Get"
}
}
}
}
},
"visualControllerPattern" :
{
"variableRubricatorKey" : "true",
"chainWorkbookKey" : "true"
}
},
"useSavedCoefficients" : "false"
}
}
},
"execParams" :
{
"execSaveModel" : "true"
}
}
}
}
}
}
{
"Envelope" :
{
"Body" :
{
"SetMsResult" :
{
"id" :
{
"id" : "S36!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"
}
},
{
"@isFolder" : "0",
"k" : "1630",
"id" : "OBJ1630",
"n" : "Оптимистический",
"vis" : "1",
"scenDesc" :
{
"@isShortcut" : "0",
"i" : "OBJ1630",
"n" : "Оптимистический",
"k" : "1630",
"c" : "5124",
"p" : "1627",
"h" : "0"
}
},
{
"@isFolder" : "0",
"k" : "1632",
"id" : "OBJ1632",
"n" : "Устаревший",
"vis" : "1",
"scenDesc" :
{
"@isShortcut" : "0",
"i" : "OBJ1632",
"n" : "Устаревший",
"k" : "1632",
"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" : "3049",
"id" : "OBJ3049",
"n" : "D(pchPoP(MyOutputVavable[t], -2),2) = A0 + [AR(1)=A1, AR(2)=A2, AR(3)=A3, MA(1)=A4, MA(2)=A5, MA(3)=A6, SAR(1)=A7, SAR(4)=A8, SMA(1)=A9, SMA(3)=A10]",
"vis" : "1",
"type" : "Model",
"excluded" : "0",
"model" :
{
"transform" :
{
"inputs" :
{
"its" : ""
},
"outputs" :
{
"its" :
{
"Item" :
{
"k" : "3051",
"id" : "VARIABLES_2804",
"n" : "Variables",
"vis" : "1",
"slices" :
{
"its" :
{
"Item" :
{
"k" : "0",
"id" : "262",
"n" : "MyOutputVavable",
"vis" : "1",
"variableKey" : "3051",
"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" } } }, "variableStubKey" : "2805", "parameterID" : "",
"kind" : "Stub",
"attributeId" : "",
"attributeType" : "Series"
}
}
},
"formulaCount" : "1",
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "Arima",
"method" :
{
"arima" :
{
"maxIteration" : "600",
"constantMode" : "ManualEstimate",
"constantValue" : "5.700000",
"missingData" :
{
"specifiedVector" : "",
"method" : "SpecifiedValue",
"methodParameter" : "5",
"specifiedValue" : "4.700000"
},
"confidenceLevel" : "0.960000",
"ARMA" :
{
"orderAR" :
{
"l" :
[
"1",
"2",
"3"
]
},
"orderMA" :
{
"l" :
[
"1",
"2",
"3"
]
},
"calcInitMode" : "Auto",
"initAR" :
{
"d" : "0.002500"
},
"initMA" :
{
"d" : "0.002500"
},
"initIntercept" : "3.000000",
"estimationMethod" : "GaussNewton",
"tolerance" : "0.000100",
"maxIteration" : "600",
"coefficientsAR" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"coefficientsMA" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"diff" : "2",
"diffSeas" : "0",
"orderARSeas" :
{
"l" :
[
"1",
"4"
]
},
"orderMASeas" :
{
"l" :
[
"1",
"3"
]
},
"initARSeas" :
{
"d" : "0.003000"
},
"initMASeas" :
{
"d" : "0.001500"
},
"periodSeas" : "4",
"coefficientsARSeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"coefficientsMASeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"useARMAasInstrums" : "1",
"useAnalyticDeriv" : "1",
"useBackCast" : "0"
},
"explained" :
{
"slice" :
{
"k" : "0",
"id" : "262",
"n" : "MyOutputVavable",
"vis" : "1",
"variableKey" : "3051",
"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" : "@_3051: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"
}
}
},
"inversionInfo" :
{
"type" : "PCH",
"lag" : "PrecidingValue",
"previousLag" : "2",
"seasonality" : "None", "dependence" : "Linear", "K" : "3" } }, "calendarLevel" : "Year", "outputSliceKey" : "0" } ] }
},
"series" :
{
"its" : ""
},
"kind" : "Simple"
}
}
}
}
},
"tag" :
{
"props" :
{
"graph" : "<mxGraphModel><root><mxCell id="0"\/><mxCell id="1" parent="0"\/><mxCell id="2" style="fillColor=#D5DEF7;strokeColor=#85A0E3;fontFamily=Calibri;fontSize=12;fontStyle=1;rounded=1;" parent="1" vertex="1" PPVariable="1"><Object variableKey="2845" modelKey="3049" CellName="MyOutputVavable" as="value"><Object k="0" n="MyOutputVavable" vis="1" variableKey="2845" stubKey="2805" aggregator="None" level="None" as="variableSlice"><Object as="selections"><Object as="its"><Array as="Item"><Object variant="262"><Object msid="2818" id="2818" as="id"\/><\/Object><\/Array><\/Object><\/Object><Object as="parametrizedDimensions"><Object as="its"><Array as="Item"><Object dimension="0" parameter="0"\/><\/Array><\/Object><\/Object><Object unit="4294967295" measure="4294967295" baseUnit="4294967295" unitsDimensionKey="0" as="unitInfo"\/><\/Object><\/Object><mxGeometry x="20" y="170" width="150" height="50" as="geometry"\/><\/mxCell><mxCell id="3" style="fillColor=#F7F7F7;strokeColor=#DEDEDE;fontFamily=Calibri;fontSize=12;fontStyle=1;rounded=1;" parent="1" vertex="1" PPVariable="1"><Object variableKey="2844" CellName="MyInputVavable" as="value"><Object k="0" n="MyInputVavable" vis="1" variableKey="2844" stubKey="2805" aggregator="None" level="None" as="variableSlice"><Object as="selections"><Object as="its"><Array as="Item"><Object variant="261"><Object msid="2818" id="2818" as="id"\/><\/Object><\/Array><\/Object><\/Object><Object as="parametrizedDimensions"><Object as="its"><Array as="Item"><Object dimension="0" parameter="0"\/><\/Array><\/Object><\/Object><Object unit="4294967295" measure="4294967295" baseUnit="4294967295" unitsDimensionKey="0" as="unitInfo"\/><\/Object><\/Object><mxGeometry x="20" y="20" width="150" height="50" as="geometry"\/><\/mxCell><mxCell id="20" style="startArrow=none;endArrow=open;endSize=7;rounded=1;elbow=horizontal;editable=0;edgeStyle=recursiveEdgeStyle" edge="1" parent="1" source="3" target="2"><mxGeometry relative="1" as="geometry"\/><\/mxCell><\/root><\/mxGraphModel>"
}
},
"visualController" :
{
"variableRubricatorKey" : "2805", "chainWorkbookKey" : "2837" } } } } } } } } }
Функция SetMsARIMA изменяет метод расчёта уравнения. Входные параметры:
ms. Экземпляр открытого контейнера моделирования;
modelKey. Ключ модели, содержащей уравнение;
eq. Экземпляр открытого уравнения;
eqKey. Ключ уравнения.
В результате выполнения функция возвращает модель, содержащую уравнение.
public static MsItem SetMsARIMA(MsId ms, ulong modelKey, MsModel eq, ulong eqKey)
{
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()
{
transform = new MsFormulaTransform()
{
formulas = new TsFormulas()
{
its = new TsFormula[]
{
new TsFormula()
{
kind = TsFormulaKind.Arima,
method = new TsMethod()
{ // Задаем параметры метода «ARIMA»
arima = new TsArimaMethod()
{ // Задаем значимость доверительных границ
confidenceLevel = 0.96,
// Задаем константу
constantMode = StatInterceptMode.ManualEstimate,
constantValue = 5.7, // Задаем максимальное число итераций maxIteration = 600, // Задаем метод обработки пропусков
missingData = new StatMissingData()
{
method = StatMissingDataMethod.SpecifiedValue,
specifiedValue = 4.7
},
// Задаем метод оценки коэффициентов
// Задаем моделируемую переменную explained =eq.transform.outputs.its.GetValue(0) as MsFormulaTerm, // Задаем параметры авторегрессии и скользящего среднего ARMA = new SlARMA()
{ // Задаем порядок авторегрессии
parseAR = new SlParseStr()
{
value = "1-3",
assignOrder = true,
}, // Задаем порядок сезонной авторегрессии
parseARSeas = new SlParseStr()
{
value = "1,4",
assignOrder = true
}, // Задаем порядок скользящего среднего
parseMA = new SlParseStr()
{
value = "1-3",
assignOrder = true,
}, // Задаем порядок сезонного скользящего среднего
parseMASeas = new SlParseStr()
{
value = "1,3",
assignOrder = true
}, // Задаем разность и сезонную разность diff = 2, diffSeas = 0, // Задаем значение периода сезонности periodSeas = 4,
// Задаем начальные приближения и прочие параметры
initAR = new double[] {0.0025},
initARSeas = new double[] {0.0030},
initMA= new double[] {0.0025},
initMASeas = new double[] {0.0015},
initIntercept = 3,
// Задаем параметры оценки коэффициентов
useBackCast = false,
useAnalyticDeriv = true,
estimationMethod = ARMAEstimationMethodType.GaussNewton
}
}, // Задаем преобразование моделируемой переменной
inversionInfo = new TsInversion()
{
type = TsInversionType.PCH, previousLag = 2, lag = TsInversionLag.PrecidingValue }, name = "ARIMA" }
} } } }
}
}
}, // Задаем шаблон извлечения измененных данных
metaGet = new MsMdPattern()
{
scenarios = ListOperation.Get,
item = new MsItemPattern()
{
key = modelKey,
problem = new MsProblemPattern()
{
useSavedCoefficients = false,
metamodel = new MsMetaModelPattern()
{
calculationChain = ListOperation.Get,
tag = true,
calcChainPattern = new MsCalculationChainPattern()
{
modelPattern = new MsModelPattern()
{
transform = new MsFormulaTransformPattern()
{
inputs = ListOperation.Get,
outputs = ListOperation.Get,
kind = true,
formulaCount = true,
formulas = new TsFormulaPattern()
{
method = new TsMethodPattern() {
}
},
equationsFormula = new TsFormulaPattern()
{
method = new TsMethodPattern() { }
},
series = ListOperation.Get,
transformVariable = new MsFormulaTransformVariablePattern()
{
slices = ListOperation.Get,
transformSlice = new MsFormulaTransformSlicePattern()
{
selection = ListOperation.Get
}
}
}
}
},
visualControllerPattern = new MsMetaModelVisualControllerPattern()
{
variableRubricatorKey = true,
chainWorkbookKey = true } } } } },
execParams = new MsMdExecParams()
{
execSaveModel = true
}
}; // Создаем прокси-объект для выполнения операции var somClient = new SomPortTypeClient(); // Задаем параметры выполнения операции var result = somClient.SetMs(setMsOp); return result.meta.item; }
См. также:
SOAP