Доярка
05-01-2012, 08:14
Эту ошибку наблюдаю уже много лет – начиная с версий 1997-2003.
Пусть средствами Excel при установленной надстройке «Поиск решения» требуется решить две взаимно сопряжённые задачи линейного программирования: стандартную (z=Cx->max, Ax<=B, x>=0) и двойственную к ней (w=Bu->min, A(трансп)u>=C, u>=0). Пользуюсь тем, что при сохранении документа последние установки диалогового окна «Поиск решения» всегда сохраняются для каждого листа, там, где они заполнены. Вот и приходится решать эти сопряжённые задачи на разных листах. В прилагаемом заархивированном файле «LinearOpt.xls» при указанных исходных данных уже содержатся оптимальные решения обеих задач.
Действительно – в случае, если размерности задачи прежние, но изменились какие-либо исходные данные, достаточно их поменять – в прилагаемом файле на листе «Прямая задача» они выделены полужирным шрифтом. Можно также обнулить массив x. Затем на этом же листе запустить «Поиск решения» - ничего не меняя, «Выполнить». На листе «Двойственная задача» лучше обнулить массив u и затем выполнить свой «Поиск решения», также ничего не меняя. В результате значения z и w обязаны совпасть, а массивы (Ax-B)u и (A(трансп)u-C)x обязаны состоять из нолей (хотя бы примерно в пределах погрешности вычислений).
При решении этих задач в книге оба раза сохранены сценарии. Но, увы... Если в параметрах Excel: в версии 2007, пункт «Дополнительно», раздел «Параметры правки» установлен флаг «Использовать системные разделители» (т.е. в качестве разделителя целой и дробной части – как правило, запятая), а в других версиях – аналогично, то при запуске «Диспетчера сценариев» на каждом листе будут подставлены вроде ранее полученные решения, но... в качестве десятичного разделителя будут уже точки! Таким образом, Excel перестаёт воспринимать эти данные как числа, и в использующих их формулах везде появятся ошибки «#ЗНАЧ!».
Что приходится делать? Прежде чем вывести какой-либо сохранённый сценарий, в параметрах сбрасываю флаг «Использовать системные разделители» и в качестве разделителя целой и дробной части явно указываю точку, только после этого вывожу сценарий – всё отображается корректно. Но если привыкли к запятой, снова возвращаем этот флаг и т.д. Думаю, не очень удобно. Особенно тем, кто пользуется Excel на уровне «чайников» и довольствуется готовыми формулами, которые составлены более опытными пользователями – подобных «чайников» знаю превеликое множество!
Таким образом, из-за этой внутренней ошибки, вывод сценариев с решениями нескольких задач оптимизации на одном листе затруднителен. Для её обхода использую макросы. Но тогда для чего же нужен этот самый диспетчер сценариев?
Пусть средствами Excel при установленной надстройке «Поиск решения» требуется решить две взаимно сопряжённые задачи линейного программирования: стандартную (z=Cx->max, Ax<=B, x>=0) и двойственную к ней (w=Bu->min, A(трансп)u>=C, u>=0). Пользуюсь тем, что при сохранении документа последние установки диалогового окна «Поиск решения» всегда сохраняются для каждого листа, там, где они заполнены. Вот и приходится решать эти сопряжённые задачи на разных листах. В прилагаемом заархивированном файле «LinearOpt.xls» при указанных исходных данных уже содержатся оптимальные решения обеих задач.
Действительно – в случае, если размерности задачи прежние, но изменились какие-либо исходные данные, достаточно их поменять – в прилагаемом файле на листе «Прямая задача» они выделены полужирным шрифтом. Можно также обнулить массив x. Затем на этом же листе запустить «Поиск решения» - ничего не меняя, «Выполнить». На листе «Двойственная задача» лучше обнулить массив u и затем выполнить свой «Поиск решения», также ничего не меняя. В результате значения z и w обязаны совпасть, а массивы (Ax-B)u и (A(трансп)u-C)x обязаны состоять из нолей (хотя бы примерно в пределах погрешности вычислений).
При решении этих задач в книге оба раза сохранены сценарии. Но, увы... Если в параметрах Excel: в версии 2007, пункт «Дополнительно», раздел «Параметры правки» установлен флаг «Использовать системные разделители» (т.е. в качестве разделителя целой и дробной части – как правило, запятая), а в других версиях – аналогично, то при запуске «Диспетчера сценариев» на каждом листе будут подставлены вроде ранее полученные решения, но... в качестве десятичного разделителя будут уже точки! Таким образом, Excel перестаёт воспринимать эти данные как числа, и в использующих их формулах везде появятся ошибки «#ЗНАЧ!».
Что приходится делать? Прежде чем вывести какой-либо сохранённый сценарий, в параметрах сбрасываю флаг «Использовать системные разделители» и в качестве разделителя целой и дробной части явно указываю точку, только после этого вывожу сценарий – всё отображается корректно. Но если привыкли к запятой, снова возвращаем этот флаг и т.д. Думаю, не очень удобно. Особенно тем, кто пользуется Excel на уровне «чайников» и довольствуется готовыми формулами, которые составлены более опытными пользователями – подобных «чайников» знаю превеликое множество!
Таким образом, из-за этой внутренней ошибки, вывод сценариев с решениями нескольких задач оптимизации на одном листе затруднителен. Для её обхода использую макросы. Но тогда для чего же нужен этот самый диспетчер сценариев?