|
![]() |
#1 |
Участник
|
Решение
Итак.
Решение оказалось банально у нас под носом. Правда пока непонятно, как же им воспользоваться ![]() В Microsoft Excel есть встроенный инструмент "Поиск Решения" (SOLVER), который решает задачи, в том числе и целочисленные задачи квадратичного программирования, примером которой является приведенная задача. Прилагаю 2 файла, в которых поиск решения был выполнен с помощью этого средства (вручную). - Первый по примеру, приведенном здесь, второй - по реальному документу из системы. Результаты довольно хорошие ![]() Наш алгоримт дал более плохие результаты. Есть два варианта дальнейшего развития решения: 1. Попробовать повторить этот алгоритм в Аксапте (для этого нужно иметь доступ к исходным кодам надстройки solver.xla(m)) 2. Выгружать данные в Эксель, запускать надстройку (которая должна быть установлена у пользователя), получать из Экселя данные и использовать их. Для этого нужно перенести макрос, запускающий решение, в Аксапту. Что тоже усложняется за счет различных версий Эксель у пользователей (а с этим постоянно проблемы). Код, который делает это в VBA, такой приблизительно: X++: SolverAdd CellRef:="$D$2:$D$5", Relation:=4, FormulaText:="целое" SolverAdd CellRef:="$D$10:$D$13", Relation:=3, FormulaText:="$F$10:$F$13" SolverAdd CellRef:="$D$10:$D$13", Relation:=1, FormulaText:="$G$10:$G$13" SolverOk SetCell:="$D$16", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$2:$D$5" SolverSolve ![]() Я бы выложил сюда, но не знаю, нарушает ли это какие-то правила. Кода много, как выдрать из него только требуемую функциональность пока тоже непонятно. Кто что скажет/посоветует? Последний раз редактировалось kashperuk; 05.09.2007 в 11:27. |
|