2013-09-15 2 views
0

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

Пример

У меня есть эти элементы

  • 4oz говядины (231 калорий, 15 г жиров, углеводов, 0G 22г белка)
  • 1/2 чашки овсяной (260 калорий, 2 г жира , 58 г углеводов, 10 г белка)
  • 1/2 чашки черных бобов (120 калорий, 0,5 г жира, 23 г углеводов, 7 г белка)
  • 1 банан (105 калорий, 0 г жира, 27 г углеводов, 1 г белка)
  • 1/2 чашки творога (110 калорий, 5 г жира, углеводов 6g, 11g белка)
  • 1/2 чашки цельной пшеницы паста (200 калорий, 1 г жира, 40г углеводов, белков 8g)

и моя цель состоит в том, чтобы потреблять 745 калорий, < = 20г жира, < = 80г углеводов,> = 40г белка

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

ответ

1

Это базовое линейное программирование. Вы должны посмотреть на решателя для этих типов проблем. В мире Microsoft - Solver Foundation решит это. Вы также можете играть с решателем Excel, чтобы увидеть его в интерактивном режиме.

Лот с открытым исходным кодом. Если вы предпочитаете делать код самостоятельно и нуждаетесь в общем решении, используйте математику массива - вы будете решать систему уравнений неравенства. Таким образом, вы можете обращаться с ограничениями N и переменными Y.

+0

Я никогда не слышал о Solver, но сейчас я в нее влюблен. Я нашел [этот замечательный пример] (http://www.umsl.edu/~banisr/3320/docs/exammax.xls) о том, как решить проблему с рюкзаком, и было очень просто создать [эту реализацию excel именно то, что я хотел) (https://docs.google.com/file/d/0B76b2EOADTG7WGtjWFJVODlONUE/edit?usp=sharing). Хотя это был не самый прямой ответ, я думаю, что если бы я использовал Solver в качестве ориентира, было бы очень легко запрограммировать это на любом языке. Большое спасибо! –

Смежные вопросы