コード例 #1
0
        public WorkflowGlobal(string name, string description, List <Data> modelDataInputs, List <Data> modelDataOutputs, List <WorkflowComponent> components,
                              List <WorkflowComponent> scheduledComponents, List <ISolver> solvers, bool isAuxiliary = true, string scheduleMode = "", string parentName = "")
            : base(name, description, modelDataInputs, modelDataOutputs, components, scheduledComponents, isAuxiliary, scheduleMode, parentName)
        {
            List <Data> allData = ScheduledComponents.GetAllData();

            ScheduledComponents.GetInputsOutputsStatus(allData, out List <Data> defaultInputs, out List <Data> defaultOutputs);

            var outputsHash = new HashSet <string>(ModelDataOutputs.Select(d => d.Id));

            foreach (Data dt in defaultInputs)
            {
                if (outputsHash.Contains(dt.Id))
                {
                    ReversedInputs.Add(dt);
                }
            }

            var inputsHash = new HashSet <string>(ModelDataInputs.Select(d => d.Id));

            foreach (Data dt in defaultOutputs)
            {
                if (inputsHash.Contains(dt.Id))
                {
                    ReversedOutputs.Add(dt);
                }
            }

            Solvers = solvers;
        }
コード例 #2
0
        public WorkflowReversedModel(string name, string description, List <Data> modelDataInputs, List <Data> modelDataOutputs, Model model, List <ISolver> solvers, string parentName = "")
            : base(name, description, modelDataInputs, modelDataOutputs, new List <WorkflowComponent>() { model }, new List <WorkflowComponent>() { model }, true, parentName)
        {
            //this.Model = model;

            var outputsHash = new HashSet <string>(ModelDataOutputs.Select(d => d.Id));

            foreach (Data dt in model.ModelDataInputs)
            {
                if (outputsHash.Contains(dt.Id))
                {
                    ReversedInputs.Add(dt);
                }
            }

            var inputsHash = new HashSet <string>(ModelDataInputs.Select(d => d.Id));

            foreach (Data dt in model.ModelDataOutputs)
            {
                if (inputsHash.Contains(dt.Id))
                {
                    ReversedOutputs.Add(dt);
                }
            }

            Solvers = solvers;
        }
コード例 #3
0
        public string GetReversedName(List <Data> inputs, List <Data> outputs)
        {
            var    reversedIN  = inputs.GetNames().Except(ModelDataInputs.GetNames());
            var    reversedOUT = outputs.GetNames().Except(ModelDataOutputs.GetNames());
            var    reversed    = new HashSet <string>(reversedIN.Union(reversedOUT));
            string reversalID  = ModelDataInputs.Aggregate(String.Empty, (t, d) => t += reversed.Contains(d.Name) ? '1' : '0', t => t += ':');

            reversalID = ModelDataOutputs.Aggregate(reversalID, (t, d) => t += reversed.Contains(d.Name) ? '1' : '0');
            return($"{Id}:Reversed:{reversalID}");
        }
コード例 #4
0
        public override bool Execute()
        {
            var inputs = ModelDataInputs.ToDictionary(d => d.Name, d => d.Value);
            IDictionary <string, object> outputs = model.Run(inputs);

            for (int i = 0; i < ModelDataOutputs.Count; i++)
            {
                ModelDataOutputs[i].Value = outputs[ModelDataOutputs[i].Name];
            }

            return(true);
        }
コード例 #5
0
        public override void RenameVariable(string oldName, string newName)
        {
            if (ModelDataInputs.Concat(ModelDataOutputs).FirstOrDefault(d => d.Name == newName) == null)
            {
                return;
            }

            var separators = new HashSet <char>(new char[] { '[', ']', '{', '}', ';', '.', ',', '(', ')', '"', '\'', '+', '-', '*', '/', '%', ' ', '\t', '\n' });

            FunctionBody = Replace(FunctionBody);
            Code         = Signature + "\n{\n" + FunctionBody + "\n}";

            Compiled = false;

            string Replace(string text)
            {
                int index = -1;

                do
                {
                    index = text.IndexOf(oldName, index + 1);

                    if (index == -1)
                    {
                        continue;
                    }

                    if (index > 0 && !separators.Contains(text[index - 1]))
                    {
                        continue;
                    }

                    if (index < text.Length - 1 - oldName.Length && !separators.Contains(text[index + oldName.Length]))
                    {
                        continue;
                    }

                    text = text.Substring(0, index) + newName + text.Substring(index + oldName.Length);
                } while (index != -1);


                return(text);
            }
        }
