Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 123 След.
Рассчитать усреднение по курсу валют
 
Цитата
Ирина Тихонова написал:
как посчитать средний курс с 20 числа предыдущего месяца по 19 число настоящего?
Можно использовать две методологии:
1. Брать средние значения фактически устанавливаемых курсов по торгам, публикуемые на cbr.ru, при этом среднее берется не за 30/31 день, а меньше, т.к. курс на воскресение и понедельники не устанавливается (т.к. нет торгов на бирже)
2. Брать среднее значение всех курсов, действующие на каждую дату (даже если нет торгов)

Пример во вложении.
На работе применяется вариант 1, для формульного ценообразования на сырье.
Изменено: MCH - 30 ноя 2020 13:55:28
Разнесение и подсчёт количества серий из цифр в строке, количества цифр и их сумм в заданном диапазоне
 
Цитата
Peet написал:
т.е. если в строке идёт 24245 6 7 24 - то 1 серия сумма 53 и 3 числа сумма 47
у меня получается 6 + 7 + 24 = 37, а не 47

В принципе, моя функция так и считает
Изменено: MCH - 24 ноя 2020 17:15:46
Разнесение и подсчёт количества серий из цифр в строке, количества цифр и их сумм в заданном диапазоне
 
Реализовал как понял:
Если подряд сумма часов превышает 24, то считаем ее как вариант 1, если не превышает, то как вариант2
поэтому подряд 2+2 или 3+3 это одна серия, но суммарно менее 24, возможно нужно как то иначе реализовать
Максимальные расстояния между одинаковыми знаками строки
 
Цитата
БМВ написал:
только так не лучше?
Можно еще на пару символов сократить:
Код
=МАКС(МУМНОЖ(ЕСЛИОШИБКА(ПОИСК(C$1;{0;""}&$B2;СТРОКА($2:$99)););{-1:1}))
Максимальные расстояния между одинаковыми знаками строки
 
Цитата
БМВ написал:
только так не лучше?
Наверно лучше, немного не дожал
Максимальные расстояния между одинаковыми знаками строки
 
Цитата
БМВ написал:
если не извлекать символ искомый из заголовка то естесвенно короче
да, не извлекал, а прописал в заголовках. Соответственно короче, сделал еще немного короче за счет МУМНОЖ:
Код
=МАКС(МУМНОЖ(ЕСЛИОШИБКА(ПОИСК(C$1;$B2;СТРОКА($1:$98)+{0;1})+{1;0};);{-1:1}))
Изменено: MCH - 20 ноя 2020 18:32:07
Максимальные расстояния между одинаковыми знаками строки
 
Есть 76, вскрываемся или в избушку перенести вопрос?
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
В продолжении решения задачи макросом, для сокращения количества транзакций, можно отсортировать исходный массив данных случайным образам, запустить решение несколько раз и выбрать лучшее решение (с наименьшим количеством транзакций).
Каждый раз макрос подберет решение с наименьшей суммой транзакций, пытаясь сократить их количество, тем самым можно немного улучшить решение, если это возможно.

Например, для задачи про машины уже находится не 29, а 28 транзакций - это наименее возможное для этой задачи
Также на приложенных случайных данных в задачах на 100 и 200 значений получается немного их уменьшить
Изменено: MCH - 20 ноя 2020 11:59:16
Максимальные расстояния между одинаковыми знаками строки
 
Цитата
БМВ написал:
Краюшки обрезает? Если да то можно посмотреть.
У меня полное соответствие результатов UDF и формулы
Максимальные расстояния между одинаковыми знаками строки
 
Цитата
Jack Famous написал:
получилось по скорости также или незаметно быстрее
не увидел принципиальной разницы в алгоритме
Максимальные расстояния между одинаковыми знаками строки
 
В "Избушку" перенесем?
Есть формульное решение - 101 99 символов
Изменено: MCH - 20 ноя 2020 10:39:14
выборка 5 позиций из списка, сумма которых равна какому-то значению, выборка 5 позиций
 
Если вариантов получить сумму 84400 несколько, какой выбирать?
20190+19255+18049+13752+13154 = 84400
20190+18711+16892+14855+13752 = 84400
20190+17176+17027+15418+14589 = 84400

http://www.excelworld.ru/forum/3-5196-1
Максимальные расстояния между одинаковыми знаками строки
 
