/// <summary> /// The create scenario. /// </summary> /// <param name="scenario"> /// The scenario. /// </param> public void CreateScenario(Models.Scenario scenario) { using (var dbContext = new OpenAIEntities1()) { Scenario entity = dbContext.Scenarios.Find(scenario.Id); if (entity == null) { entity = new Scenario(); entity.ScenarioId = scenario.Id; dbContext.Scenarios.Add(entity); } entity.Name = scenario.Name; entity.Contents = scenario.Contents; // Add the features DataTable table = this.ParseCsv(scenario.Contents); int position = 1; foreach (DataColumn column in table.Columns) { if (entity.Features.Any(f => f.FeatureId == column.ColumnName)) { continue; } var feature = new Feature(); feature.FeatureId = column.ColumnName; feature.ScenarioId = scenario.Id; feature.Position = position++; entity.Features.Add(feature); } dbContext.SaveChanges(); } }
/// <summary> /// The create inputs. /// </summary> /// <param name="scenarioId"> /// The scenario id. /// </param> /// <param name="inputSetId"> /// The input set id. /// </param> /// <param name="inputs"> /// The inputs. /// </param> public PredictionSet CreateInputs(string scenarioId, string inputSetId, List <Models.Input> inputs) { if (inputs == null) { return(new PredictionSet()); } using (var dbContext = new OpenAIEntities1()) { InputSet inputSet = dbContext.InputSets.FirstOrDefault(i => i.ScenarioId == scenarioId && i.InputSetId == inputSetId); if (inputSet == null) { inputSet = new InputSet(); inputSet.ScenarioId = scenarioId; inputSet.InputSetId = inputSetId; dbContext.InputSets.Add(inputSet); } Dictionary <string, Input> existing = dbContext.Inputs.Where(i => i.ScenarioId == scenarioId && i.InputSetId == inputSetId) .ToDictionary(i => i.FeatureId); foreach (Models.Input input in inputs) { Input entity; existing.TryGetValue(input.InputId, out entity); if (entity == null) { entity = new Input(); dbContext.Inputs.Add(entity); entity.ScenarioId = scenarioId; entity.InputSetId = inputSetId; entity.FeatureId = input.InputId; } entity.Value = input.Value; } dbContext.SaveChanges(); } return(this.Predict(scenarioId, inputSetId)); }
public void CompleteInputSet(string scenarioId, string inputSetId) { using (var dbContext = new OpenAIEntities1()) { Scenario entity = dbContext.Scenarios.Find(scenarioId); if (entity == null) { throw new Exception(string.Format("Unable to find scenario for {0}", scenarioId)); } List <Feature> features = dbContext.Features.Where(f => f.ScenarioId == scenarioId).OrderBy(f => f.Position).ToList(); Dictionary <string, Input> inputsById = dbContext.Inputs.Where(i => i.ScenarioId == scenarioId && i.InputSetId == inputSetId) .ToDictionary(i => i.FeatureId); var sortedInputs = new List <Input>(); foreach (Feature feature in features) { Input input; if (inputsById.TryGetValue(feature.FeatureId, out input)) { sortedInputs.Add(input); } else { sortedInputs.Add(new Input { FeatureId = feature.FeatureId }); } } var newData = string.Join(",", sortedInputs.Select(i => i.Value ?? "0")); entity.Contents = entity.Contents + Environment.NewLine + newData; dbContext.SaveChanges(); this.Train(scenarioId); } }