У меня есть упражнение по производственному программированию, которое я должен решить с помощью решателя Excel. Однако я не могу установить целочисленное ограничение для определенной ячейки, которая должна быть только целой.
Я приложил минимальный пример к этому посту, структура выглядит следующим образом:
Существует 6 продуктов, в каждом из которых есть количество для изготовления на заказ и для производства, сумма этих двух и соответствующая маржинальная прибыль. Общая маржинальная прибыль рассчитывается как произведение общего количества каждого продукта на сумму его маржинальной прибыли.
Теперь для решателя я хочу максимизировать общую маржу вклада, изменяя значения для каждого продукта на складе и значения для некоторых продуктов (есть еще некоторые ограничения, которые не относятся к этой проблеме). ).
Теперь я уже установил решатель на место возникновения проблемы, и как только я пытаюсь добавить целочисленное ограничение в ячейку «сделать на склад», где ячейка «сделать на заказ» над ней должна измениться, я получаю ошибку Msgstr «Ссылка на ячейку целочисленного ограничения должна включать только переменные ячейки.» Я не понимаю почему, потому что ячейка (в данном случае F3) помечена как переменная ячейка. Это ошибка в Солвере, или я что-то упустил?
Минимальный пример: ссылка
У меня есть упражнение по производственному программированию, которое я должен решить с помощью решателя Excel. Однако я не могу установить целочисленное ограничение для определенной ячейки, которая должна быть только целой.
Я приложил минимальный пример к этому посту, структура выглядит следующим образом:
Существует 6 продуктов, в каждом из которых есть количество для изготовления на заказ и для производства, сумма этих двух и соответствующая маржинальная прибыль. Общая маржинальная прибыль рассчитывается как произведение общего количества каждого продукта на сумму его маржинальной прибыли.
Теперь для решателя я хочу максимизировать общую маржу вклада, изменяя значения для каждого продукта на складе и значения для некоторых продуктов (есть еще некоторые ограничения, которые не относятся к этой проблеме). ).
Теперь я уже установил решатель на место возникновения проблемы, и как только я пытаюсь добавить целочисленное ограничение в ячейку «сделать на склад», где ячейка «сделать на заказ» над ней должна измениться, я получаю ошибку Msgstr «Ссылка на ячейку целочисленного ограничения должна включать только переменные ячейки.» Я не понимаю почему, потому что ячейка (в данном случае F3) помечена как переменная ячейка. Это ошибка в Солвере, или я что-то упустил?
Минимальный пример: ссылка
I recently encountered the same problem. Even without having the FormulaText
at the end of the integer constraint.
This should work:
Sub Solve()
SolverReset
SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=4
SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
End Sub
When applying an integer constraint (SolverAdd
) to cells that are not part of the decision variables (ByChange
), the solver prompts:
«Integer Constraint Cell Reference must include only Variable Cells.»
This is not the case in your example, but the setting the objective function still plays a role. I assume that if you add the integer constraint before you add the SolverOk
, the solver does not know the decision variables (ByChange
) yet and therefore does not include the integer constraint.
I recently encountered the same problem. Even without having the FormulaText
at the end of the integer constraint.
This should work:
Sub Solve()
SolverReset
SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=4
SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
End Sub
When applying an integer constraint (SolverAdd
) to cells that are not part of the decision variables (ByChange
), the solver prompts:
«Integer Constraint Cell Reference must include only Variable Cells.»
This is not the case in your example, but the setting the objective function still plays a role. I assume that if you add the integer constraint before you add the SolverOk
, the solver does not know the decision variables (ByChange
) yet and therefore does not include the integer constraint.
I would like a constraint for a formula so it can only return an even
number.
For example:
A formula in cell A1, *SUM(A2+A3)/2*
should only return a even
number.
MDaniyal
1,0973 gold badges13 silver badges29 bronze badges
asked Apr 1, 2016 at 11:09
4
You can use the MOD
function:
In another cell, say A2
have the formula =MOD(A1,2)
and constrain it to be 0.
Another possibility is to create a new changing cell (say B1
) and constrain it to be an integer, and then add a constraint that forces A1 = 2*B1
. The new changing cell will have no other role to play in the model.
answered Apr 1, 2016 at 11:19
John ColemanJohn Coleman
51.1k7 gold badges51 silver badges116 bronze badges
8
I would like a constraint for a formula so it can only return an even
number.
For example:
A formula in cell A1, *SUM(A2+A3)/2*
should only return a even
number.
MDaniyal
1,0973 gold badges13 silver badges29 bronze badges
asked Apr 1, 2016 at 11:09
4
You can use the MOD
function:
In another cell, say A2
have the formula =MOD(A1,2)
and constrain it to be 0.
Another possibility is to create a new changing cell (say B1
) and constrain it to be an integer, and then add a constraint that forces A1 = 2*B1
. The new changing cell will have no other role to play in the model.
answered Apr 1, 2016 at 11:19
John ColemanJohn Coleman
51.1k7 gold badges51 silver badges116 bronze badges
8
Чтобы
получить целочисленное решение задачи
линейного программирования с помощью
программы Excel,
к
обычным ограничениям задачи добавляются
условия целочнсленности. Это можно
сделать в окне Добавление
ограничения, вид
которого для нашего примера (см. раздел
1.1) показан на рис. 2.2.
В
поле
Ссылка
на ячейки (Ссылка на ячейку) задается
диапазон ячеек содержащих значения
переменных, а в раскрывающемся списке
вместо знака выбирается один из следующих
пунктов:
-
цел
—
целое число;
в
бин в
Excel
2010
(или двоич
в
предыдущих версиях)—
бинарное
(двоичное) число 0 или 1;
-
раз
(только
в Excel
2010)
— разные целые числа от 1 до N
(где
N
—
число переменных).
При
этом в поле Ограничение
автоматически
появляется слова: целое,
бинарное
(двоичное) или
Все
разные.
Если
переменные в модели — разных типов
(целые, бинарные, разные целые,
вещественные), можно задать несколько
условий целочнсленности, для каждого
типа переменных в отдельности.
Поскольку
нахождение целочисленного решения
зачастую является довольно длительной
процедурой, предусмотрена возможность
ее ускорения. Для этого используются
следующие параметры, задаваемые в Excel
2010
в окне Параметры
(см.
рис. 1.26), а в предыдущих версиях — в окне
Параметры
поиска решения (см.
рис. 1.27) (названия параметров, используемые
в предыдущих версиях, даны в скобках):
-
Игнорировать
целочисленные ограничения (только
в Excel
2010)
—
Добавление
ограничения
Ссылка
на ячеикм:
ГШ
Ограничение:
ок
Отмена
Добавить
Рис.
2.2. Добавление требования целочнсленности
переменных
флажок,
установка которого приводит к решению
задачи без учета условий целочисленное™.
-
Целочисленная
оптимальность (Допустимое отклонение)—
указывает, на сколько процентов
полученное значение целевой функции
может отличаться от оптимального
(по умолчанию в Excel
2010
— 1%, а в предыдущих версиях — 5% ). Для
ускорения можно увеличить это значение.
Если же необходимо получить точное
решение, то следует установить этот
параметр равным 0%, но это может значительно
увеличить время оптимизации, -
Максимальное
время —
позволяет задать в секундах максимальное
время, которое отводится на поиск
решения (значение по умолчанию в Excel
2010
не задано, а в предыдущих версиях— 100
секунд). -
Число
итераций (Предельное число итераций)
—
позволяет определить максимальное
количество итераций при поиске решения
(значение по умолчанию в Excel
2010
не задано, а в предыдущих версиях—
100). Для целочисленных моделей данный
параметр указывает максимальное
количество итераций для каждой
подзадачи. -
Максимальное
число подзадач (только
в Excel
2010)—
позволяет задать максимальное количество
подзадач при целочисленном решении. -
Максимальное
число допустимых решений (только
в Excel
2010)
— позволяет определить максимальное
количество рассматриваемых допустимых
целочисленных решений.
Если
вы задали некоторые из перечисленных
предельных значений, то поиск решения
будет продолжаться до тех пор, пока
какое-нибудь нз них не будет достигнуто.
Тогда появится окно с предложением
остановить вычисления или продолжить.
Если вы решили продолжить вычисления,
достигнутое предельное значение
отменяется н расчеты продолжаются до
достижения следующего нз заданных
предельных значений. Если вы выбрали
вариант остановки вычислений, появится
окно с сообщением о том, что решение
остановлено по запросу пользователя и
на листе окажутся результаты, достигнутые
на этот момент. Прервать вычисления
можно также нажатием клавиши Esc.
При
этом также появляется окно с предложением
остановить пли продолжить вычисления.
Остальные
ограничения и параметры поиска решения
— те же, что и для обычной задачи линейного
программирования (см. раздел 1.3). Выполнив
вычисления с условием целочнсленности,
показанным на рис. 2.2, вы получите
целочисленное решение нашей задачи (5;
1; 3, 4).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
21.03.201614.11 Mб12МЕТОДИЧКА ЭТМ №2.rtf
- #
- #
- #
- #
- #
- #
- #
- #
0 / 0 / 0 Регистрация: 22.05.2012 Сообщений: 5 |
|
22.05.2012, 14:43 [ТС] |
4 |
Суть задачи — составление модели управления активами и пассивами по срокам погашения. Целевая функция: F(x)=0,2*X11+0,46*X12+0,06*X13+0,16*X14+0,1*X15+0, 02*X16 28310859 , где X12,13…16 -активы с разными сроками погашения, а коэффициенты — это удельные веса активов. имеются ограничения: 0 |
Поиск решения, бинарные значения |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I recently encountered the same problem. Even without having the FormulaText
at the end of the integer constraint.
This should work:
Sub Solve()
SolverReset
SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=4
SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
End Sub
When applying an integer constraint (SolverAdd
) to cells that are not part of the decision variables (ByChange
), the solver prompts:
«Integer Constraint Cell Reference must include only Variable Cells.»
This is not the case in your example, but the setting the objective function still plays a role. I assume that if you add the integer constraint before you add the SolverOk
, the solver does not know the decision variables (ByChange
) yet and therefore does not include the integer constraint.
Я использовал код VBA для запуска решателя. Ниже мой код. Я хочу, чтобы ячейки C87: K93 были целыми числами, однако ограничение не добавляется в Solver, поэтому значения, которые я получаю, являются десятичными. Могу ли я узнать, как я могу изменить код, чтобы принять во внимание ограничение целого числа?
Sub Solve()
SolverReset
SolverAdd CellRef:="$C$87:$K$93", Relation:=4, FormulaText:="integer"
SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
SolverSolve UserFinish:=True
End Sub
Ниже приведена ссылка на изображение Solver после запуска кода, целочисленное ограничение просто не появляется
Большое спасибо за помощь
Мне нужно ограничение для формулы, чтобы она могла возвращать только число even
.
Например:
Формула в ячейке A1, *SUM(A2+A3)/2*
должна возвращать только число even
.
1 ответ
Лучший ответ
Вы можете использовать функцию MOD
:
В другой ячейке, скажем, A2
есть формула =MOD(A1,2)
и ограничьте ее значением 0.
Другая возможность — создать новую изменяющуюся ячейку (скажем, B1
) и ограничить ее целым числом, а затем добавить ограничение, которое вынуждает A1 = 2*B1
. Новая изменяющаяся ячейка не будет играть никакой другой роли в модели.
0
John Coleman
1 Апр 2016 в 14:19