Код
Function MaxDist(s As String, txt As String) As Long
    Dim i As Long, j As Long, m As Long
    i = InStr(txt, s)
    While i > 0
        j = InStr(i + 1, txt, s)
        If j - i - 1 > m Then m = j - i - 1
        i = j
    Wend
    MaxDist = m
End Function
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Цитата
Barmaldon написал:
в вашей формульной версии решения также не понял как увеличить/уменьшить число участников
Формулы массива в заголовках заменил на обычные формулы, теперь вставлять/удалять/растягивать будет проще
Изменено: MCH - 17 ноя 2020 12:46:49
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Цитата
Андрей VG написал:
На выходных расковыряю
Сделал примеры на 20, 40 и 100 значений с заполнением случайными величинами (числа должны быть целыми)
Потестируйте
Изменено: MCH - 17 ноя 2020 10:41:59 (Добавил расчет на 200)
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Сделал решение макросом в котором попытался уменьшить количество транзакций, на примере из 20 чисел, там где формулы генерируют 19 транзакций, макросом получилось 14
Это не обязательно оптимально, но лучше чем формулы.

На примере данных машин и грузов получилось 29 транзакций (это всего лишь на одну больше, чем в самом оптимальном варианте)

PS: макрос работает только с целыми числами, т.к. применяется динамическое программирование для задачи суммы подмножеств
Изменено: MCH - 16 ноя 2020 09:10:30
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Эти задачи похожи, но разные, т.к. вместимость транспорта больше товаров, то деление товаров между транспортом можно сократить в большем количестве, чем в текущей задаче
про "Поиск решения" я писал именно про то, как было применено мной здесь в сообщении № 5, там не стоит задача минимизация количества транзакций, а только минимизация суммы всех транзакций
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Цитата
Андрей VG написал:
но ведь при формульном раскладе не выполняется
Добрый день Андрей, я это знаю
Могут быть варианты, когда формульное решение не приводит к минимальному количеству транзакций, но все же транзакций не более n-1 (не стал публиковать данные примеры, но их можно сгенерировать много).

Возможны случаи, когда то что забираем у одного отдаем столько же другому или сумма нескольких расходов одних, равна сумме доходов других тогда количество транзакций можно не много сократить.
Кстати и Поиск решения не обязательно сократит количество транзакций.
И формулы и Поиск решения находят решение с минимальной суммой всех транзакций, но не с минимально возможным их количеством  

Чтобы решить еще и задачу на минимизацию количество транзакция (если это возможно), то потребуется существенно больше времени.
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Цитата
Barmaldon написал:
А какая вкладка в вашем файле является финальной версией?
На "Лист1" - реализация от Ігор Гончаренко
На листах Вар4 и Вар10 - реализация простой формулой с доп. вычислениями, на 4 и 10 человек соответственно
На листе Вар10 (2) - вариант для 10 человек с более сложной формулой, но без доп. вычислений
Можете использовать любой вариант.

Я бы рекомендовал использовать вариант с простыми формулами и доп. вычислениями, как более простой в понимании и который легче править и масштабировать.
Изменено: MCH - 15 ноя 2020 10:52:32
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Сделал свое фармульное решение, получилось похоже на то, что сделал Ігор Гончаренко
Есть сложный и более простой вариант, простой вариант будет легче понять

PS: В желтых ячейках находятся формулы массива введенные сразу в диапазон (Ctrl+Shift+Enter), поэтому править их нужно иначе, чем обычные формулы  
PPS: Пустые строки и столбцы нужны для того чтобы написать одну универсальную формулу для всех ячеек
Изменено: MCH - 15 ноя 2020 09:52:58
Как разделить разные суммы между n людей так, чтоб у всех было поровну?, надо узнать кто кому сколько передает
 
Через "Поиск решения"

UPD: добавил вариант на 10 человек
Изменено: MCH - 13 ноя 2020 16:23:24
Распределение товаров по заданной сумме
 
Цитата
Артем Хазеев написал:
Нужно выделить товары группами, чтобы общая сумма товаров в группе не превышала 99999руб
Данные из приложенного файла распределил ровно по 99 999 (кроме последней суммы)

