/// <summary>
        /// Metoda zwracająca listę okresów notowań połączonych, jeżeli mają ten sam kierunek trendu. Metoda ta rozpoczyna wyznaczanie od parametru periodsStartDate i zmierza ku teraźniejszości.
        /// </summary>
        /// <param name="DesiredNumberOfPeriods">Oczekiwana liczba okresów.</param>
        /// <param name="periodsEndDate">Data będąda granicą wyznaczania kolejnych okresów.</param>
        /// <param name="periodsStartDate">Data początku okresów.</param>
        /// <param name="daysInterval">Liczba określająca długość okresu w dniach.</param>
        /// <returns>Lista okresów notowań połaczonych, jeżeli mają ten sam kierunek trendu.</returns>
        public List<ExchangePeriod> GetExchangePeriodsMergedByMovementDirectoryFromStartDate(int DesiredNumberOfPeriods, DateTime periodsEndDate, DateTime periodsStartDate, int daysInterval)
        {
            DateTime iterationDate = periodsStartDate.Date;
            string dataPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\data\\";
            List<ExchangePeriod> periodList = new List<ExchangePeriod>();
            while (periodList.Count <= DesiredNumberOfPeriods && iterationDate <= periodsEndDate)
            {
                DateTime periodEnd;
                if (iterationDate.AddDays(daysInterval) < periodsEndDate)
                {
                    periodEnd = iterationDate.AddDays(daysInterval);
                }
                else
                {
                    periodEnd = periodsEndDate.Date;
                }

                ExchangePeriod period = GetExchangePeriod(iterationDate, periodEnd);
                if (period != null)
                {
                    if (periodList.Count != 0)
                    {
                        if (period.PeriodStart == periodList.Last().PeriodEnd)
                        {
                            period.PublicTrading -= GetExchangeDay(periodList.Last().PeriodEnd).PublicTrading;
                        }

                        //If percentage changes have the same sign.
                        if ((periodList.Last().PercentageChange * period.PercentageChange) >= 0)
                        {
                            periodList.Last().PeriodEnd = period.PeriodEnd;
                            periodList.Last().PublicTrading += period.PublicTrading;
                            periodList.Last().CloseRate = period.CloseRate;
                        }
                        else
                        {
                            period.OpenRate = periodList.Last().CloseRate;
                            periodList.Add(period);
                        }
                    }
                    else
                    {

                        period.PublicTrading -= GetExchangeDay(period.PeriodStart).PublicTrading;
                        periodList.Add(period);
                    }
                }

                iterationDate = iterationDate.AddDays(daysInterval);
            }

            while (periodList.Count > DesiredNumberOfPeriods)
            {
                periodList.Remove(periodList.Last());
            }

            return periodList;
        }
        /// <summary>
        /// Gets the resume field.
        /// </summary>
        protected List<ResumeField> GetResumeField()
        {
            var result = new List<ResumeField>();
            foreach (RepeaterItem filed in fieldRepeater.Items)
            {
                var lbl = (Label)filed.FindControl("field");
                var listView = (ListView)filed.FindControl("themeListView");
                var item = new ResumeField
                {
                    FieldName = lbl.Text,
                    Theme = new List<ResumeTheme>()
                };

                foreach (var theme in listView.Items)
                {
                    var skill = (DropDownList)theme.FindControl("themeSkils");
                    if (skill.SelectedIndex == 0) continue;

                    var themeId = (Label)theme.FindControl("themeId");
                    var themeName = (Label)theme.FindControl("theme");

                    item.Theme.Add(new ResumeTheme
                                       {
                                           SkillId = Convert.ToInt32(skill.SelectedValue),
                                           SkillName = skill.SelectedItem.Text,
                                           ThemeId = Convert.ToInt32(themeId.Text),
                                           ThemeName = themeName.Text
                                       });
                }
                result.Add(item);
            }
            foreach (var item in result.Where(item => item.Theme.Count == 0))
            {
                result.Remove(item);
            }
            return result;
        }
 public void Generate() {
   List<GetReservation_Result> ClientsToSeat = new List<GetReservation_Result>();
   Table CurrentTable = new Table(_nbSeats);
   bool goodFeeling;
   bool found;
   _tablesMaps = null;
   _disliked = new List<Disliked>();
   foreach(GetReservation_Result client in _clients.Where(client => client.IsValid == true)) {
     ClientsToSeat.Add(client);
     _disliked.Add(new Disliked(client.ClientId));
   }
   while(ClientsToSeat.Count > 0) {
     foreach(GetReservation_Result CurrentClient in ClientsToSeat.ToList()) {
       if(CurrentTable.HasRemainingSeats) {
         goodFeeling = true;
         foreach(GetReservation_Result seated in CurrentTable.Seateds) {
           if(HasBadFeeling(CurrentClient.ClientId, seated.ClientId)) { // BR024
             goodFeeling = false;
             break;
           }
         }
         if(goodFeeling) {
           CurrentTable.Add(CurrentClient);
           ClientsToSeat.Remove(CurrentClient);
         }
       } else {
         break;
       }
     }
     Tables.Add(CurrentTable);
     CurrentTable = new Table(_nbSeats);
   }
   foreach(Table table in Tables.Where(table => !table.isValid).ToList()) {
     if(table.Seateds.Count > 0) {
       GetReservation_Result seated = table.Seateds[0];
       foreach(Table otherTable in Tables.Where(tbl => tbl.isValid && tbl.HasRemainingSeats)) {
         goodFeeling = true;
         foreach(GetReservation_Result otherSeated in otherTable.Seateds) {
           if(HasBadFeeling(seated.ClientId, otherSeated.ClientId)) { // BR024
             goodFeeling = false;
             break;
           }
         }
         if(goodFeeling) {
           otherTable.Add(seated);
           Tables.Remove(table);
           break;
         }
       }
     } else {
       Tables.Remove(table);
     }
   }
   foreach(Table table in Tables.Where(table => !table.isValid).ToList()) {
     GetReservation_Result seated = table.Seateds[0];
     foreach(Table otherTable in Tables.Where(tbl => tbl.isValid && tbl.Seateds.Count > 2)) {
       found = false;
       foreach(GetReservation_Result otherSeated in otherTable.Seateds) {
         if(!HasBadFeeling(seated.ClientId, otherSeated.ClientId)) { // BR024
           otherTable.Seateds.Remove(otherSeated);
           table.Add(seated);
           found = true;
           break;
         }
       }
       if(found) {
         break;
       }
     }
   }
 }
 /// <summary>
 /// Adds the talks to this session.
 /// </summary>
 /// <param name="scheduledTalks">The scheduled talks.</param>
 /// <param name="unscheduledTalks">The unscheduled talks.</param>
 public void AddTalks(List<ITalk> scheduledTalks, List<ITalk> unscheduledTalks)
 {
     if (null != scheduledTalks && scheduledTalks.Count != 0)
     {
         foreach (ITalk scheduledTalk in scheduledTalks)
         {
             /* This method has more than one responsibility on purpose.
              * Just remove the talk from unscheduled talks once it is scheduled.*/
             AddTalk(scheduledTalk);
             if (unscheduledTalks.Contains(scheduledTalk))
                 unscheduledTalks.Remove(scheduledTalk);
         }
     }
 }
