Здравствуйте.
Тестирую метод бутстрапа на примере продаж товаров.
В общем что хочу получить на выходе:
У меня есть массив продаж за определенный период (Сейчас около 1500 товаров). Есть еще массив остатков на складе.
Я хочу взять каждый товар, вычленить массив продаж, но только с условием что товар был на складе (там еще есть пара условий, но не суть), далее сгенерировать 10000 недель случайных продаж товара на основе существующей истории.
Во всей этой ситуации есть проблема: скорость обработки и генерации 10000 (хотя бы) строк по 1500 товарам занимает почему то огромное количество времени (10 сек на 1 товар).
Если кто то сталкивался с задачей, может есть методы ускорить код. Привожу код ниже с комментариями.
Тестирую метод бутстрапа на примере продаж товаров.
В общем что хочу получить на выходе:
У меня есть массив продаж за определенный период (Сейчас около 1500 товаров). Есть еще массив остатков на складе.
Я хочу взять каждый товар, вычленить массив продаж, но только с условием что товар был на складе (там еще есть пара условий, но не суть), далее сгенерировать 10000 недель случайных продаж товара на основе существующей истории.
Во всей этой ситуации есть проблема: скорость обработки и генерации 10000 (хотя бы) строк по 1500 товарам занимает почему то огромное количество времени (10 сек на 1 товар).
Если кто то сталкивался с задачей, может есть методы ускорить код. Привожу код ниже с комментариями.
Код |
---|
Dim mBootS() As Variant 'Результирующий массив с распределением (перезаписывается для каждого товара) Dim mViborkaProd() As Variant 'массив продаж по товару(перезаписывается для каждого товара) Dim mBootSViv() 'Этот массив содержит результаты нужных мне процентилей ReDim mBootSViv(1 To lRowBase - 1, 1 To 8) For i = 1 To lRowBase - 1 '(от 1 до 1500 товаров) If mBaseFull(i, 8) <> 0 And mBaseFull(i, 8) <> "" Then 'Это ограничение на некоторые виды товаров, которые не имеет смысла обрабатывать (снятые с продаж и т.д.) l = 0 ReDim mViborkaProd(1 To 1) For j = 1 To KolDay 'от первого дня периода продаж до последнего If mOstDay(i, j) <> "Missing" And mOstDay(i, j) <> 0 And mOstDayPometki(i, j) <> "Days off" Then 'Еще одно ограничение на товары (Не было в продаже, не работал магазин и т.д.) l = l + 1 ReDim Preserve mViborkaProd(1 To l) mViborkaProd(l) = Abs(mProdDay(i, j)) 'Где ProdDay(i, j) - это массив продаж End If Next j ReDim mBootS(1 To 10001) Randomize 'Не уверен что правильно использую данную функцию For k = 1 To 10001 For j = 1 To 7 mBootS(k) = mBootS(k) + mViborkaProd(Int((l * Rnd) + 1)) 'сумма сгенерированных продаж за неделю (сами дни не нужно хранить, интересует только сумм) Next j Next k SortArray mBootS, True 'Сортирую массив 'Извлекаю только интересующие меня процентили во всем распределении, остальное потом будет перезаписано mBootSViv(i, 1) = mBase(i, 1) ' mBootSViv(i, 2) = mBootS(1000) 'Мин mBootSViv(i, 3) = mBootS(750) '25% mBootSViv(i, 4) = mBootS(500) '50% mBootSViv(i, 5) = mBootS(200) '80% mBootSViv(i, 6) = mBootS(100) '90% mBootSViv(i, 7) = mBootS(50) '95% mBootSViv(i, 8) = mBootS(1) '100% End If Next i |