Ссылка на ячейки целочисленного ограничения должна включать только ячейки переменных ошибка

У меня есть упражнение по производственному программированию, которое я должен решить с помощью решателя 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's user avatar

MDaniyal

1,0973 gold badges13 silver badges29 bronze badges

asked Apr 1, 2016 at 11:09

Laav's user avatar

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 Coleman's user avatar

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's user avatar

MDaniyal

1,0973 gold badges13 silver badges29 bronze badges

asked Apr 1, 2016 at 11:09

Laav's user avatar

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 Coleman's user avatar

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. Добавление требования целочнсленности
переменных

флажок,
установка которого приводит к решению
задачи без учета условий це­лочисленное™.

  1. Целочисленная
    оптимальность (Допустимое отклонение)—
    ука­зывает, на сколько процентов
    полученное значение целевой функции
    может от­личаться от оптимального
    (по умолчанию в Excel
    2010
    — 1%, а в предыдущих версиях — 5% ). Для
    ускорения можно увеличить это значение.
    Если же необ­ходимо получить точное
    решение, то следует установить этот
    параметр равным 0%, но это может значительно
    увеличить время оптимизации,

  2. Максимальное
    время —
    позволяет задать в секундах максимальное
    время, которое отводится на поиск
    решения (значение по умолчанию в Excel
    2010
    не задано, а в предыдущих версиях— 100
    секунд).

  3. Число
    итераций (Предельное число итераций)

    позволяет опре­делить максимальное
    количество итераций при поиске решения
    (значение по умолчанию в Excel
    2010
    не задано, а в предыдущих версиях—
    100). Для цело­численных моделей данный
    параметр указывает максимальное
    количество ите­раций для каждой
    подзадачи.

  4. Максимальное
    число подзадач (только
    в Excel
    2010)—
    позволяет задать максимальное количество
    подзадач при целочисленном решении.

  5. Максимальное
    число допустимых решений (только
    в 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*X16https://www.cyberforum.ru/cgi-bin/latex.cgi?rightarrow 28310859 , где X12,13…16 -активы с разными сроками погашения, а коэффициенты — это удельные веса активов. имеются ограничения:
1) 0,27*X21+0,26*X22+0,03*X23+0,09*X24+0,03*X25+0,32* X26=28310859, где X21…26, пассивы с соответствующими сроками погашения.
2)0,2*X11/(0,27*X21)https://www.cyberforum.ru/cgi-bin/latex.cgi?geq0.2
3) (0,2*X11+0,46*X12)/(0,27*X21+0,26*X22)https://www.cyberforum.ru/cgi-bin/latex.cgi?geq0.7
4) Хij https://www.cyberforum.ru/cgi-bin/latex.cgi?geq 0
деление заменил на умножение, Поиск решения стал работать, указал показывать итерации, но найдя первые три переменные, поиск решения останавливается и остальные оставляет равными 0. В итоге задачу решить не получается.

0

Поиск решения, бинарные значения

exek

Дата: Четверг, 17.10.2013, 16:48 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Здравствуйте, при добавлении ограничения «бинарное» вылазит следующая ошибка:

В первом варианте все работает, но при добавлении техники ограничение не задается.
Помогите разобраться в проблеме.

Сообщение отредактировал exekЧетверг, 17.10.2013, 20:17

 

Ответить

Pelena

Дата: Четверг, 17.10.2013, 17:01 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18697


Репутация:

4254

±

Замечаний:
±


Excel 2016 & Mac Excel

Если Вы добавляете технику, то диапазон ячеек переменных тоже надо увеличить $C$25:$K$32

[p.s.]При таком количестве данных минут пять считал %) [/p.s.]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

exek

Дата: Четверг, 17.10.2013, 17:12 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

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

 

Ответить

Pelena

Дата: Четверг, 17.10.2013, 17:19 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18697


Репутация:

4254

±

Замечаний:
±


Excel 2016 & Mac Excel

если я правильно Вас понял

Неправильно поняли

К сообщению приложен файл: 6188203.jpg(23.6 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

exek

Дата: Четверг, 17.10.2013, 17:22 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо!

 

Ответить

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 после запуска кода, целочисленное ограничение просто не появляется

Picture

Большое спасибо за помощь

Мне нужно ограничение для формулы, чтобы она могла возвращать только число 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

  • Среднюю ошибку аппроксимации аср
  • Ссылка на объединенную ячейку выдает ошибку
  • Ссд не инициализируется ошибка ввода вывода
  • Среднюю квадратичную ошибку среднего значения
  • Ссылка должна указывать на лист макросов ошибка