![]() |
|
![]() ![]() ![]() |
|
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Задача такая:
у человека есть деньги, их хватает на N дней запаса пищи, условно в день он съедает 1 булочку, тогда изначальной суммы хватает на N булочек. каждый день цена булочки рандомом принимает значение от Pmin до Pmax равномерно. При этом каждый день человек получает зарплату равную средней цене на булочку, но при этом каждый день он должен что-то есть. Подскажите стратегию покупки булочек, так чтобы максимально сэкономить. Самая простоя стратегия - это затареваться по максимум при цене меньшей средней. Но это далеко не оптимальная стратегия. Второй варинат (улучшенный) - это закупаться помаксимуму при цене равной (1-корень N степени из 0.5) на интревале цен. т.е. если N=2, а цена колеблется между 4 и 5, то (1-sqrt(0.5)) = 0.29... то ценовой порог будет 4.29. Он получается как 50% того, что среди вподряд идущих N дней будет хоть один день с ценной меньшей этого порога, т.е. это тот порог при котором вероятность проиграть(купить дорого) равна вероятности выиграть. Логично, что стратегия в умном виде выглядет так, что при малой цене покупаем булочки полностью. при средней покупаем 1-2, на вский случай, чтобы пополнить запас, а при высокой цене покупаем не больше 1 булочки и то, когда препрет. Т.е. чем больше текуший запас булочек, тем ниже порог покупки. Но это простой случай, буду благодерен за идеи по его решению. Ещё больше буду благодерен за решение задачи в общем случае, когда цена не равномерна, т.е. если некая закономерность того, что цена в среду всреднем минимальна, а вот на субботу-воскресенье это всреднем максимальна. Падает и растет мат ожидание по синусоиде (полный период - 1 неделя). Это как пример. Буду благодарен не только за полное, идеальное решение, но за решение близкое к идеальному (приближенное) и вообще за любые идеи. Критерий оценки качества решения - это прогон стратегии на длинных случайных последовательностях цен. Хорошая стратегия должна давать минимальное количество потраченных денег на покупку булочек. ПС. Для упрощения считаем что количество денег всегда хватает ровно на N булочек (включая купленный запас) внезависимости от цены. Т.е. если человек съэкономил за месяц 10 баксов, он не сможит купить на них ещё одну булочку. Т.е. излишек он отдает жене. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Мне кажется, что никакая оптимизация стратегии не будет работать без модели, предсказывающей будущее.
Скажем, первый случай Сегодня цена падает ниже средней - затариваемся. Но цена-то падает по какой-то причине. И эта причина действует, наверное, не один день. Значит в первый день после пересечения порога (средней цены) закупаться по полной не выгодно. В идеальном случае - пишется модель колебания цены. На основе модели строится стратегия. Но для этого нужно что-то знать о причинах колебаний. Если причины неизвестны, я бы попробовал какой-нибудь алгоритм самообучения. Скажем нейронную сеть с подачей на вход цен за последние N дней. Если причин нет - колебания определяются датчиком случайный чисел - тогда идет игра в рулетку. Но, возможно, что "закупаемся при любой цене ниже средней" и будет единственным оптимумом, т.к. среднее значение для рулетки известно ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Колебания совершенно случайны, закономерности в ПРОСТОМ случае нет. Т.е. цена завтра никак не зависит от цены сегодня. Чистый RND. Правда известны параметры этого распределения, оно равномерное (вероятность любой цены одинакова) с указанными границами. В примере - это равномерное распределение с МО = 4.5 и зоной колебания +\- 0.5. Т.е. от 4 баксов до 5 баксов.
В более сложном случае это тоже самое, но с поправкой на день недели что-то типа A*sin(d*2Pi/7), где d - это порядковый номер дня А - амплитуда колебания среднего значения. У меня есть подозрение, что "закупаемся при любой цене ниже средней" и будет единственным оптимумом - далеко не оптимальный вариант даже для простого случая, ведь стратегия покупки ниже ценового порога - это по сути улучшенный вариант, когда порог выбирается не как среднее, а более низкое значение, взависимости от N. То, что существует более выгодная стратегия косвенно доказывается тем, что я (т.е. человек) обыгрывает компьютер с указанной стратегией. Ну мне так показалось во всяком случае. Должен существовать какой-ниюудь аппарат для вычисления вероятности того, что потом будет лучшая цена по примеру цепей Маркова. Оценка рисков так сказать, если риск потери при отказе от покупки выше риска потери при согласии, то тогда покупаем булочки. Но как оценить этот риск. |
|||
|
||||
Prospekt |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Что я предпринял.
Модель стратегии такова, если N - это количество булочек, которые можно купить (точнее то кол-во до которого можно довести, по другому размер холодильника), то ключем к решению будет набор из (N-1) пороговых значений цен. Этот набор монотонен, для определенности цены уменьшаюся. Кол-во булочек которое нужно купить, а точнее то кол-во до которого нужно довести, если уже есть некий запас булочек определяется так. Если цена выше первого порога цены, то кол-во равно 1, если цена лежит между 1-м и вторым порогом цены, то покупаем 2, и т.д. Варианты действий конечны (покупка от 1 до N булочек) в силу дискретности, поэтому решение можно свести к такому набору порогов. В самом деле, если вы идете на базар и видете картошку по очень низкой цене вы покупаете столько, сколько можете. Если цена очень большая, то покупаете 1 кг, если вас прижало и сегодня обязательно надо сделать пюре. Если цена средняя, то и купите ведро. Вобщем чем ниже цена, тем больше вы купите, поэтому набор монотонен. А вот уже такую стратеги можно "решить" генетическим алгоритмом. Суть алгоритма:
Предполагая, что данный алгоритм сходится, получаем что при больших числах daysInAge и genoCount конечный набор окажется близким к идеальному. Зачем нужны эры, дело в том, что внутри каждой эры набор адаптируется к конкретному набору значений history, подгоняется под него. Чтобы освободится от такого подгона и делается несколько эр, по результатам которых создается итоговый набор. В моем случае я при 40 эрах беру результаты последних 10 и усредняю пороговые значения. Почему беру по 10, а не по 40, потому что в первых эра происходит процесс сходимости и пороговые значения ещё сырые. За одно я вывожу значение средней закупочной цены для последнего поколения в каждой эре на данных history. Итак, что у меня получилось. 1) значение порога не зависит от значения N, а зависит только от номера порога. Т.е. если при N=5 получаем условно A B C D E, то при N=8 получаем A B C D E F G H, т.е. к старым порогам прибывляются новые, а старые остаются без измемния. Вот пример результатов для N=10 (перове значение - среднее значение порога, второе - это Среднеквадратическое отклонение)
Может кто-то сможет аналитически вычислите этот ряд, может кто-то его встречал. В идеале я бы хотел не только аналитическую формулу, но и обоснование почему получается именно так, чтобы распространить это на общий случай (пока случай простой - равномерное случайное распределение цены). 2) средняя цена покупки при увеличении N уменьшается, что вобщем-то логично. Примеры
Опять же, хотелось бы получить и этот ряд аналитически, или хотябы апроксимированный варинат. 3) как я понял при больших N последнии пороговые значения сильно пляшут, т.к. сильно зависят от данных history, в отличии от первых пороговых значений. Наверное придется произвести некую работу по установлению влияния последних пороговых значений на среднюю цену, есть подозрения, что эти влияния очень слабые и можно их поределять очень не точно без вреда для средней цены. Или вообще убрать последнии пороги, а если цена меньше самого малого порога (из оставленных) то покупать сколько можно. Такое приближение может оказаться вполне близким по эффективности к идеальному. Может будут какие-нибудь советы, мысли? Что хотелось бы ещё, распространить резуьтаты на более сложные случи: 1) когда магазин закрыт каждое воскресенье (или в сб+вс), т.е. на выходные надо принудительно запасаться булочками. 2) средняя цена покупки (МО вокруг которого случайным образом генерируются случайные числа) цисличеки зависит от дня недели, например обычно в среду самые низкие цены, а в выходные самые высокие, как тут быть? |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |