Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск решений (Solver) считает с ошибкой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поиск решений (Solver) считает с ошибкой (Формулы/Formulas)
Поиск решений (Solver) считает с ошибкой
kazar Дата: Четверг, 23.05.2019, 11:01 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Доброго времени суток, друзья.

Мне необходимо оптимизировать ячейки в столбцах "Обрезка 1" и "Обрезка 2" по минимальному значению. При этом изменяемые ячейки в столбцах "Вес сляба 1" и "Вес сляба 2" имеют каждый свои ограничения по минимуму и максимуму. Я использую Поиск решения (Solver) вручную, и ряд ячеек после процедуры поиска выходит за указанный диапазон допустимости (обычно берет большее чем максимум значение или ставит минимум, который не является оптимальным решением). Поскольку оптимизацию я должен осуществить для 20000+ ячеек в каждом из двух столбцов, я написал макрос.

Соответсвенно, у меня два вопроса:
1. Почему Solver и при ручном использовании и при запуске макроса периодически выдает недопустимое решение?
2. Как сократить время расчета и снизить нагрузку на систему при поиске решения для такого огромного числа ячеек?
К сообщению приложен файл: SOLVER_1.xlsm (32.5 Kb)


Сообщение отредактировал kazar - Четверг, 23.05.2019, 11:25
 
Ответить
СообщениеДоброго времени суток, друзья.

Мне необходимо оптимизировать ячейки в столбцах "Обрезка 1" и "Обрезка 2" по минимальному значению. При этом изменяемые ячейки в столбцах "Вес сляба 1" и "Вес сляба 2" имеют каждый свои ограничения по минимуму и максимуму. Я использую Поиск решения (Solver) вручную, и ряд ячеек после процедуры поиска выходит за указанный диапазон допустимости (обычно берет большее чем максимум значение или ставит минимум, который не является оптимальным решением). Поскольку оптимизацию я должен осуществить для 20000+ ячеек в каждом из двух столбцов, я написал макрос.

Соответсвенно, у меня два вопроса:
1. Почему Solver и при ручном использовании и при запуске макроса периодически выдает недопустимое решение?
2. Как сократить время расчета и снизить нагрузку на систему при поиске решения для такого огромного числа ячеек?

Автор - kazar
Дата добавления - 23.05.2019 в 11:01
_Boroda_ Дата: Четверг, 23.05.2019, 11:17 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не, извините, но это нарушение Правил форума.
Уберите из файла все, не относящееся к вопросу. Если не поможет - оставьте не 20000, а 300 ячеек для расчета. Кстати, иногда помогает перенос усеченных данных в чистый файл


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе, извините, но это нарушение Правил форума.
Уберите из файла все, не относящееся к вопросу. Если не поможет - оставьте не 20000, а 300 ячеек для расчета. Кстати, иногда помогает перенос усеченных данных в чистый файл

Автор - _Boroda_
Дата добавления - 23.05.2019 в 11:17
kazar Дата: Четверг, 23.05.2019, 11:26 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, отлично! Я сократил вес файла. Теперь очень надеюсь на Вашу помощь!
 
Ответить
Сообщение_Boroda_, отлично! Я сократил вес файла. Теперь очень надеюсь на Вашу помощь!

Автор - kazar
Дата добавления - 23.05.2019 в 11:26
Светлый Дата: Четверг, 23.05.2019, 12:01 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Про ошибки пока сказать не могу, а ограничения у Вас в Поиск решения со значком $5. Всегда проверяется только пятая строка.


Программировать проще, чем писать стихи.
 
Ответить
СообщениеПро ошибки пока сказать не могу, а ограничения у Вас в Поиск решения со значком $5. Всегда проверяется только пятая строка.

Автор - Светлый
Дата добавления - 23.05.2019 в 12:01
_Boroda_ Дата: Четверг, 23.05.2019, 12:10 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Что-то там у Вас странное в Поиске решения. Вы считаете для W105, изменяете U105, а в условии R5<=D4. Почему R5?
А в макросе Вы считаете для Т, изменяя R.
Что-то я не очень понимаю что куда почему


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧто-то там у Вас странное в Поиске решения. Вы считаете для W105, изменяете U105, а в условии R5<=D4. Почему R5?
А в макросе Вы считаете для Т, изменяя R.
Что-то я не очень понимаю что куда почему

Автор - _Boroda_
Дата добавления - 23.05.2019 в 12:10
kazar Дата: Четверг, 23.05.2019, 12:20 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Светлый,

SolverAdd CellRef:="$D$3", Relation:=3
SolverAdd CellRef:="$D$4", Relation:=1


SolverAdd CellRef:="$J$3", Relation:=3
SolverAdd CellRef:="$J$4", Relation:=1

Вот такие ограничения я забил в макросе. Т.е. каждая текущая изменяемая ячейка, которая на каждом ходу сдвигается вниз по столбцу, зависит от конкретных ограничений, которые расположены в неизменяемых ячейках - D3,D4 и J3,J4. Я что-то честно не вижу ошибки в коде. Если Вам не сложно, укажите, пожалуйста, конкретное место.
 
Ответить
СообщениеСветлый,

SolverAdd CellRef:="$D$3", Relation:=3
SolverAdd CellRef:="$D$4", Relation:=1


SolverAdd CellRef:="$J$3", Relation:=3
SolverAdd CellRef:="$J$4", Relation:=1

