public void IdentifyComputation() { //set generic simulator behavior - strategy //GenericSimulator.SimulatorBehavior = new MySincSimulatorBehavior2(); //useless - matlab DLL have different static instance try { BroadcastIdentifyStateMessage("Starting calculation ..." + DateTime.Now); logger.Log(NLog.LogLevel.Info, "starting calculation "); //invoke matlab Identification algorithm - does it use the GenericSimulator instance configured before??? Class1 class1 = new Class1(); logger.Log(NLog.LogLevel.Debug, "class1 init"); //set experiment variables and values MWArray v_names = new MWCellArray(new MWCharArray(Enumerable.ToArray(variable_names))); MWArray experiment = new MWNumericArray(variable_values); //set identification parameters MWArray p_names = new MWCellArray(new MWCharArray(Enumerable.ToArray(parameters.Keys))); //set worker nodes urls //var host = AppHostBase.Instance.Config.ServiceEndpointsMetadataConfig.DefaultMetadataUri; //var myrepository = ((AppHostBase) EndpointHost.AppHost).Container.Resolve<WorkersRepository>(); //MWArray worker_urls = new MWCellArray(new MWCharArray(myrepository.GetByModelName(modelname).Select(x => x.RestUrl).ToArray())); MWArray p_val = new MWNumericArray(parameters.Values.Select(parameter => parameter.Value).ToArray()); MWArray p_min = new MWNumericArray(parameters.Values.Select(parameter => parameter.Min).ToArray()); MWArray p_max = new MWNumericArray(parameters.Values.Select(parameter => parameter.Max).ToArray()); MWArray p_is_fixed = new MWLogicalArray(parameters.Values.Select(parameter => !parameter.IsActive).ToArray()); //calculate identification Stopwatch sw = Stopwatch.StartNew(); if (IAgenerations > 0) //set gaoptions { MWArray generations = new MWNumericArray(IAgenerations); MWArray populationsize = new MWNumericArray(IApopulationsize); MWArray tolfun = new MWNumericArray(IAtolfun); class1.identify_gaoptimset(generations, populationsize, tolfun); } //otherwise the matlab algorithm has it's own default values logger.Log(NLog.LogLevel.Debug, "mwarray init"); var result = class1.identify_main(experiment, p_names, p_val, p_min, p_max, p_is_fixed, v_names, modelname, masterserviceurl); logger.Log(NLog.LogLevel.Debug, "identify_main done"); sw.Stop(); /*var fitted_params = result[1]; var fitted_param_L2Enorm = result[2]; var fitted_variablevalues = result[3]; * */ //string fittedparams = ""; //for (int i=1;i < fitted_params. //BroadcastIdentifyStateMessage("Elapsed time " + sw.Elapsed.ToString() + " Results: " + result);//fitted_params+" "+fitted_param_L2Enorm+" " + fitted_variablevalues); //var myresult = result.ToArray(); BroadcastIdentifyResult(result.ToArray(),sw.Elapsed,class1.identify_getssq(),class1.identify_getcomputationcycles(),class1.identify_getsimulationtime()); } catch (Exception e) { //TODO handle matlab exception BroadcastIdentifyStateMessage(e.Message+e.StackTrace); logger.Log(NLog.LogLevel.Error,"exception during identification "+e.Message+" stacktrace:"+e.StackTrace,e); var f = e;//.InnerException; while (f.InnerException != null) { f = f.InnerException; logger.Log(NLog.LogLevel.Error, "innerexception:" + f.Message + " stacktrace:" + f.StackTrace, f); } } // StopIdentify(); FinalizeIdentify(); }