На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (6) « Первая ... 4 5 [6]  все  ( Перейти к последнему сообщению )  
> Набор суммы минимальным числом слагаемых , динамическое программирование
    Хорошо, завтра постараюсь разобраться с остатками.

    Что касается алгоритма. Мы здесь набираем не одну сумму, а одновременно несколько, т.к. общая дневная сумма раскидывается по разным продуктам.
    Теперь, если не принимать во внимания эти остатки, то похожий алгоритм и готовая программа уже есть.
    Задача
    Что там делалось (насколько я помню). Там происходило равномерное распределение работ по n бригадам, чтоб все были загружены одинаково.
    Что для вашей задачи будет.
    Общая дневная сумма будет раскидываться на n сумм, причём для каждой частичной i-той суммы будут даны верхняя и нижняя границы, т.е. сумма должна быть в этих границах.
    Что пока непонятно:
    1) как выбрать из всех продуктов эти n продуктов;
    2) как выбрать границы, в которые будет заключена каждая частичная сумма.
    Видимо, информация о закупках, возвратах и остатках будет определять и выбор продуктов, и границы частичных сумм.
      Цитата
      Что касается алгоритма. Мы здесь набираем не одну сумму, а одновременно несколько, т.к. общая дневная сумма раскидывается по разным продуктам.

      Да думаю как раз что надо... тогда завтра подробнее рассморим если можно...
      Цитата
      1) как выбрать из всех продуктов эти n продуктов;

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

      мне не понятно про границы пока.
      Сообщение отредактировано: test4me -
        Цитата test4me @
        нет смысла говорить о следующем дне для этого продукта

        Ну нет смысла - и не будем. Нам же легче.

        Возьмём данные, скажем, за самый первый месяц. Зафиксируем один продукт.
        Мы знаем, сколько было закуплено в этом месяце и сколько возвращено. Будем считать, что за первый месяц мы продали всё: все закупки - все возвраты. То есть никакого остатка на начало след. месяца не было. Во всяком случае, из ваших данных этого не видно.
        1. Весь товар, закупленный и не возвращённый в этом месяце, делим на число дней в месяце, округляем до целого. Делаем во все дни одинаково, в последний день так, чтобы набрать сумму по количеству. То есть количество проданного товара в штуках равно количеству закупленного товара в штуках по этому месяцу.
        2. Делаем из себестоимости начальную продажную цену (12% + НДС). Вот её мы будем варьировать.
        3. Умножаем среднее количество продаж за день на начальную цену - получаем частичную сумму дневных продаж одного продукта.
        И так делаем по каждому продукту, который закупался в этом месяце (вот, к слову, и определили, какие продукты взять. Берём те, которые закупали).
        Суммируем частичные дневные суммы (в рублях с копейками, вещественные числа) по всем продуктам. Получаем полную дневную сумму. Сравниваем с фактической суммой продаж.
        Вот тут могут быть три варианта: больше, меньше, равно. Если равно, то подбор закончен. Количества в штуках есть, цены есть, количество, проданное за месяц, сходится с количеством закупленным и финансово, и количественно.

        Если не равно, то мне нужно подумать, а также вспомнить, что делалось в старой программе. Потому что здесь для каждой частичной суммы будут выставляться границы.
        Сообщение отредактировано: swf -
          Цитата
          Возьмём данные, скажем, за самый первый месяц. Зафиксируем один продукт.
          Мы знаем, сколько было закуплено в этом месяце и сколько возвращено. Будем считать, что за первый месяц мы продали всё: все закупки - все возвраты. То есть никакого остатка на начало след. месяца не было. Во всяком случае, из ваших данных этого не видно.
          1. Весь товар, закупленный и не возвращённый в этом месяце, делим на число дней в месяце, округляем до целого. Делаем во все дни одинаково, в последний день так, чтобы набрать сумму по количеству. То есть количество проданного товара в штуках равно количеству закупленного товара в штуках по этому месяцу.
          2. Делаем из себестоимости начальную продажную цену (12% + НДС). Вот её мы будем варьировать.
          3. Умножаем среднее количество продаж за день на начальную цену - получаем частичную сумму дневных продаж одного продукта.
          И так делаем по каждому продукту, который закупался в этом месяце (вот, к слову, и определили, какие продукты взять. Берём те, которые закупали).
          Суммируем частичные дневные суммы (в рублях с копейками, вещественные числа) по всем продуктам. Получаем полную дневную сумму. Сравниваем с фактической суммой продаж.
          Вот тут могут быть три варианта: больше, меньше, равно. Если равно, то подбор закончен. Количества в штуках есть, цены есть, количество, проданное за месяц, сходится с количеством закупленным и финансово, и количественно.

          Если не равно, то мне нужно подумать, а также вспомнить, что делалось в старой программе. Потому что здесь для каждой частичной суммы будут выставляться границы.

          Да отлично... хорошо!!!!!
            swf
            доброго времени суток!
            Цитата
            1. Весь товар, закупленный и не возвращённый в этом месяце, делим на число дней в месяце, округляем до целого. Делаем во все дни одинаково, в последний день так, чтобы набрать сумму по количеству.

            Да соглашусь вы правы только в той части если все закупки и невозвраты продадутся, но в жизни такое не бывает часто... как бы это динамический процесс... поэтому и придумали термин "остатки". Нас инетерсует период и поэтому ненадо думать о другом периоде... смотрите период каждый период делится на 3 части:

            1) начало дня - тут что осталось от вчерашнего допустим возьмем 2 продкута творог и молоко... творог-5шт, молоко-4шт. Это остатки и все.
            2) это середина - тут будем или закупать если есть закупки или возврат если есть: допустим закупка молока-2шт, творога-0шт. Возврат молока-0шт, творог-1шт, ну и Продажа если были продажи молоко-2шт, творог-0шт.
            3) конец дня - после всех операций что осталось по молоку и творогу... осталось молока=4+2-0-2=4шт, творога=5+0-1-0=4шт.

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

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

            Вот массив слагаемых:
            • 479.7, 935.36, 664.41, ................. 140.82, 3559.42, 1017.56

            а Сумма к которой должно приблизится: 6268491.48
            Сообщение отредактировано: test4me -
              Ну здесь гибридный алгоритм из первой статьи.
              Самой программы у меня нет, т.к. её писала дипломница. Описание алгоритма - в статье.
                Цитата
                Ну здесь гибридный алгоритм из первой статьи.
                Самой программы у меня нет, т.к. её писала дипломница. Описание алгоритма - в статье.

                Все понятно спасибо огромное вам за время, умные идеи и описание алгоритма.... постараюсь к сроку если чтото получится надо успеть))))
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0326 ]   [ 15 queries used ]   [ Generated: 19.03.24, 06:14 GMT ]