Можно и 4,5к распределить
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Данную задачу можно свести к решению линейным программированием
Где целевой функцией будет минимизация стыков (распределения одного товара по разным автомобилям) при заданном количестве автомобилей.

Пример "ручного" построения модели во вложении, построенную модель решал уже через OpenSolver
Теоретически решение задачи можно полностью автоматизировать и будет гарантированно найден оптимальный вариант (минимизация количества стыков).
Изменено: MCH - 13 ноя 2020 09:27:39
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Решил поупражняться на случайных данных, 769 ящиков на 14 машин
Если у кого нибудь получится найти адекватный алгоритм, сравните с найденными мной решениями
Изменено: MCH - 12 ноя 2020 17:10:07
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
IKor написал:
Коллеги, а рассматривался ли вариант с поиском решения в несколько итераций?
Я собственно так и решал (в несколько итераций)
1. определяем количество машин
2. определяем, минимальное количество товаров которые нужно распределять (те, что не влезают в одну машину)
3. алгоритмом, подходящим для линейного раскроя пытаемся распределить груз с учетом определенного минимума к разделению груза между машинами
4. если на шаге 3 не удается найти решение, то пытаемся найти решения для разделения товаров в количестве min+1 (и т.д. до получения результата)
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
Светлый написал:
даёт оптимальный результат (для имеющимся данных)
Сергей, исходный набор данных - 718 ящиков на 14 машин достаточно простой в распределении
Значительно сложнее распределить 769 ящиков на 14 машин с наименьшим распределением по различным машинам
Скрытый текст
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
Андрей VG написал:
А тут-то над чем думать? N! по остаткам и товарам
Ну мы же не знаем масштаб задачи, все что выше 15! уже не поддается перебору
Свое решение на 769 чуть улучшил

Хотелось бы понимать, на сколько велика задача в реальности, количество товара и машин существенно больше чем 22/14 или примерно столько же?
Изменено: MCH - 12 ноя 2020 10:39:06
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
Volounteer написал:
Кажется, что это разные вещи. И алгоритмы для раскроя решают первую, а не вторую.
Примеры распределения, которые я привел не оптимальны?
Они как раз и получены алгоритмом раскроя + небольшая эвристика когда необходимо распределять один товар по разным машинам
Цитата
Volounteer написал:
Мне же нужно не упаковать остаток коробок в наименьшее возможное число машин, а распределить по имеющемуся числу авто таким образом, чтобы минимизировать "разрывы" одного товара между машинами.
У Вас уже задано - наименьшее возможное число машин.
Если товары распределяются в указанные машины алгоритмом раскроя - то решение найдено
Если не распределяется, то необходимо разделять товар между машинами.
Минимальное количество распределяемого товара - это тот товар, количество которого больше вместимости машины
Далее пытаемся минимизировать количество разделяемого товара, здесь уже нужно думать над алгоритмом поиска оптимального (или приемлемого) решения
Изменено: MCH - 11 ноя 2020 22:15:49
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
Андрей VG написал:
Не лучшая реализация, если вот так
По данному примеру данных приходится распределять груз между машинами, чтобы все убралось в 14 машин
То, как я распределил - во вложении
Распределение ящиков по заданному числу машин с минимальным перемешиванием товаров
 
Цитата
Андрей VG написал:
Ну, я думал, что ваш тёзка  MCH  откликнется
Для меня тема интересная.
Алгоритм решения задачи вижу такой:
Определяем минимальное количество машин: округлвверх(суммарное количество/вместимость)
Груз, который больше вместимости в одну машины разделяем, 60 ящиков это 55+5 (но можно разделить и 50+10 или 45+15 и т.п.)
Далее задачу сводим к задаче раскроя (упаковки в контейнеры) любым из алгоритмов.

В данном случае 718 ящиков очень легко распределить на 14 машин, подойдет и жадный алгоритм
Если  не получается распределить груз на 14 машин, то нужно принимать  решения, какой груз разделяем по машинам и какое решением будет  приемлемым.
(например если весь товар по 30 ящиков, то невозможно его без разделения упаковывать в машины вместимостью 55)

Во вложении пример полуручного  распределения груза по 14 машинам, в первом варианте распределяем по  максимуму первые 13 машин, остаток в 14ю
во втором варианте распределяем груз равномерно, 4 машины по 52 ящика и 10 машин по 51 ящику
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 123 След.
Наверх