Excel VBA: Solver, похоже, не оптимизирует "со временем", используя переменную даты? - PullRequest
2 голосов
/ 04 апреля 2011

У меня есть проблема оптимизации, которую я пытаюсь решить с помощью решателя.Среди прочего, одна переменная решения - это ячейка, содержащая дату.Основываясь на временном ряду, Солвер должен выбрать оптимальный момент времени.Однако, хотя он меняет другие решающие ячейки, он никогда не меняет эту!Я даже пытался отбросить другие переменные решения (держа их постоянными) - все равно без изменений.

Чтобы помочь вам решить проблему, я создал и приложил лист Excel (здесь: ссылка для скачивания *)1004 *) с упрощенной задачей, где из временного ряда цен акций Солвер должен выбрать дату с самой высокой ценой.(Я знаю, что эту конкретную проблему можно легко решить с помощью формулы MAX, но моя настоящая проблема оптимизации гораздо сложнее и не позволяет это решение.)

Решатель по-прежнему ничего не меняет вначальное значение даты - даже в этой очень упрощенной настройке!

С математической точки зрения настоящая проблема может быть охарактеризована как (нелинейная) ступенчатая функция, где конкретные моменты времени (на хоси) соответствуют разным ценам (шаги по оси у).

Есть ли какие-либо хитрости, чтобы заставить решатель обрабатывать значения времени (даты)?Если вам повезет найти правильный набор настроек Солвера, чтобы он смог найти правильное решение (которое будет 10 января 2009 года), я буду более чем рад услышать о них.

Редактировать:Я обнаружил, что нелинейные задачи с негладкими разрывными функциями (например, эта задача, которая в основном является лестничной функцией), как правило, трудно решать с помощью любого (не) линейного оптимизатора.Может кто-то сообразительный в этом вопросе помочь мне переформулировать проблему в решаемой форме.Я нашел похожую тему о переполнении стека с предлагаемым решением (см. Первый ответ), но не знаю, как применить его к моей проблеме.

Спасибо, Стив

1 Ответ

1 голос
/ 08 апреля 2011

Я получил вашу электронную таблицу для решения в Excel 2010, добавив ограничение $ C $ 7> = $ C $ 13 и используя эволюционный метод.Вы, вероятно, можете выяснить метод Math, который вы упомянули, но вам может понадобиться сделать это в VBA вместо диалога Solver.

...