Задача о распределении по N рюкзакам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.01.23 09:12
Оценка:
Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.

Есть для задачи оптимизации решение лучше перебора с гарантированным нахождением глобального минимума?

Я не смог придумать. Написал в итоге генетический алгоритм, но он даёт локальные минимумы. Пришлось рандомизировать начальные условия и запускать много раз. Так как не требовалось искать минимум, достаточно было найти решение, которое даёт попарные отклонения меньше порога, то задачу я решил.

Спустя время я натолкнулся на скрипт и решил спросить у сообщества есть ли решение. Очевидно что задача обобщается для любого количества рюкзаков.
Re: Задача о распределении по N рюкзакам
От: ilnar Россия  
Дата: 18.01.23 09:37
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


G>Есть для задачи оптимизации решение лучше перебора с гарантированным нахождением глобального минимума?


Выглядит как задача целочисленного программирования, только целевая функция не целочисленная.
Ещё задачу усложняет то, что у тебя 2 критерия оптимизации: по весу и объему. Придется выбирать что-то одно, или приводить к одному критерию через веса.

Эвристика:
1. сортируем вещи по убыванию "критерия" (вес или объем)
2. выбираем наименее заполненый рюкзак
3. кладем очередную вещь в этот рюкзак.
4. иди в п.4 пока есть вещи
Re: Задача о распределении по N рюкзакам
От: cppguard  
Дата: 18.01.23 10:21
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


https://en.wikipedia.org/wiki/Knapsack_problem#Solving
Re[2]: Задача о распределении по N рюкзакам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.01.23 11:20
Оценка:
Здравствуйте, ilnar, Вы писали:

I>Ещё задачу усложняет то, что у тебя 2 критерия оптимизации: по весу и объему. Придется выбирать что-то одно, или приводить к одному критерию через веса.

Увы важно именно оба.
Re[2]: Задача о распределении по N рюкзакам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.01.23 11:21
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:



G>>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


C>https://en.wikipedia.org/wiki/Knapsack_problem#Solving

Как решать задачу с одним рюкзаком я в курсе. Как сделать с множеством рюкзаков?
Re[3]: Задача о распределении по N рюкзакам
От: iriska2  
Дата: 18.01.23 17:20
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, cppguard, Вы писали:


C>>Здравствуйте, gandjustas, Вы писали:



G>>>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


C>>https://en.wikipedia.org/wiki/Knapsack_problem#Solving

G>Как решать задачу с одним рюкзаком я в курсе. Как сделать с множеством рюкзаков?
Видимо, так же только каждый раз будет не 2 варианта, а 2 ^ N вариантов
Re: Задача о распределении по N рюкзакам
От: lovetski Россия  
Дата: 19.01.23 11:33
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


А точки равновесия по Нэшу не смотрели? Может ведь и получиться.
Konstantin.
Re[3]: Задача о распределении по N рюкзакам
От: paradok  
Дата: 19.01.23 11:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, ilnar, Вы писали:


I>>Ещё задачу усложняет то, что у тебя 2 критерия оптимизации: по весу и объему. Придется выбирать что-то одно, или приводить к одному критерию через веса.

G>Увы важно именно оба.

ну не упрямся!
придумай формулу хорошести, типа X=F(вес,объем) и по ней оптимизируй.
Re: Задача о распределении по N рюкзакам
От: Chorkov Россия  
Дата: 19.01.23 12:35
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Есть около 50 "вещей". У каждой вещи есть "объем" (целое число больше 0, максимум около 15) и "вес" (вещественное число, больше нуля, максимум около 30). Все вещи надо распихать по 4 рюкзакам максимально равномерно (минимальная сумма квадратов попарных разностей объема и веса, можно не нормировать), оставлять ничего нельзя.


G>Есть для задачи оптимизации решение лучше перебора с гарантированным нахождением глобального минимума?


G> Я не смог придумать. Написал в итоге генетический алгоритм, но он даёт локальные минимумы. Пришлось рандомизировать начальные условия и запускать много раз. Так как не требовалось искать минимум, достаточно было найти решение, которое даёт попарные отклонения меньше порога, то задачу я решил.


G>Спустя время я натолкнулся на скрипт и решил спросить у сообщества есть ли решение. Очевидно что задача обобщается для любого количества рюкзаков.



Я бы попробова ввести дополнительный потенциал:

F[i] = M[i] * summ_j( M[j] ) + V[i] * summ_j( V[j] )

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

Было бы интересно посмотреть на несколько типичных наборов входных данных...
Может оказаться, что есть какая-то очень относительно простая эмпирика для характерных входных данных...
Re[3]: Задача о распределении по N рюкзакам
От: ilnar Россия  
Дата: 26.01.23 10:25
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, ilnar, Вы писали:


I>>Ещё задачу усложняет то, что у тебя 2 критерия оптимизации: по весу и объему. Придется выбирать что-то одно, или приводить к одному критерию через веса.

G>Увы важно именно оба.

Вы наверное думаете, что оба критерия легко совместить.
Но на практике могут быть такие входные дынные, где два критерия диаметрально противоположны
Вам придется выбрать функцию, которая их комбинирует
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.