예제 #5
0
        private int[] Approach(double beta, int[] xi, int[] xj)
        {
            //var rand = new Random();
            //var n = xi.Length;
            var result = new int[n]; //result
            HashSet<int> valuesLeft = new HashSet<int>(Enumerable.Range(0, n)); // {0, 1, ..., n-1} possible values
            var gaps = new List<int>(); //indFree  //indexes of gaps which still need to be filled
            var gapsToRandomize = new List<int>(); //gaps for which there is no rescue

            // najpierw przepisujemy te miejsca ktore sie zgadzaja
            // tworzymy zbior wartosci do obsadzenia i miejsc w ktorych mozna obsadzic wartosci
            for (int i = 0; i < n; i++)
            {
                if (xi[i] == xj[i])
                {
                    result[i] = xi[i];
            //                    valuesLeft.Remove(result[i]);
                    if (!valuesLeft.Remove(result[i]))
                        throw new Exception("Blad - wartosci mialy sie nie powtarzac!");
                }
                else
                {
                    result[i] = -1;
                    gaps.Add(i);
                }
            }
            while (gaps.Count > 0)
            {
                int tmp = gaps[rand.Next(gaps.Count)];
                int pickedValue = rand.NextDouble() < beta ? xj[tmp] : xi[tmp];
                if(valuesLeft.Contains(pickedValue))
                {
                    result[tmp] = pickedValue;
                    if(!valuesLeft.Remove(result[tmp]) )
                        throw new Exception("Blad - wartosci mialy sie nie powtarzac!");
                }
                else
                {
                    gapsToRandomize.Add(tmp);
                }
                gaps.Remove(tmp);
            }

            if (gapsToRandomize.Count + 1 == valuesLeft.Count()) throw new Exception("Dokladnie o 1 wiecej wartosci!");
            if(gapsToRandomize.Count != valuesLeft.Count()) throw new Exception("Liczba pozostalych luk jest inna niz liczba pozostalych wartosci!");
            var valuesLeftAsList = valuesLeft.ToList();
            foreach (var gap in gapsToRandomize)
            {
                result[gap] = valuesLeftAsList.ElementAt(rand.Next(valuesLeftAsList.Count));
                valuesLeftAsList.Remove(result[gap]);
            }
            if(valuesLeftAsList.Any()) throw new Exception("blad : zostaly jakies wartosci");

            return result;
        }
