Как бы вы решили олимпиадную задачу для студентов по программированию на 1с? #649216


#0 by Doomer
Для хранения спецодежды на предприятии используется три склада. Предприятие ведет бухгалтерский учет в программе "1С:Бухгалтерия 8". Учет спецодежды ведется в составе материальных запасов на счете 10 в разрезе субконто "Материалы" и "Склады" в стоимостном и натуральном выражении. Оценка материальных запасов производится по средневзвешенной цене, которая определяется отдельно для каждого материала по предприятию в целом. В информационной базе предприятия зафиксированы остатки спецодежды на 1 апреля 2012 г. по каждому наименованию спецодежды и по каждому складу. Предприятие решает ликвидировать один из складов для хранения спецодежды, а остатки спецодежды с этого склада переместить на два оставшихся склада таким образом, чтобы стоимостная оценка запасов спецодежды на этих двух складах по возможности составляла бы одинаковую величину или, если это невозможно, различалась бы минимально. При этом следует исходить из того, что перемещать исходные запасы спецодежды между неликвидируемыми складами запрещено. Требуется В каркасной конфигурации разработать программу, которая анализирует текущие остатки спецодежды на складах и формирует отчет, содержащий две таблицы. В первой таблице отображается текущее наличие запасов спецодежды на складах и определяется средняя цена для каждого наименования спецодежды.
#1 by Doomer
Кроме симплекс метода ничего не придумал с ходу.
#2 by Бешеная Нога
БУГАГА! Дафпесту.
#3 by saasa
позвал бы прога 1с и дал ему задание.
#4 by Doomer
Да там задача к 1С опосредованное отношение имеет. На любом языке можно эту же задачу решать.
#5 by Neg
сто пудов, только  симплекс метод!
#6 by Doomer
Так он тоже оптимального решения не даст. Даже какой-нибудь случайный перебор может дать лучшее решение.
#7 by NS
симлекс даст лучшее решение. Но можно решать направленным перебором с отсечениями.
#8 by Alsh
+ в порядке уменьшения
#9 by NS
да, естественно.
#10 by GROOVY
Вот олимпийская задачка:
#11 by Doomer
Я может что то путаю, но исходя из задачи можно подобрать такую комбинацию товара так что сумма на обоих складах будет одинакова. Симплекс метода может не привести к тому же результату.
#12 by Doomer
Это олимпиада телепатов?
#13 by NS
серьезно? Чего симлекс метод может не дать?
#14 by Doomer
Все вспомнил. Туплю. Прошу прощения.
#15 by Asmody
симплекс метода недостаточно, задача-то целочисленная, иначе чего ей делать на олимпиаде.
#16 by NS
Задача о рюкзаке сводится к чистому симлекс методу. А это она и есть.
#18 by NS
Но лучше решать перебором с отсечениями.
#19 by Asmody
это расширение симплекс метода. "чистый" симплекс метод допускает действительные решения
#20 by NS
Нет, это способ решения задач целочисленного линейного программирования симлекс методом.
#21 by Asmody
а нафига вообще огород городить? тут переменная одна, остальное константы.
#22 by NS
Тут не одна переменная. С каких пор в задаче о рюкзаке одна переменная? Тут нужно найти целочесленный оптимальный вектор согласно условиям.
#23 by Lionee
в Тема нашей Глыбе, задам она .... в шоке )))
#24 by Lionee
тут переменная одна симплекс метод
#25 by NS
Для каждой спецодежды нужно найти количество. Тут переменный вектор, чистая задача о рюкзаке. Решить можно например так -
#26 by NS
Пусть на первом складе остатков на сумму а, на втором на сумму в, на третьем на сумму с. Если а>=b+c, то весь остаток посылаем на второй склад, если b>=a+c, то весь остаток посылаем на первый склад. Иначе подбираем с отсечениями начиная с самых дорогих сумму(с-abs(a-b))/2 и закидываем на склда с большим остатком.
#27 by NS
А точнее - последним пунктом решаем задачу о рюкзаке любым из известных способов.
#28 by Lionee
ты  правильно сказал,сам ты запутался ,+61 и 62
#29 by ILM
Зачем два одинаковых по сумме склада нужны?
#30 by rphosts
если нужно неоптимальное решение - то это просто: 1.считаем средневзвешенное на 1 складе и на втором (не просто считаем а готовим показатели для пересчёта при очередном изменении (т.е. сумму и кол-во)). 2.сортируем товар неликвида по стоимости в порядке убывания. 3.ну и погнали в цикле: пусть на очередном шаге по товару СПЕЦКУРТКА на складе А себестоимость > себестоимости этого товара на складе Б, то отправляем этот товар с ликвидируемого склада(по 1 шт) в склад с меньшей себестоимостью в том случае если цена единицы будет больше стоимости на складе Б или на склад А если будет меньше... но много шагов.. можно оптимизировать отправляя сразу такое кол-во, что-бы оно выравнивало себестоимость (рассчитывается в несколько арифм. операций), но не более остатка этого товара на ликвидируемом складе... если после округдения получим =0, то отправляем 1 шт т.к. всёравно нужно по этим складам расфасовать. ну это типа как в первом приближении, можно ещё оптимальнее схему нарисовать но нужно уже брать в руки ручку, марать бумагу...
#31 by SilverMan
ЗЫ: Это я про прикладное, а не про академическое применение решения.
#32 by НафНаф
Оценка материальных запасов производится по средневзвешенной цене, которая определяется отдельно для каждого материала по предприятию в целом. В информационной базе предприятия зафиксированы остатки спецодежды на 1 апреля 2012 г. по каждому наименованию спецодежды и по каждому складу. то есть еще и политика поменялась, раньше склады учитывались - теперь нет
#33 by Михаил Козлов
1. Если перемещаемые количества могут быть нецелыми, то задача сводится к решению 1 линейного уравнения в положительных переменных. Можно и симплекс-методом, но в данном случае решение (одно из решений, т.к. их много) ищется проще. 2. В случае целочисленности переменных, если требуется точное равенство сумм, задача состоит в решении 1 линейного уравнения в неотрицательных целых. Решения может и не быть, но, в общем случае, чтобы в этом удостовериться, может понадобиться полный перебор. Если требуется по возможности приблизиться к равенству сумм ("минимизировать" отклонение сумм), можно попробовать какую-нибудь разумную эвристику. Например, начав с самых дорогих товаров пытаться за счет распределения очередного товара добиваться равенства сумм. Тогда отклонение сумм не будет превышать цены самого дешевого товара.
#34 by GANR
В Excel/MathCAD расчеты провел бы - проще паренной репы, а потом в 1С данные об остатках и стоимости одежды на складах задолбил бы.
#35 by NS
Нецелые количества спецодежды?
#36 by Михаил Козлов
Рукав на один склад, полу - на другой.:-) А про нецелые количества я написал в связи с упоминаем симплекс-метода. Целочисленный вариант тоже описан.
#37 by NS
Целочисленный вариант - это задача о рюкзаке.
#38 by Михаил Козлов
. Почти согласен (в том, что "рюкзачные" методы могут подойти): давайте постановку и сведение к рюкзаку.
#39 by NS
, см.
#40 by Shurjk
гыы, задание по 1с уже на олимпиадах по программированию в универе. В топку такие универы.
#41 by samozvanec
получить разницу между складами, разбить перемещаемое на достаточно мелкие наборы и перемещать. для простоты эту разницу "перевернуть", представить остатком, дополнить суммы остатка тем, что окажется лишним после уравнивания, и вперед
#42 by Михаил Козлов
Это способ решения, а не сведение к ранцу.
#43 by Новенький_2009
@Ns, а в типовых нет реализации?
#44 by NS
Непонял. Последний пункт это что?
#45 by NS
Я действительно написал все-го лишь метод решения, но последним пунктом в этом методе - рюкзак.
#46 by NS
Нет конечно.
#47 by Михаил Козлов
"Рюкзаком" можно, конечно, назвать широкий класс похожих задач, но "классически" это переменные 0 или 1 и максимизация суммы при ограниченном весе. Не уверен, что в олимпиадной задаче в условиях ограниченности времени целесообразно реализовывать схему ветвей и границ, но при обсуждении здесь, наверное, не лишне "проявить" математический характер задачи и дать ссылку на известные подходы к ее решению. Правда, не уверен, что автор топика понял, о чем идет речь.
#48 by NS
считай каждый штуку предмета отдельным предметом. И ставь ноль либо один. Но на самом деле формулировка задачи о рюкзаке. Нет там нуля и единицы, а есть набор предметов. Задачу подбора суммы максимально близкой к данной можно свести легко к подбору суммы не большей (но не надо сводить). Сначала подбираем необходимую сумму, а потом общую сумму - (минус) необходимую. И выбираем лучшую. Данная задача (последний пункт описанного мной метода в ) - это чистый рюкзак.
#49 by Михаил Козлов
Число переменных неоправданно разрастается: будет выбран тот или иной конкретный экземпляр сапог неважно. Я бы так исходную задачу не переформулировал. Кроме того, однозначно лучшего метода для рюкзака нет: часто достаточно жадного алгоритма.
#50 by NS
Я и пишу - не надо переформулировать. В общей задаче о рюкзаке нет условия что каждого предмета по одной штуке. Есть формулировка что количество каждого целочисленно, и либо ограничено, либо неограничено (это тоже задача о рюкзаке). Способов решения есно куча, начиная с динамического программирования, и заканчивая подбором точной суммы решением системы линейных уравнений.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С