コード例 #6
0
 public virtual Workflow Copy(string id, string name = null, string parentName = null)
 {
     return(new Workflow(id, Description, ModelDataInputs.ToList(), ModelDataOutputs.ToList(),
                         Components.ToList(), ScheduledComponents.ToList(), IsAuxiliary, ScheduleMode, parentName ?? parentName));
 }
コード例 #7
0
        /// <summary>
        /// Executes the cSubprocessUNCER object
        /// </summary>
        /// <returns></returns>
        public override bool Execute()
        {
            var input_uncer_testpoints = new Dictionary <string, double[]>();

            #region setting inputs to URQ
            int NInput = ModelDataInputs.Count / 4;
            string[,] RobVars = new string[NInput, 5];


            int counter     = 0;
            var innerInputs = InnerWorkflow.ModelDataInputs.ToDictionary(d => d.Name);
            var outerInputs = ModelDataInputs.ToDictionary(d => d.Name);
            foreach (string name in mappings.Keys)
            {
                string[] mapped = mappings[name];
                if (mapped.Length != 4)
                {
                    continue;
                }

                innerInputs[name].ValueAsDouble = outerInputs[mapped[0]].ValueAsDouble;

                RobVars[counter, 0] = name;
                RobVars[counter, 1] = outerInputs[mapped[1]].ValueAsString;
                RobVars[counter, 2] = outerInputs[mapped[2]].ValueAsString;
                RobVars[counter, 3] = outerInputs[mapped[3]].ValueAsString;
                RobVars[counter, 4] = 0.ToString();

                counter++;
            }


            var input_options = new ArrayList {
                RobVars
            };


            //cTreatment_InOut input_options_treat = new cTreatment_InOut(input_options);
            var input_options_treat = new Treatment_InOut_OP_Input(input_options);
            #endregion

            string[,] temp_targs = new string[targetOutputs.Count, 7];             // get number of targets (i.e. from set the 'targetOutputs' in constructor)

            counter = 0;
            foreach (string outVar in targetOutputs)
            {
                temp_targs[counter, 0] = outVar;
                temp_targs[counter, 1] = "1";
                temp_targs[counter, 2] = "minimise";
                temp_targs[counter, 3] = "";
                temp_targs[counter, 4] = "";
                temp_targs[counter, 5] = "Quantile";
                temp_targs[counter, 6] = "+";

                counter++;
            }

            string[,] temp_constraints = new string[0, 0];
            string[,] temp_constants   = new string[0, 0];
            input_options.Add(temp_targs);
            input_options.Add(temp_constraints);
            input_options.Add(temp_constants);

            input_options.Add("RobustAnalysis");

            throw new Exception("This Workflow is deprecated");
            //var output_to_set_treat = new Treatment_InOut_OP_Output("Study not executed yet.");

            ////cTreatment_ROP URQ = new cTreatment_ROP("UncerPropInnerWF", input_options_treat, output_to_set_treat);
            //input_options_treat = new Treatment_InOut_OP_Input(input_options);
            //var URQ = new Treatment_ROP("UncerPropInnerWF", input_options_treat, output_to_set_treat) { databaseFileName = "URQ" };
            //URQ.ApplyOn(InnerWorkflow);

            //string[,] temp_store_outputs = URQ.RobustData;

            //var MeanAndSD = new List<string>();
            //counter = 0;
            //int NOut = temp_store_outputs.GetLength(1);
            //for (int i = 0; i < NOut; i++)
            //{
            //	switch (counter)
            //	{
            //		case 0:
            //			counter++;
            //			break;
            //		case 1:
            //			counter++;
            //			MeanAndSD.Add(temp_store_outputs[0, i]);
            //			break;
            //		case 2:
            //			MeanAndSD.Add(temp_store_outputs[0, i]);
            //			counter = 0;
            //			break;
            //	}
            //}

            //for (int i = 0; i < ModelDataOutputs.Count; i++)
            //{
            //	if (i % 2 == 0)
            //		ModelDataOutputs[i].ValueAsDouble = Convert.ToDouble(MeanAndSD.ElementAt(i));
            //	else
            //		ModelDataOutputs[i].ValueAsDouble = Math.Sqrt(Convert.ToDouble(MeanAndSD.ElementAt(i)));
            //}

            //return true;
        }
