Russian Qt Forum
Апрель 24, 2024, 00:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: большое количество комбинаций и выбор оптимального решения  (Прочитано 24308 раз)
ksv-uk
Гость
« Ответ #15 : Сентябрь 06, 2016, 17:02 »

Вот, с этого места можно подробнее. Я понимаю, что можно решать обратным методом, но там тоже будут циклы.

Например потребность продукта на неделю  15 , я могу отклониться +-5, поэтому ищу в дипазоне нужную партию
« Последнее редактирование: Сентябрь 06, 2016, 17:04 от ksv-uk » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #16 : Сентябрь 06, 2016, 18:17 »

У вас есть продукты, которые не используют все 9 бочек.
Делайте цикл только по бочкам в пределах продуктов, которые будут включены в данную серию.
Например, Продукт 1 зависит только от Бочки 4 - значит, нет смысла для него перебирать остальные Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
ksv-uk
Гость
« Ответ #17 : Сентябрь 06, 2016, 20:28 »

Так с первым продуктом понятно. Как поступать с остальными? Например есть продукт который использует несколько видов сырья. а также продукты , которые также используют данное сырье. Т.е. я выравняю одно сырье, как сбалансировать все виды сырья?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #18 : Сентябрь 06, 2016, 21:28 »

Ну смотрите. Делаете цикл по продуктам от 1 до 10. С 1 понятно. Затем для 2 продукта подбираем пропорции так, что бочки использованы по максимуму. Запоминаем остатки в бочках, переходим к продукту 3. Снова подбираем максимальный расход бочек, с учётом остатков с предыдущего шага, если такие имеются для текущих бочек. Опять запоминаем остатки и переходим к продукту 4 и т.д. Таким образом получается только один внешний цикл по продуктам, а в каждом продукте циклы по коэффициентам только для используемых в нем бочек. В конце получим несколько бочек с "издержками производтства", но это будет ваш допустимый минимум Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #19 : Сентябрь 07, 2016, 08:26 »

не забыть qtconcurent для использования всех ядер при обработке в цикле
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Сентябрь 07, 2016, 09:52 »

Затем для 2 продукта подбираем пропорции так, что бочки использованы по максимуму. Запоминаем остатки в бочках, переходим к продукту 3. Снова подбираем максимальный расход бочек,
Продукты 2 и 3 могут использовать одну и ту же бочку. Идеальным может оказаться напр у каждого остаток по пол-бочки
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #21 : Сентябрь 07, 2016, 10:39 »

Продукты 2 и 3 могут использовать одну и ту же бочку. Идеальным может оказаться напр у каждого остаток по пол-бочки

Могут, поэтому мы должны запомнить остатки и использовать их в последующих продуктах.

Ну а если пол-бочки осталось и ничего с этим не сделать, придется, наверно, разбодяжить Улыбающийся
Кстати, алгоритм мог бы еще подсчитывать оптимальное разбодяживание сырья, с допустимым ухудшением продукта...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Сентябрь 07, 2016, 11:29 »

Так с первым продуктом понятно. Как поступать с остальными? Например есть продукт который использует несколько видов сырья. а также продукты , которые также используют данное сырье. Т.е. я выравняю одно сырье, как сбалансировать все виды сырья?
А как Вы выровняете хотя бы одно сырье? Напр сырье 8 используется всеми продуктами кроме 1. Тогда может так.

1) Перебираем все варианты продукта 2 (с шагом как у Вас) и сохраняем все остатки в контейнере. Если такой остаток уже есть - пропускаем
 
2) То же самое для продукта 3

3) Теперь из 2 контейнеров собираем общий. В него заносим остатки-суммы всех комбинаций 1-го и 2-го. Большинство остатков будет повторяться, их отбрасываем

4) Вычисляем остатки для продукта 4 и делаем сумму общий + остатки 4

И так по всем продуктам. В итоге получаем контейнер остатков из которого выбираем минимальный элемент. Смысл в том что с увеличением числа продуктов вычислительные расходы растут линейно
 
Записан
ksv-uk
Гость
« Ответ #23 : Сентябрь 07, 2016, 12:31 »

Что вы понимаете под "сохраняем все остатки в контейнере"?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Сентябрь 07, 2016, 12:48 »

