Example #1
0
 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++;
                 }
             }
         }
     }
 }
Example #2
0
        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
            }
        }
Example #3
0
        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();
        }
Example #4
0
 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);
 }
Example #5
0
        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;
        }
Example #6
0
 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");
         }
     }
 }
Example #7
0
        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();
        }
Example #8
0
        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;
        }
Example #9
0
 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();
 }
Example #10
0
 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();
 }
Example #11
0
 public void RunConfig(Configuration c)
 {
     s.chooseModel(c);
     List<Response> r = s.StartExperiment(c,"num");
     Clients.All.getResponses(r);
 }
Example #12
0
        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);
        }
Example #13
0
        //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;
                    }
                }
            }
        }