コード例 #8
0
 public List <Data> GetAllData() => ModelDataInputs.Concat(ModelDataOutputs).ToList();
コード例 #9
0
 public override Workflow Copy(string id, string name = null, string parentName = null)
 {
     return(new WorkflowUncertaintyParametrised(id, Description, InnerWorkflow, ModelDataInputs.ToList(), ModelDataOutputs.ToList(),
                                                InputDistributions.ToList(), OutputDistributions.ToList(), UncertaintyPropagator, parentName ?? parentName));
 }
コード例 #10
0
 public override Workflow Copy(string id, string name = null, string parentName = null)
 {
     return(new WorkflowReversedModel(id, Description, ModelDataInputs.ToList(), ModelDataOutputs.ToList(),
                                      Model, Solvers.ToList(), parentName ?? parentName));
 }
コード例 #11
0
 public override Workflow Copy(string id, string name = null, string parentName = null)
 {
     return(new WorkflowSCC(id, Description, ModelDataInputs.ToList(), ModelDataOutputs.ToList(),
                            Components.ToList(), ScheduledComponents.ToList(), Solvers.ToList(), parentName ?? parentName));
 }
コード例 #12
0
        public override bool Execute()
        {
            int Ninputs = ModelDataInputs.Count;
            int Nout    = Math.Min(methodInfo.GetParameters().Where(p => p.IsOut).Count(), ModelDataOutputs.Count);

            object[] parameters = ModelDataInputs.Concat(ModelDataOutputs.Take(Nout)).Select(i => i.Value).ToArray();
            //for (int i = 0; i < Nout; i++)
            //	inputs.Add(ModelDataOutputs[i].Value);
            //inputs.Add(Activator.CreateInstance(Type.GetType(param.ParameterType.FullName.TrimEnd('&'))));

            try
            {
                //object[] parameters = inputs.ToArray();
                object outputs    = methodInfo.Invoke(classInstance, parameters);
                Type   outputType = outputs?.GetType() ?? typeof(void);

                for (int i = 0; i < Nout; i++)
                {
                    ModelDataOutputs[i].Value = parameters[Ninputs + i];
                }

                int idx = 0;
                if (outputs is object[] arr)
                {
                    int N = Math.Min(arr.Length, ModelDataOutputs.Count);
                    for (int i = 0; i < N; i++)
                    {
                        // Assign
                        ModelDataOutputs[Nout + i].Value = arr[i];
                    }
                    idx = N;
                }
                else if (outputType.IsSuported())
                {
                    ModelDataOutputs.First().Value = outputs;
                    idx = 1;
                }
                else
                {
                    PropertyInfo[] properties = outputType.GetProperties().Where(p => p.GetMethod.IsPublic && p.PropertyType.IsSuported()).ToArray();
                    FieldInfo[]    fields     = outputType.GetFields().Where(f => f.IsPublic && f.FieldType.IsSuported()).ToArray();
                    int            N          = Math.Min(properties.Length, ModelDataOutputs.Count);
                    int            M          = Math.Min(fields.Length, ModelDataOutputs.Count - N);
                    for (int i = 0; i < N; i++)
                    {
                        // Assign
                        ModelDataOutputs[Nout + i].Value = properties[i].GetValue(outputs);
                    }
                    for (int i = 0; i < M; i++)
                    {
                        // Assign
                        ModelDataOutputs[Nout + N + i].Value = fields[i].GetValue(outputs);
                    }
                    idx = N + M;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(false);
            }

            return(true);
        }