Распределение встреч по диапазону дат - PullRequest
2 голосов
/ 11 февраля 2010

Я пытаюсь сгенерировать некоторые тестовые данные.

Скажем, у меня есть 1000 встреч, которые мне нужно распределить по диапазону дат.

Теперь мне нужно распределить эти встречи так, чтобы в конце месяца было в два раза больше встреч в день, чем в начале месяца. Увеличение назначений должно увеличиваться с постоянной скоростью.

Так, например, если в 1-й день месяца будет 5 встреч, к концу месяца мы будем получать 10 встреч в день.

Встреча может произойти только в будний день.

Есть ли достойный алгоритм, который помог бы мне распределить эти даты таким образом?

Редактировать

Это лучшее, что я получил, вдохновленный решением Henriks:

    private int GetNumForCurrentDate (DateTime date)
    {
        int daysInMonth = DateTime.DaysInMonth ( date.Year, date.Month );

        // x is the number of appointments on the first day
        double firstDay = this._NumPerMonth / ( ( ( ratio + 1 ) / 2 ) * daysInMonth );

        // x * ratio is the number of appointments on the last day.
        double lastDay = firstDay * ratio;

        // Interpolate a value between the first and last days
        double exactNumOnThisDay = firstDay + ( lastDay - firstDay ) * ( (double)date.Day / (double)daysInMonth );
        int numOnThisDay = Convert.ToInt32 ( Math.Truncate ( exactNumOnThisDay ) );

        // Accumulate any overflow
        this._Overflow += exactNumOnThisDay - numOnThisDay;
        if ( this._Overflow > 1 )
        {
            // Shove the overflow into our number when it gets into whole number teritory
            numOnThisDay++;
            this._Overflow--;
        }

        return numOnThisDay;
    }

Возвращает количество дней, выделяемых на определенный день с учетом даты. Он имеет дело с разделением распределений на каждый месяц и обрабатывает переполнение при округлении, но это не совсем идеально, у него заканчиваются дни для распределения в последний день, но на данный момент это достаточно хорошо, и у меня заканчивается время для его совершенствования. .

1 Ответ

1 голос
/ 11 февраля 2010

x встреч в первый день, 2 раза в последний день, в среднем 1,5 раза. Когда есть y будних дней, x равен 1000 / (1.5y). Таким образом, 667 / y в первый день, 1333 / y в последний, интерполируют для дней между

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...