/// <summary> /// Executes the treatment /// </summary> /// <param name="component"></param> /// <returns></returns> public override bool ApplyOn(ExecutableComponent component) { Component = Component; return(ApplyOn()); }
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(); } }
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();
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);
//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"); }
public override bool IsAllowed(WorkflowComponent source) { return((source is BasicTrigger || source is BasicAction || source is MagicOutput) && source != this); }