Учи Кванты! → Курс → Задача о ранце
Ранец: ограничение «не больше»
Все ограничения в прошлых уроках были вида «ровно один»: гость на одном стуле, город на одном шаге. В жизни чаще встречается другое: не больше. Бюджет не больше суммы, груз не тяжелее нормы, бригад не больше двух. Самая короткая дорога к такому ограничению это задача о ранце, и на ней видно, почему штраф из урока о рассадке не подходит напрямую и как неравенство превращают в равенство битами запаса.
Чемодан на весах
Турист собирает рюкзак в поход, а авиакомпания даёт норму: 10 кг. Предметов шесть, у каждого вес и ценность по десятибалльной шкале. Палатка весит 4 кг и стоит 9 баллов, спальник 3 кг и 8 баллов, горелка 2 кг и 6 баллов, фотоаппарат 2 кг и 5 баллов, книга 1 кг и 2 балла, запасные ботинки 3 кг и 4 балла. Бит на предмет: взяли или нет. Это и есть задача о ранце: набрать как можно больше ценности, не выходя за норму веса.
Шесть битов дают 64 набора, и все они на карте: вес по горизонтали, ценность по вертикали, вертикальная черта это норма. Зелёные точки помещаются, серые нет. Лучший из зелёных обведён: палатка, спальник, горелка и книга, ровно 10 кг и 25 баллов. Перебор с проверкой нормы нашёл его мгновенно, и это точный ответ, с которым дальше сверяется всё остальное.
Теперь главный вопрос. В языке QUBO энергия равна минус ценности, и её минимум это все предметы разом, 15 кг. Норму в энергию пока никто не вписал. В прошлых уроках нарушение было вида «гость сидит на двух стульях», и его ловил квадрат разности. Здесь нарушение другое: перевес.
Это платный урок курса. Дальше — интерактив: виджеты, схемы и контрольные вопросы. Продолжение — в полном курсе «Учи Кванты!»: открыть полный курс.