Задача о погрузке судна (задача о ранце)

 

Пусть имеется судно грузоподьемностью х, требуется перевезти  n-типов предметов, si-стоимость i-го типа,oi-вес i-го предмета. Нужно набрать предметов на максимальную стоимость и удовлетворить условие грузоподъемности.

Zi=число предметов i-го типа. Тогда

Si=1nzi*oi<=x;                                Ln(z1,...zn)=Si vi*zi     цена груза

    суммарный вес груза               zi>=0,целочисленное

Если откинуть условие целочисленности, то задача решается просто

Пусть max(vi/oi)=vk/ok    тогда

                    max Ln=x*vk/ok

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

Пусть имеется 3 типа предметов:

o1=49,o2=50,o3=51, v1=20,v2=75,v3=100. Пусть x=100 (грузоподъемность).

Тогда max vi/oi=100/51=1.96

Нужно взять один предмет 3-го типа и один 1-го типа. Общая стоимость-120, вес-100. Но оптимальным решением является два предмета 2-го типа, так как общий вес будет 100,а стоимость- 150.