/// <summary>
        /// Executes the treatment
        /// </summary>
        /// <param name="component"></param>
        /// <returns></returns>
        public override bool ApplyOn(ExecutableComponent component)
        {
            Component = Component;

            return(ApplyOn());
        }
Example #2
0
        public void Propagate(List <IFASTDistribution> inputDistributions, List <ProbabilityDistributionFromSamples> outputDistributions, WorkflowComponent innerWorkflow)
        {
            filer = (createFile) ? new CSVFiler(path) : null;

            try
            {
                int Ninputs  = inputDistributions.Count;
                int Noutputs = outputDistributions.Count;

                sampler = new FASTSampler(Ninputs);
                int NSamples = sampler.Ns;

                Matrix <double> samples = Matrix <double> .Build.Dense(NSamples, Ninputs + Noutputs);

                for (int i = 0; i < inputDistributions.Count; i++)
                {
                    samples.SetColumn(i, inputDistributions[i].GetSamples(NSamples, sampler.GetSamplesForVariable(i)));
                }

                for (int s = 0; s < NSamples; s++)
                {
                    int v = 0;
                    foreach (IProbabilityDistribution input in inputDistributions)
                    {
                        input.Data.Value = samples[s, v];
                        v++;
                    }

                    // Execute workflow
                    bool statusToCheck = innerWorkflow.Execute();

                    foreach (IProbabilityDistribution output in outputDistributions)
                    {
                        samples[s, v] = Convert.ToDouble(output.Data.Value);
                        v++;
                    }

                    if (createFile && statusToCheck)
                    {
                        // Execute database insert command
                        filer.NewRow();

                        //filer.AddToRow(i);

                        foreach (Data input in innerWorkflow.ModelDataInputs)
                        {
                            filer.AddToRow(input);
                        }

                        foreach (Data output in innerWorkflow.ModelDataInputs)
                        {
                            filer.AddToRow(output);
                        }

                        filer.WriteRow();
                    }
                }

                int o = Ninputs;
                foreach (IProbabilityDistribution output in outputDistributions)
                {
                    output.Update(samples.Column(o).AsArray());
                    o++;
                }

                Samples = samples;
            }
            finally
            {
                filer?.Dispose();
            }
        }
Example #3
0
        public (int[] variableIn, int[] constantIn, int[] variableOut, int[] constantOut, List <MissionParameter> missionParameters) GetComponentCalssificationAndIndices(WorkflowComponent component)
        {
            var variableInputs  = new List <string>();
            var constantInputs  = new List <string>();
            var variableOutputs = new List <string>();
            var constantOutputs = new List <string>();

            var modelDataDict     = new Dictionary <string, int>();
            var missionParameters = new List <MissionParameter>(component.ModelDataInputs.Count + component.ModelDataOutputs.Count);

            for (int i = 0; i < component.ModelDataInputs.Count; i++)
            {
                Data   data = component.ModelDataInputs[i];
                string name = data.Name;

                try
                {
                    MissionParameter parameter = parameters[name];
                    missionParameters.Add(parameter);

                    if (parameter is VariableMissionParameter vmp)
                    {
                        variableInputs.Add(name);
                    }
                    else if (parameter is ConstantMissionParameter cmp)
                    {
                        constantInputs.Add(name);
                    }
                }
                catch (KeyNotFoundException knfe)
                {
                    throw new KeyNotFoundException($"No parameter for variable '{data}' was found in segment {Name}", knfe);
                }

                modelDataDict[name] = i;
            }

            for (int i = 0; i < component.ModelDataOutputs.Count; i++)
            {
                Data   data = component.ModelDataInputs[i];
                string name = data.Name;

                try
                {
                    MissionParameter parameter = parameters[name];
                    missionParameters.Add(parameter);

                    if (parameter is VariableMissionParameter vmp)
                    {
                        variableOutputs.Add(name);
                    }
                    else if (parameter is ConstantMissionParameter cmp)
                    {
                        constantOutputs.Add(name);
                    }
                }
                catch (KeyNotFoundException knfe)
                {
                    throw new KeyNotFoundException($"No parameter for variable '{data}' was found in segment {Name}", knfe);
                }

                modelDataDict[name] = i;
            }

            int[] variableIn  = variableInputs.Select(v => modelDataDict[v]).ToArray();
            int[] constantIn  = constantInputs.Select(v => modelDataDict[v]).ToArray();
            int[] variableOut = variableOutputs.Select(v => modelDataDict[v]).ToArray();
            int[] constantOut = constantOutputs.Select(v => modelDataDict[v]).ToArray();

            return(variableIn, constantIn, variableOut, constantOut, missionParameters);
        }
 public Data Child(WorkflowComponent component) => component.ModelDataOutputs.First();