예제 #6
0
        //generate data for iteration 1
        public void createIteration1PatientsAndVisits(int numberOfPatients)
        {
            Random random = new Random();
            List<Patient> patients = new List<Patient>();
            List<Patient> globallySimilarPatients = new List<Patient>();
            List<Patient> globallyNonSimilarPatients = new List<Patient>();
            List<PatientMatchNode> patientMatchNodes = new List<PatientMatchNode>();
            float globallySimilarPatientsThreshold = 0.1f;
            float globallyNonSimilarPatientsThreshold = 0.1f;
            int requiredNumberOfGloballySimilarPatients = (int)((globallySimilarPatientsThreshold * numberOfPatients) + 0.5f);
            int requiredNumberOfGloballyNonSimilarPatients = (int)((globallyNonSimilarPatientsThreshold * numberOfPatients) + 0.5f);
            int currentNumberOfGloballySimilarPatients = 0;
            int currentNumberOfGloballyNonSimilarPatients = 0;
            DateTime maxRangeStart = new DateTime(2011, 01, 01);
            DateTime maxRangeEnd = new DateTime(2011, 12, 31);
            DateTime rangeStart = Util.getRandomDate(maxRangeStart, maxRangeEnd.AddMonths(-1));
            DateTime rangeEnd = rangeStart.AddDays(15);

            int randRationalMin = 1;
            int randRationalMax = 5;

            DbMethods.getInstance().clearTables();

            for (int i = 0; i < numberOfPatients; i++)
            {
                int patientID = i;
                DbMethods.getInstance().InsertPatient();
                Patient patient = new Patient(patientID);
                PatientMatchNode patientNode = new PatientMatchNode(patient);

                int numberOfVisits = random.Next(10, 20);
                bool restart = true;

                do
                {
                    patient.ClearVisits();

                    //generate directed visits
                    for (int j = 0; j < numberOfVisits; j++)
                    {
                        Visit v = new Visit(-1, random.Next(1, 100), random.Next(randRationalMin, randRationalMax), Util.getRandomDate(rangeStart, rangeEnd));
                        if (!patient.HasVisit(v))
                        {
                            patient.AddVisit(v);
                        }
                        else
                        {
                            j--;
                        }
                    }

                    if (requiredNumberOfGloballySimilarPatients > 0)
                    {
                        //SIMILAR PATIENTS

                        foreach (PatientMatchNode n in patientMatchNodes)
                        {
                            if (n.Patient.HasSimilarVisits(patient, 0.5f))
                            {
                                n.addMatch(patient);
                                restart = false;
                            }
                        }

                        List<PatientMatchNode> nodesToRemove = new List<PatientMatchNode>();
                        foreach (PatientMatchNode n in patientMatchNodes)
                        {
                            if (n.getMatchesNumber() >= 4)
                            {
                                requiredNumberOfGloballySimilarPatients--;
                                globallySimilarPatients.Add(n.Patient);
                                nodesToRemove.Add(n);
                            }
                        }

                        foreach (PatientMatchNode n in nodesToRemove)
                        {
                            patientMatchNodes.Remove(n);
                        }

                        nodesToRemove.Clear();

                        if(patientMatchNodes.Count < requiredNumberOfGloballySimilarPatients)
                        {
                            patientMatchNodes.Add(patientNode);
                            restart = false;
                        }

                    }
                    else if (requiredNumberOfGloballyNonSimilarPatients > 0)
                    {
                        //NON-SIMILAR PATIENTS
                        rangeStart = maxRangeStart;
                        rangeEnd = maxRangeEnd;

                        bool hasSimilar = false;
                        foreach (Patient p in patients)
                        {
                            if (!patient.HasNoSimilarVisits(p))
                            {
                                hasSimilar = true;
                            }
                        }

                        if (!hasSimilar)
                        {
                            restart = false;
                            requiredNumberOfGloballyNonSimilarPatients--;
                            globallyNonSimilarPatients.Add(patient);

                        }
                    }
                    else
                    {
                        bool hasSimilar = false;

                        foreach (Patient p in globallyNonSimilarPatients)
                        {
                            if (!patient.HasNoSimilarVisits(p))
                            {
                                hasSimilar = true;
                            }
                        }

                        if (!hasSimilar)
                        {
                            restart = false;
                        }
                    }

                }
                while(restart);

                //adding the visits
                foreach (Visit v in patient.Visits)
                {
                    DbMethods.getInstance().InsertVisit(patientID, v.ProfessionalID, v.RationalID, v.Date);
                }

                patients.Add(patient);
            }
        }