public void changeControlValues(Configuration c, string type) { var start = 0; for (int i = 0; i < currentExperiment.Controls.Count; i++) { if (currentExperiment.Controls[i].Name == "LWBSCondition") { currentExperiment.Scenarios[0].SetControlValue(currentExperiment.Controls[i], c.arrivalInfo[3].value.ToString()); string num = ""; currentExperiment.Scenarios[0].GetControlValue(currentExperiment.Controls[i], ref num); System.Diagnostics.Debug.WriteLine("LWBSCondition: " + num); } //else if (currentExperiment.Controls[i].Name == "TriageTime") //{ // currentExperiment.Scenarios[0].SetControlValue(currentExperiment.Controls[i], c.arrivalInfo[4].value.ToString()); // string num = ""; // currentExperiment.Scenarios[0].GetControlValue(currentExperiment.Controls[i], ref num); // System.Diagnostics.Debug.WriteLine("TriageTime: " + num); //} else { for (int j = start; j < c.rooms.Length; j++) { if (c.rooms[j].included == true) { if (type == "num") { currentExperiment.Scenarios[0].SetControlValue(currentExperiment.Controls[i], c.rooms[j].num.ToString()); } else if (type == "opt") { currentExperiment.Scenarios[0].SetControlValue(currentExperiment.Controls[i], c.rooms[j].optNum.ToString()); } string num = ""; currentExperiment.Scenarios[0].GetControlValue(currentExperiment.Controls[i], ref num); System.Diagnostics.Debug.WriteLine("{0,-20}: {1,-2} rooms", c.rooms[j].name, num); start++; break; } else { start++; } } } } }
public void chooseModel(Configuration c) { //initialize if (c.rooms[1].included == false && c.rooms[2].included == false)//Fast Track and Trauma { SetProject("FinalSimioED-ER.spfx", "Model", "Experiment1"); //Final } else if (c.rooms[1].included == false) //Trauma { SetProject("FinalSimioED-NoTrauma.spfx", "Model", "Experiment1"); //Final } else if (c.rooms[2].included == false) //Fast Track { SetProject("FinalSimioED-NoFastTrack.spfx", "Model", "Experiment1"); //Final } else // all primary rooms are included { SetProject("FinalSimioED-All.spfx", "Model", "Experiment1"); //Final } }
private void calculateCosts(Configuration c, ConfigResult cr, string type) { double interestRate = c.costInfo.other[0].value; double growthRate = c.costInfo.other[1].value; double yearsToCompletion = c.costInfo.other[2].value; double yearsAhead = c.costInfo.other[3].value; double[] utilResponses = new double[6]; utilResponses[0] = _cr.examroomu; utilResponses[1] = _cr.traumau; utilResponses[2] = _cr.fasttracku; utilResponses[3] = _cr.rapidadmissionu; utilResponses[4] = _cr.behavioru; utilResponses[5] = _cr.observationu; HoptServer.Models.CalculateCosts calc = new HoptServer.Models.CalculateCosts(); _initial = calc.initialCost(c.costInfo, c.rooms, type); _annual = calc.annualCost(c.costInfo, c.rooms, c.acuityInfo, c.arrivalInfo, c.daysToRun, utilResponses, _cr.LWBS, type); _total = calc.costAtConstructionStart(c.costInfo, c.rooms, c.acuityInfo, c.arrivalInfo, interestRate, growthRate, yearsToCompletion, yearsAhead, c.daysToRun, utilResponses, _cr.LWBS, type); _responses = calc.getUtilizationAndLWBS(c.rooms); _cr.initialCost = _initial; _cr.annualCost = _annual; _cr.totalCost = _total; //System.Diagnostics.Debug.WriteLine("Fixed Cost: " + _initial); //System.Diagnostics.Debug.WriteLine("Variable Cost: " + _annual); //System.Diagnostics.Debug.WriteLine("Total Cost in 10 yrs: " + _total); //SQLiteConnection conn = new SQLiteConnection("Data Source = configs.db"); //conn.Open(); //string sql = "Update Results set InitialCost = " + _initial + ", AnnualCost = " + _annual + ", TotalCost = " + _total; //sql += " where "; //for (int i = 0; i < c.rooms.Length; i++) //{ // if (i < 5) // sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num + " and "; // else // sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num; //} //SQLiteCommand command = new SQLiteCommand(sql, conn); //command.ExecuteNonQuery(); }
public Boolean wasConfigRun(Configuration c) { SQLiteConnection conn = new SQLiteConnection("Data Source = configs.db"); conn.Open(); String sql = "select count(*) from Results where "; for (int i = 0; i < 6; i++) { if (i < 5) sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num + " and "; else sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num; } Console.Write(sql); SQLiteCommand cmd = new SQLiteCommand(sql, conn); int rowCount = Convert.ToInt32(cmd.ExecuteScalar()); return (rowCount == 1); }
public List<Response> StartExperiment(Configuration c, string type) { if (currentExperiment.IsBusy) return null; currentExperiment.Reset(); //save config as private _c = c; //Specify run times setWarmUpTimeInHours(c.startupTime.value); setRunLengthInDays(c.daysToRun.value); //set number of replications for the one scenario setNumberOfReplicationsforScenario(0, c.numberOfReps.value); removeAllButOneScenario(); //if multiple scenarios //setNumberOfReplicationsforAllScenarios(c.numberOfReps.value); //change hospital values (type, annualArrivals, %ofyear) setArrivals(c.rateTable.value, Convert.ToInt32(c.arrivalInfo[0].value), c.arrivalInfo[1].value); setServiceTimes(c); setAcuityPercentages(1, c.acuityInfo[0].value); setAcuityPercentages(2, c.acuityInfo[1].value); setAcuityPercentages(3, c.acuityInfo[2].value); setAcuityPercentages(4, c.acuityInfo[3].value); setAcuityPercentages(5, c.acuityInfo[4].value); //change control values (the actual configuration) _type = type; changeControlValues(c, type); //listeners (run completed, scenario, completed, etc) addSimioEventListeners(); //run simulation runSimulationAsync(); //insertResults(c, currentResponses); return currentResponses; }
public void setServiceTimes(Configuration c) { for (int i = 0; i < c.serviceInfo.Length; i++) { if (c.serviceInfo[i].name == "Exam Room" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["ExamRoom"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["ExamRoom"].Properties["ProcessingTime"].Value); } //else if (c.serviceTimes[i].name == "Wait Room" && c.serviceTimes[i].included == true) //{ // currentModel.Facility.IntelligentObjects["WaitRoom"].Properties["ProcessingTime"].Value = c.serviceTimes[i].averageRoomTime.ToString(); // System.Diagnostics.Debug.WriteLine(c.serviceTimes[i].name + " " + currentModel.Facility.IntelligentObjects["WaitRoom"].Properties["ProcessingTime"].Value); //} else if (c.serviceInfo[i].name == "Trauma" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["Trauma"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["Trauma"].Properties["ProcessingTime"].Value + " hours"); } else if (c.serviceInfo[i].name == "Fast Track" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["FastTrack"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["FastTrack"].Properties["ProcessingTime"].Value + " hours"); } else if (c.serviceInfo[i].name == "Rapid Admission" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["RapidAdmissionUnit"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["RapidAdmissionUnit"].Properties["ProcessingTime"].Value + " hours"); } else if (c.serviceInfo[i].name == "Behavioral" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["Behavioral"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["Behavioral"].Properties["ProcessingTime"].Value + " hours"); } else if (c.serviceInfo[i].name == "Observation" && c.rooms[i].included == true) { currentModel.Facility.IntelligentObjects["Observation"].Properties["ProcessingTime"].Value = c.serviceInfo[i].averageRoomTime.ToString(); System.Diagnostics.Debug.WriteLine(c.serviceInfo[i].name + " " + currentModel.Facility.IntelligentObjects["Observation"].Properties["ProcessingTime"].Value + " hours"); } } }
public void LoadHospitalData(Configuration c) { currentExperiment.Reset(); //save config as private _c = (Configuration)c.Clone(); //Specify run times setWarmUpTimeInHours(c.startupTime.value); setRunLengthInDays(c.daysToRun.value); //set number of replications for the one scenario setNumberOfReplicationsforScenario(0, c.numberOfReps.value); removeAllButOneScenario(); //if multiple scenarios //setNumberOfReplicationsforAllScenarios(c.numberOfReps.value); //change hospital values (type, annualArrivals, %ofyear) setArrivals(c.rateTable.value, Convert.ToInt32(c.arrivalInfo[0].value), c.arrivalInfo[1].value); setServiceTimes(c); setAcuityPercentages(1, c.acuityInfo[0].value); setAcuityPercentages(2, c.acuityInfo[1].value); setAcuityPercentages(3, c.acuityInfo[2].value); setAcuityPercentages(4, c.acuityInfo[3].value); setAcuityPercentages(5, c.acuityInfo[4].value); //listeners (run completed, scenario, completed, etc) addSimioEventListeners(); }
public List<ConfigResult> queryResults(Configuration c = null) { SQLiteConnection conn = new SQLiteConnection("Data Source = configs.db"); conn.Open(); SQLiteCommand cmd; if(c == null) cmd = new SQLiteCommand("select * from Results order by TotalCost", conn); else { String sql = "select * from Results where "; for (int i = 0; i < 6; i++) { if (i < 5) sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num + " and "; else sql += c.rooms[i].name.Replace(" ", "") + " = " + c.rooms[i].num; } cmd = new SQLiteCommand(sql, conn); } SQLiteDataReader dr = cmd.ExecuteReader(); List<ConfigResult> list = new List<ConfigResult>(); while (dr.Read()) { int examRoom = Convert.ToInt32(dr["ExamRoom"]); int trauma = Convert.ToInt32(dr["Trauma"]); int fastTrack = Convert.ToInt32(dr["FastTrack"]); int rapidAdmission = Convert.ToInt32(dr["RapidAdmission"]); int behavioral = Convert.ToInt32(dr["Behavioral"]); int observation = Convert.ToInt32(dr["Observation"]); double timeinsystem = Convert.ToDouble(dr["TimeInSystem"]); double avgwaitingtime = Convert.ToDouble(dr["AvgWaitingTime"]); double avgnumberinwaitingroom = Convert.ToDouble(dr["AvgNumberinWaitingRoom"]); double traumau = Convert.ToDouble(dr["TraumaUtilization"]); double examroomu = Convert.ToDouble(dr["ExamRoomUtilization"]); double fastttracku = Convert.ToDouble(dr["FastTrackUtilization"]); double rapidadmissionu = Convert.ToDouble(dr["RapidAdmissionUnitUtilization"]); double behavioru = Convert.ToDouble(dr["BehaviorUtilization"]); double observationu = Convert.ToDouble(dr["ObservationUtilization"]); double LWBS = Convert.ToDouble(dr["LWBS"]); double initialCost = Convert.ToDouble(dr["InitialCost"]); double annualCost = Convert.ToDouble(dr["AnnualCost"]); double totalCost = Convert.ToDouble(dr["TotalCost"]); int totalVisits = Convert.ToInt32(dr["TotalVisits"]); double examroom_wt = Convert.ToDouble(dr["ExamRoomWaitingTime"]); double trauma_wt = Convert.ToDouble(dr["TraumaWaitingTime"]); double fasttrack_wt = Convert.ToDouble(dr["FastTrackWaitingTime"]); ConfigResult cr = new ConfigResult(examRoom, trauma, fastTrack, rapidAdmission, behavioral, observation, timeinsystem, avgwaitingtime, avgnumberinwaitingroom, traumau, examroomu, fastttracku, rapidadmissionu, behavioru, observationu, LWBS, initialCost, annualCost, totalCost,totalVisits,examroom_wt,trauma_wt,fasttrack_wt); list.Add(cr); } return list; }
public void insertResults(Configuration c, List<Response> responses) { SQLiteConnection conn = new SQLiteConnection("Data Source = configs.db"); conn.Open(); //SQLiteCommand cmd = new SQLiteCommand("select * from test2", conn); //var dr = cmd.ExecuteReader(); //for (var i = 0; i < dr.FieldCount; i++) //{ // Console.WriteLine(dr.GetName(i)); //} String sql = "Insert into Results (ExamRoom, Trauma, FastTrack, RapidAdmission, Behavioral, Observation, "; sql += "TimeInSystem, AvgWaitingTime, AvgNumberinWaitingRoom, "; sql += "TraumaUtilization, ExamRoomUtilization, FastTrackUtilization, RapidAdmissionUnitUtilization, BehavioralUtilization, ObservationUtilization, "; sql += "LWBS, InitialCost, AnnualCost, TotalCost) Values "; sql += "(@ExamRoom, @Trauma, @FastTrack, @RapidAdmission, @Behavioral, @Observation, "; sql += "@TimeinSystem, @AvgWaitingTime, @AvgNumberinWaitingRoom, "; sql += "@TraumaUtilization, @ExamRoomUtilization, @FastTrackUtilization, @RapidAdmissionUnitUtilization, @BehavioralUtilization, @ObservationUtilization, "; sql += "@LWBS, @InitialCost, @AnnualCost, @TotalCost)"; SQLiteCommand command = new SQLiteCommand(sql, conn); foreach (RoomType room in c.rooms) { String value = "@" + room.name.Replace(" ", ""); Console.WriteLine(value); if (room.included) command.Parameters.AddWithValue(value, room.num); else command.Parameters.AddWithValue(value, DBNull.Value); } foreach (Response r in responses) { String value = "@" + r.name.Replace(" ", ""); Console.WriteLine(value); command.Parameters.AddWithValue(value, r.value); } command.Parameters.AddWithValue("@InitialCost", -1.0); command.Parameters.AddWithValue("@AnnualCost", -1.0); command.Parameters.AddWithValue("@TotalCost", -1.0); Console.WriteLine(command.Parameters.Count); command.ExecuteNonQuery(); conn.Close(); printAllResults(); }
public void insertConfiguration(Configuration c) { SQLiteConnection conn = new SQLiteConnection("Data Source = configs.db"); conn.Open(); //SQLiteCommand cmd = new SQLiteCommand("select * from test2", conn); //var dr = cmd.ExecuteReader(); //for (var i = 0; i < dr.FieldCount; i++) //{ // Console.WriteLine(dr.GetName(i)); //} String sql = "Insert into Test2 (ExamRoom, Trauma, FastTrack, RapidAdmission, Behavioral, Observation) Values "; sql += "(@ExamRoom, @Trauma, @FastTrack, @RapidAdmission, @Behavioral, @Observation)"; SQLiteCommand command = new SQLiteCommand(sql, conn); foreach (RoomType room in c.rooms) { String value = "@" + room.name.Replace(" ", ""); if (room.included) command.Parameters.AddWithValue(value, room.num); else command.Parameters.AddWithValue(value, 0);//DBNull.Value); } foreach (SQLiteParameter param in command.Parameters) { Console.WriteLine(param.ParameterName + param.Value); } command.ExecuteNonQuery(); conn.Close(); //printAllConfigs(); }
public void RunConfig(Configuration c) { s.chooseModel(c); List<Response> r = s.StartExperiment(c,"num"); Clients.All.getResponses(r); }
public void RunOpt(Configuration c) { System.Diagnostics.Debug.WriteLine("Run Opt"); s.chooseModel(c); s.LoadHospitalData(c); for (int a = 0; a < c.rooms.Length; a++) { c.rooms[a].optNum = c.rooms[a].maxNum; } ConfigResult cr = s.RunOptNew(c,"opt"); Boolean canIterate = true; int counter = 0; //while (canIterate == true) { canIterate = false; for (int j = 0; j < 2; j++) { for (int i = 0; i < 6; i++) { if (c.rooms[i].included == true) { FindOpt(i, ref c, ref cr, ref canIterate); } } counter++; } System.Diagnostics.Debug.WriteLine("Number of iterations: " + counter); for (int i = 0; i < 6; i++) { System.Diagnostics.Debug.WriteLine(c.rooms[i].optNum); } Clients.All.getResponses(c,cr); //Constraint[] cs = new Constraint[6]; //for(int i = 0; i < 6; i++) //{ // cs[i] = new Constraint(); //} //// Run given config to begin with //ConfigResult cr = s.RunOpt(c); //System.Diagnostics.Debug.WriteLine(cr.examroomu); //System.Diagnostics.Debug.WriteLine(cr.traumau); //System.Diagnostics.Debug.WriteLine(cr.fasttracku); //System.Diagnostics.Debug.WriteLine(cr.rapidadmissionu); //System.Diagnostics.Debug.WriteLine(cr.observationu); //System.Diagnostics.Debug.WriteLine(cr.behavioru); //// Check Utilization //Configuration c2 = new Configuration(); //ConfigResult cr2 = new ConfigResult(); //findRoomConstraintsForRoomType(cs,0, "examroomu", c, cr, c2, cr2); //findRoomConstraintsForRoomType(cs,1, "traumau", c, cr, c2, cr2); //findRoomConstraintsForRoomType(cs,2, "fasttracku", c, cr, c2, cr2); //findRoomConstraintsForRoomType(cs,3, "rapidadmissionu", c, cr, c2, cr2); //findRoomConstraintsForRoomType(cs,4, "behavioru", c, cr, c2, cr2); //findRoomConstraintsForRoomType(cs,5, "observationu", c, cr, c2, cr2); //System.Diagnostics.Debug.WriteLine("ExamRoom: " + cs[0].lowerBound + "," + cs[0].upperBound); //System.Diagnostics.Debug.WriteLine("Trauma: " + cs[1].lowerBound + "," + cs[1].upperBound); //System.Diagnostics.Debug.WriteLine("FastTrack: " + cs[2].lowerBound + "," + cs[2].upperBound); //System.Diagnostics.Debug.WriteLine("Rapid Admission: " + cs[3].lowerBound + "," + cs[3].upperBound); //System.Diagnostics.Debug.WriteLine("Behvioral: " + cs[4].lowerBound + "," + cs[4].upperBound); //System.Diagnostics.Debug.WriteLine("Observation: " + cs[5].lowerBound + "," + cs[5].upperBound); }
//public double getUtilizationForRoomType(string name, ConfigResult cr) { // double utilization = 0.0; // if (name == "examroomu") // { // utilization = cr.examroomu; // } // else if (name == "traumau") // { // utilization = cr.traumau; // } // else if (name == "fasttracku") // { // utilization = cr.fasttracku; // } // else if (name == "rapidadmissionu") // { // utilization = cr.rapidadmissionu; // } // else if (name == "observationu") // { // utilization = cr.observationu; // } // else if (name == "behavioru") // { // utilization = cr.behavioru; // } // return utilization; //} //public void findRoomConstraintsForRoomType(Constraint[] cs, int num, string name, Configuration c, ConfigResult cr, Configuration c2, ConfigResult cr2) //{ // // Check Utilization // cs[num].responseName = name; // // If less than 50%, don't even both trying to add // double utilization = getUtilizationForRoomType(name, cr); // //System.Diagnostics.Debug.WriteLine(name + " " + utilization); // if (utilization < 50) // { // cs[num].lowerBound = c.rooms[num].num; // cs[num].upperBound = c.rooms[num].num; // } // else // { // cs[num].lowerBound = c.rooms[num].num; // // looping until util 50% // for (int i = c.rooms[num].num + 4; i < 1000; i += 4) // { // c2 = (Configuration) c.Clone(); // c2.rooms[num].num = i; // cr2 = s.RunOpt(c2); // double utilization2 = getUtilizationForRoomType(name, cr2); // //System.Diagnostics.Debug.WriteLine(name + " " + utilization); // if (utilization2 < 50) // { // cs[num].upperBound = i; // break; // } // } // } //} public void FindOpt(int num, ref Configuration c, ref ConfigResult cr, ref Boolean canIterate) { ConfigResult cr2; Boolean costDecreases = true; while (costDecreases == true) { System.Diagnostics.Debug.WriteLine("New: " + c.rooms[num].optNum + " Old:" + c.rooms[num].originalNum); if (c.rooms[num].optNum <= c.rooms[num].originalNum) { c.rooms[num].optNum = c.rooms[num].originalNum; costDecreases = false; } else { double interestRate = c.costInfo.other[0].value; double growthRate = c.costInfo.other[1].value; double yearsToCompletion = c.costInfo.other[2].value; double yearsAhead = c.costInfo.other[3].value; double[] utilResponses = new double[6]; utilResponses[0] = cr.examroomu; utilResponses[1] = cr.traumau; utilResponses[2] = cr.fasttracku; utilResponses[3] = cr.rapidadmissionu; utilResponses[4] = cr.behavioru; utilResponses[5] = cr.observationu; HoptServer.Models.CalculateCosts calc = new HoptServer.Models.CalculateCosts(); string type = "opt"; double oldTotalCost = calc.costAtConstructionStart(c.costInfo, c.rooms, c.acuityInfo, c.arrivalInfo, interestRate, growthRate, yearsToCompletion, yearsAhead, c.daysToRun, utilResponses, cr.LWBS, type); cr2 = (ConfigResult)cr.Clone(); c.rooms[num].optNum = c.rooms[num].optNum - 1; System.Diagnostics.Debug.WriteLine("Num rooms: " + c.rooms[num].optNum); cr = s.RunOptNew(c,"opt"); System.Diagnostics.Debug.WriteLine("Cost: " + s.getTotalCost() + " " + oldTotalCost); Boolean waitingTime = false; //if (c.rooms[0].included == true) { // waitingTime = waitingTime || cr.examroom_wt > Convert.ToDouble(c.serviceInfo[0].averageRoomTime); //} //if (c.rooms[1].included == true) //{ // waitingTime = waitingTime || cr.trauma_wt > Convert.ToDouble(c.serviceInfo[1].averageRoomTime); //} //if (c.rooms[2].included == true) //{ // waitingTime = waitingTime || cr.fasttrack_wt > Convert.ToDouble(c.serviceInfo[2].averageRoomTime); //} if (s.getTotalCost() > oldTotalCost || waitingTime == true) { costDecreases = false; c.rooms[num].optNum = c.rooms[num].optNum + 1; cr = (ConfigResult) cr2.Clone(); } else { canIterate = true; } } } }