Example #5
0
        public void Propagate(List <IProbabilityDistribution> inputDistributions, List <IProbabilityDistribution> outputDistributions, WorkflowComponent innerWorkflow)
        {
            List <IFASTDistribution> inputs = null;
            List <ProbabilityDistributionFromSamples> outputs = null;

            try
            {
                inputs = inputDistributions.Cast <IFASTDistribution>().ToList();
            }
            catch (InvalidCastException)
            {
                Console.WriteLine("At least one of the input distributions used for this Monte Carlo Simulation are not of the right kind. Samples cannot be generated");
                throw;
            }

            try
            {
                outputs = inputDistributions.Cast <ProbabilityDistributionFromSamples>().ToList();
            }
            catch (InvalidCastException)
            {
                Console.WriteLine("At least one of the output distributions used for this Monte Carlo Simulation are not of the right kind. Distribution annot be infered from samples");
                throw;
            }

            Propagate(inputs, outputs, innerWorkflow);
        }
 public List <Data> DependencyData(WorkflowComponent component, bool onlyIndependent = true) => DependencyData(Child(component), onlyIndependent);
 public List <WorkflowComponent> DependencyComponents(WorkflowComponent component) => DependencyComponentsHash(component, true);
 public List <Data> UnnasignedData(string segmentName, WorkflowComponent component, bool onlyIndependent = true) => UnnasignedData(segmentName, Child(component), onlyIndependent);
Example #9
0
        //public DOEplusURQStudy(string name, string description, Model worflow, List<Data> factors, List<Data> responses)
        public DOEplusURQStudy(string name, string description, List <string> names, Treatment treatment, FullFactorial fullFactorialDOE, WorkflowComponent worflow)
            : base(name, description)
        {
            TreatmentURQ     = treatment;
            this.names       = names; //DOE factors
            Treatment        = treatment;
            StudiedComponent = worflow;

            FullFactorialDOE = fullFactorialDOE;



            var DesignVariables = new List <RobOptDesignVariable>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[0])).GetLength(0); i++)
            {
                var designVariable = new RobOptDesignVariable
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[0]))[i, 0]
                };
                //designVariable.LowerBound = ;
                //designVariable.UpperBound = ;
                DesignVariables.Add(designVariable);
            }
            var Objectives = new List <RobOptObjective>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[1])).GetLength(0); i++)
            {
                var objective = new RobOptObjective
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[1]))[i, 0]
                };
                if (((string[, ])(Treatment.input_options.setuplist[1]))[i, 2] == "minimise")
                {
                    objective.Type = ObjectiveType.Minimise;
                }
                else if (((string[, ])(Treatment.input_options.setuplist[1]))[i, 2] == "maximise")
                {
                    objective.Type = ObjectiveType.Maximise;
                }
                Objectives.Add(objective);
            }
            var Constraints = new List <RobOptConstraint>();

            for (int i = 0; i < ((string[, ])(Treatment.input_options.setuplist[2])).GetLength(0); i++)
            {
                var constraint = new RobOptConstraint
                {
                    Name = ((string[, ])(Treatment.input_options.setuplist[2]))[i, 0]
                };
                if (((string[, ])(Treatment.input_options.setuplist[2]))[i, 2] == "<=")
                {
                    constraint.Type = ConstraintType.LessThanOrEqual;
                }
                else if (((string[, ])(Treatment.input_options.setuplist[2]))[i, 2] == ">=")
                {
                    constraint.Type = ConstraintType.GreatorThanOrEqual;
                }
                constraint.Value = Convert.ToDouble(((string[, ])(Treatment.input_options.setuplist[2]))[i, 3]);
                Constraints.Add(constraint);
            }
            robOptTemplate = new RobOptTemplate()
            {
                DesignVariables = DesignVariables, Objectives = Objectives, Constraints = Constraints
            };



            ColumnNames.Add("ID");
            ColumnTypes.Add(DataTypes.INTEGER);
            ColumnFormats.Add(0);
            ColumnUnits.Add("");

            for (int i = 0; i < this.names.Count; i++)
            {
                string columnHeader = this.names[i];
                ColumnNames.Add(columnHeader);
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }


            for (int i = 0; i < robOptTemplate.DesignVariables.Count(); i++)
            {
                if (!this.names.Contains(robOptTemplate.DesignVariables[i].Name))
                {
                    string columnHeader = robOptTemplate.DesignVariables[i].Name;
                    ColumnNames.Add(columnHeader);
                    ColumnTypes.Add(DataTypes.DOUBLE);
                    ColumnFormats.Add(4);
                    ColumnUnits.Add("");
                }
            }
            for (int i = 0; i < robOptTemplate.Objectives.Count(); i++)
            {
                string columnHeader = robOptTemplate.Objectives[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }
            for (int i = 0; i < robOptTemplate.Constraints.Count(); i++)
            {
                string columnHeader = robOptTemplate.Constraints[i].Name;

                // Loss Function
                ColumnNames.Add(columnHeader + "LF");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Mean
                ColumnNames.Add(columnHeader + "mean");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
                // Variance
                ColumnNames.Add(columnHeader + "var");
                ColumnTypes.Add(DataTypes.DOUBLE);
                ColumnFormats.Add(4);
                ColumnUnits.Add("");
            }



            TableNames.Add("DOE");
        }
Example #10
0
 public override bool IsAllowed(WorkflowComponent source)
 {
     return((source is BasicTrigger || source is BasicAction || source is MagicOutput) && source != this);
 }