Найти - Пользователи
Полная версия: Перебор 2^1000 комбинаций
Начало » Python для экспертов » Перебор 2^1000 комбинаций
1
Ad_pro
Всем привет! Столкнулся с задачей из раздела оптимизации и комбинаторики, а именно- задача рюкзака.
Суть в следующем - имеется набор предметов, ограничение по весу, вес и ценность каждого предмета. Но в отличие от классической задачи рюкзака, у каждого предмета есть два варианта цены и веса.

Т.е. например рюкзак может взять 20кг
У нас есть
Картошка 10кг стоимостью 100р
Картошка 20кг стоимость 300р
Бутылка пива 1кг стоимость 500р
Бутылка пива 1кг стоимостью 100р
и т.д.
Т.е. для каждого предмета два варианта

Собственно как сейчас решаю задачу - из двух массивов входных данных получаю уникальные комбинации предметов (2^n комбинаций), загоняю каждую комбинацию в алгоритм рюкзака (использую “жадный алгоритм”), получаю массив выходных данных, беру решение с наибольшой “ценностью” - это и есть оптимальный вариант.
Все работает нормально, если у нас не больше 10-15 предметов. Но если предметов становится 20,50,100,1000 - это 2^1000 комбинаций, и всё уходит в глубокую кому. Не получается даже завершить генерацию уникальных комбинаций.

Подскажите пожалуйста, как решиь данную проблему? Возможно, у вас есть какое-то другое видение на решение данной задачи?

Уникальные комбинации генерирую так:
E=[]
off = [1 2 3 4 5]
on = [a b c d e]
for choices in itertools.product([0, 1], repeat=len(off)):
 E.append([(on[j] if choice else off[j]) for j, choice in enumerate(choices)])
4kpt
Ad_pro
Вы вообще слышали про оптимизацию?
Почитайте любую литературу. Рекомендую Банди Б. “Методы оптимизации. Вводный курс”. Для новичка - самое оно.

P.S. Решать задачу оптимизации перебором это адский хардкор :)
doza_and
Ad_pro
Возможно, у вас есть какое-то другое видение

Из описания задачи неясно почему вы не можете сделать:

Картошка_1 10кг стоимостью 100р
Картошка_2 20кг стоимость 300р
….

и применить обычный алгоритм заполнения рюкзака.

Ad_pro
doza_and
В условиях задачи имеется такое ограничение, что все предметы должны быть уникальными, т.е. нельзя взять сразу оба мешка картошки разного объёма\ценности, можно только один из них.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB