M>А в чем проблема? Полагаете Xi, Xj, ..., Xk равными 1, Xm,..., Xf равными 0, получаете задачу с меньшим количеством переменных:
M>d1Y1 + d2X2 + ... + dmYm <= Sum' (= Sum — ciXi — ... ckXk) M>a1Y1 + a2Y2 + ... + amYm -> Max M>Yi из {0,1}
M>Т.е. просто уменьшится размерность задачи, решать станет легче.
M>>6. И условия группирования альтернатив — скажем объединяем альтернативы Xm, Xs, ... , Xf в группу и говорим, что только одна из альтернатив этой группы должна быть профинансирована.
M>Добавляем еще условие
M>Xm + Xs + ... + Xf <= 1 (или =1, если ровно одна альтернатива должна быть профинансирована обязательно)
Только подскажите пожалуйста — каким методом эту задачу лучше решать. Я сначала думал комбинаторикой или полным перебором (Я так понял, что это задача о рюкзаке, с некоторыми наворотами), но при каждом увеличении альтернатив время работы алгоритма при этом возрастает в разы.
Потом еще прочитал, что такую задачу решают методами динамического программирования — при этом количество альтернатив может быть достаточно большим. Не подскажите, какие материалы (книги) стоит почитать для решения такой задачи. Вот собираюсь идти в библиотеку. А можт есть уже готовые компоненты или библиотеки для решения подобных задач. Если что, то я пишу эту прогу на Object Pascal (Delphi6)