Что вы понимаете под "сохраняем все остатки в контейнере"?
Тот пример что Вы привели
пример для одного продукта.  Продукт1 партия пр-ва 10 тыс.л.  Расход сырья (выше в таблице закладки. Для данного продукта используется только сырье 4. Закладка 179,5) : уйдет сырья 4 - 1795 кг. (вес бочки 250 кг). т.е видно что мы не вырабатываем бочку. (7.18 бочек)
След итерация +0,1  Продукт1 партия пр-ва 10.1 тыс.л.  Расход сырья (выше в таблице закладки) : уйдет сырья 4 - 1812,95 кг. (вес бочки 250 кг). т.е видно что мы не вырабатываем бочку. (7,2518 бочек)

итд.
Остатки будут 8-7.18 и 8-7,2518. Вот их и храним

Update: только храним как целые числа, напр домножаем float на 1000 и отнимаем 1 если не ноль. Чтобы контейнер не сильно разрастался
« Последнее редактирование: Сентябрь 07, 2016, 14:40 от Igors » Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #25 : Сентябрь 07, 2016, 21:27 »

Мое имхо, что нужно вводить весовые коэффициенты продуктов. Например, по количеству используемых материалов. Начинать расчет нужно с продукта, использующего максимальное количество сырья. Ввести ограничение сколько нужно его произвести или определить сколько его вообще можно выработать. А потом или начинать считать по убыванию количества используемого сырья. За примером смотреть тут (тут правда один материално разные продукты. несложно переложить на лад топикстартера)  http://industrial-wood.ru/lesopilenie/6250-proektirovanie-optimalnyh-sistem-postavov-s-ispolzovaniem-evm.html . Да  похоже на рюкзак, но другого ничего не выдумаешь. В конце концов Задача о назначении какую мы тут видим это тоже вариант рюкзака.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 579


Просмотр профиля
« Ответ #26 : Сентябрь 08, 2016, 07:42 »

В самой постановке задачи "выбор оптимального решения" есть ответ, каким образом целесообразно ее решить без полного перебора комбинаций. Сейчас имеется 9 продуктов, а как быть, если продуктов станет больше? Требуется сформулировать целевую функцию - сейчас это количество остатков, потом может другой критерий оптимизации. Затем использовать любой алгоритм оптимизации, подставляя объемы продуктов из области допустимых значений. Имхо, такая задача сходится достаточно быстро.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Сентябрь 08, 2016, 09:18 »

...есть ответ..
...использовать любой алгоритм оптимизации,...
...такая задача сходится достаточно быстро.
Ну как-то складывается впечатление что, мол, да тут легко, общих фраз вполне достаточно Улыбающийся Я так не считаю, задачка трудная (хотя возможно и стандартная).

звучит как задача о ранце
Ну и типа дальше все ясно - гуглим, находим решение и реализуем. Вряд ли. Во-первых не вижу где тут (зас)ранец Непонимающий Мы ничего не наполняем, наоборот, общее кол-во может быть очень разным. Во-вторых, даже если бы и "попали" - толку немного. "Ранец", "Коммивояжер" и др. - эти задачи известны сотни лет, а вот каких-то четких решений нет. Ну вот рекомендуют напр "метод ветвей и границ" - и что? Как его здесь применить, где же "ветви"? Улыбающийся Не говоря уже о том что есть масса вариаций задачи
Записан
ksv-uk
Гость
« Ответ #28 : Сентябрь 08, 2016, 09:32 »

Да, согласен. Я тоже не увидел здесь стандартных алгоритмов. Может кто-то сталкивался с подобными задачами на практике?
Если решать обратным методом, т.е. идти циклом не по продуктам, а по бочкам. То тоже кол-во комбинаций будет большое, так как если я вырабатываю не целые бочки, а например
98% 1 бочки (1 сырье), 99,5% бочек (2 сырье); 96% бочек (3 сырье) ... Это тоже может быть решением. 
« Последнее редактирование: Сентябрь 08, 2016, 09:35 от ksv-uk » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Сентябрь 08, 2016, 09:54 »

Да, согласен. Я тоже не увидел здесь стандартных алгоритмов.
То что я предложил стандартно, называется "динамика" (динамическое программирование), вроде здесь подходит
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 22.