Вот такие ограничения я забил в макросе. Т.е. каждая текущая изменяемая ячейка, которая на каждом ходу сдвигается вниз по столбцу, зависит от конкретных ограничений, которые расположены в неизменяемых ячейках - D3,D4 и J3,J4. Я что-то честно не вижу ошибки в коде. Если Вам не сложно, укажите, пожалуйста, конкретное место.

Автор - kazar
Дата добавления - 23.05.2019 в 12:20
kazar Дата: Четверг, 23.05.2019, 12:26 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, ой, Господи, я идиот - оставил в поиске не те ограничения. На самом деле, я просто забыл убрать старые данные, когда Вам отпралял. Проблема все равно остается. Сейчас я ее подробно опишу.

В моем файле должны оптимизироваться по мин значению ячейки в столбцах T и W. При этом T-ячейки зависят от R столбца соответствующей строки, а W-ячейки от U столбца соответствующей строки. R во всех ячейках имеет ограничение по мин и макс из ячеек D3 и D4, а U аналогичные ограничения, но по ячейкам J3 и J4.

Как записать макрос правильно, чтобы эти правила работали, потому что в моем случае поиск решения идет без учета ограничений на изменяемые ячейки?
 
Ответить
Сообщение_Boroda_, ой, Господи, я идиот - оставил в поиске не те ограничения. На самом деле, я просто забыл убрать старые данные, когда Вам отпралял. Проблема все равно остается. Сейчас я ее подробно опишу.

В моем файле должны оптимизироваться по мин значению ячейки в столбцах T и W. При этом T-ячейки зависят от R столбца соответствующей строки, а W-ячейки от U столбца соответствующей строки. R во всех ячейках имеет ограничение по мин и макс из ячеек D3 и D4, а U аналогичные ограничения, но по ячейкам J3 и J4.

Как записать макрос правильно, чтобы эти правила работали, потому что в моем случае поиск решения идет без учета ограничений на изменяемые ячейки?

Автор - kazar
Дата добавления - 23.05.2019 в 12:26
Светлый Дата: Четверг, 23.05.2019, 12:52 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Попробуйте так:
[vba]
Код
        SolverAdd CellRef:="$R$" & CStr(i), Relation:=3, FormulaText:="$D$3"
        SolverAdd CellRef:="$R$" & CStr(i), Relation:=1, FormulaText:="$D$4"
[/vba]*Формулы подправил.


Программировать проще, чем писать стихи.

Сообщение отредактировал Светлый - Четверг, 23.05.2019, 12:57
 
Ответить
СообщениеПопробуйте так:
[vba]
Код
        SolverAdd CellRef:="$R$" & CStr(i), Relation:=3, FormulaText:="$D$3"
        SolverAdd CellRef:="$R$" & CStr(i), Relation:=1, FormulaText:="$D$4"
[/vba]*Формулы подправил.

Автор - Светлый
Дата добавления - 23.05.2019 в 12:52
kazar Дата: Четверг, 23.05.2019, 14:09 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Светлый,

Теперь мой макрос выглядит так, как написано выше, и почему-то в изменяемых ячейках после поиска решений выбирается верхнее ограничение.
Запустите, пожалуйста, файл и сразу включите макрос (с учетом начального плиближения в изменяемых ячейках, которое я проставил). Итог не удовлетворяет условию минимизации целевой ячейки, потому что есть варианты, при котором целевая ячейка обнуляется, но выбираются не они.
К сообщению приложен файл: 6298175.xlsm (32.6 Kb)


Сообщение отредактировал kazar - Четверг, 23.05.2019, 14:10
 
Ответить
СообщениеСветлый,

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

Автор - kazar
Дата добавления - 23.05.2019 в 14:09
Светлый Дата: Четверг, 23.05.2019, 14:17 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Надо ещё очистить ограничения:


Программировать проще, чем писать стихи.
 
Ответить
СообщениеНадо ещё очистить ограничения:

Автор - Светлый
Дата добавления - 23.05.2019 в 14:17
kazar Дата: Четверг, 23.05.2019, 14:41 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Светлый, Вы - замечательный человек. Вопрос решился. Огромное спасибо за помощь. Тему можно закрывать.
 
Ответить
СообщениеСветлый, Вы - замечательный человек. Вопрос решился. Огромное спасибо за помощь. Тему можно закрывать.

Автор - kazar
Дата добавления - 23.05.2019 в 14:41
Светлый Дата: Четверг, 23.05.2019, 15:15 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Вы - замечательный человек
Спасибо за оценку. Наверно, буду ещё более замечательным, если предложу другое решение Вашей задачи. В Крат 1 записываем формулу:
Код
=ОТБР(D$4/Q5)
В Крат 2:
Код
=ОТБР(J$4/Q5)
В Вес сляба 1:
Код
=$Q5*S5
В Вес сляба 2:
Код
=$Q5*V5
Может оказаться меньше минимального, но это означает, что другого решения нет.
К сообщению приложен файл: SOLVER_1-1.xlsm (30.6 Kb)


Программировать проще, чем писать стихи.
 
Ответить
Сообщение
Вы - замечательный человек
Спасибо за оценку. Наверно, буду ещё более замечательным, если предложу другое решение Вашей задачи. В Крат 1 записываем формулу:
Код
=ОТБР(D$4/Q5)
В Крат 2:
Код
=ОТБР(J$4/Q5)
В Вес сляба 1:
Код
=$Q5*S5
В Вес сляба 2:
Код
=$Q5*V5
Может оказаться меньше минимального, но это означает, что другого решения нет.

Автор - Светлый
Дата добавления - 23.05.2019 в 15:15
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поиск решений (Solver) считает с ошибкой (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!