2016-03-03 4 views
0

Я пытаюсь использовать решатель для решения нелинейной проблемы, но результаты не согласуются и изменяются при определенных условиях. Эта проблема не существует при использовании платформы Risk Solver, но при использовании обычного Excel Solver. Оптимизация и ограничения не сложны, поэтому я не понимаю, что происходит.Excel Solver не дает согласованных результатов

Вот файл: temp.xlsm

Уведомления есть макросы, связанные с кнопками прикрепленных запустить решатель.

реплицировать проблема:

  • Открыть файл
  • Нажмите Months вкладку
  • Initial Заражение должна быть на уровне 11%
  • Нажмите Optimize Net Revenue (Correct оптимальные условия, это хорошо)
  • Изменить Исходная инфекция до 1%
  • Нажмите Optimize Net Revenue
  • Изменить Initial Заражение назад до 11%
  • Нажмите Optimize Net Revenue

Примечание: Optimal Чистый доход теперь ниже, а в прошлом месяце последний столбец является отрицательным, когда он должен быть равен нулю. Кажется, что решатель нужно сбрасывать каждый раз, или есть ошибка, но я не могу понять это. Вот макрос:

Sub Monthly_Solver() 

    Application.Run "SolverReset" 
    Application.Run "SolverOk", "$T$18", 1, "0", "$F$6:$F$17,$N$6:$N$17", 1, "GRG Nonlinear" 
    Application.Run "SolverAdd", "$F$6:$F$17", 5, "binary" 
    Application.Run "SolverAdd", "$N$6:$N$17", 1, "$M$6:$M$17" 
    Application.Run "SolverAdd", "$N$6:$N$17", 3, "0" 
    Application.Run "SolverAdd", "$T$18", 3, "0" 
    Application.Run "SolverSolve", True 

End Sub 

ответ

1

GRG Nonlinear не гарантирует обнаружение глобального оптимального решения. Он находит локальное оптимальное решение, и на качество этого решения влияют начальные значения, которые вы предоставляете алгоритму. От Frontline-х website:

Когда сообщение «Solver нашел решение» появляется, то это означает, что метод Г.Р.Г. нашел локально оптимальное решение - не существует никакой другой набор значений для переменных решения, близкие к текущим значениям что дает лучшее значение для целевой функции. Образно это означает, что Solver нашел «пик» (если максимизация) или «долину» (если минимизировать), но если модель не выпуклая, могут быть другие более высокие пики или более глубокие долины, расположенные далеко от текущего решения. Математически это сообщение означает, что условия Каруша - Куна - Такер (KKT) для локальной оптимальности были удовлетворены (с точностью до определенного допуска, связанного с настройкой Precision в диалоговом окне «Параметры решения»).

Прямо сейчас, ваш столбец Harvest имеет 3131 в N14:N16. Если вы измените initial infestation на 1% и решите снова, N14:N17 будет иметь значение 3131. Таким образом, ваше первоначальное решение изменилось. Если вы измените его на 11% без изменения значения в N17, то решатель может найти другое локальное оптимальное решение. Если вы установили N17=0, вы получите то же самое решение, что и первое.

В противном случае, если единственной причиной для GRG Nonlinear является двоичная переменная Spray и условия if/then, которые она представляет, вы можете использовать линейные ограничения (так что глобальная оптимальность более вероятна). Вот quick reference.

+0

Благодарим за помощь.Я попытался изменить 'N17 = 0', чтобы получить одно и то же решение, но оно не работает. Кроме того, спасибо за ссылку, но я не уверен, как определить условие if/then как линейное ограничение. – Vedda

+0

Ниже приведены шаги, которые я выполняю: Текущий оптимальный чистый доход в вашей книге составляет 1,661.56. Начальная инвазия 11% -> 1% пересчитана формула, а оптимальный чистый доход - 11 167,71. Оптимизируйте чистый доход, а решение - 15 416,39. Теперь я изменяю N17 на 0, оптимальный чистый доход пересчитывается как 11 292,04. Изменение начального заражения до 11% дает 1,236.14, и нажатие «оптимизировать чистый доход» дает 1,661.56, что совпадает с первым решением. Есть ли какой-то шаг по-другому? – ayhan

+0

Хорошо, да, это сейчас. Теперь изменение ячейки над ней «N16 = 0» дает еще один оптимальный чистый доход, который ниже, чем просто «N17 = 0», что не имеет смысла. Я понимаю, что может быть локальное оптимальное решение, но решатель должен менять бинарную переменную 'Spray', которая, изменяя' F16 = 1', создаст большее решение. Это не имеет никакого смысла. – Vedda

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