Excel Solver: определить ограничение как равное нулю ИЛИ большее, чем

Excel Solver: определить ограничение как равное нулю ИЛИ большее, чем

Я создаю модель для оптимизации заказов на закупку.

Сумма заказа должна быть больше 500 или равна нулю.

Как определить такое ограничение в Solver?

Я попробовал бинарное ограничение, а также несколько разных формул, но ничего не работает.

По сути, мне нужно уметь выражать свои мысли ORв Solver, как это сделать?

EDIT: по следующей ссылке вы можете увидеть файл Excel, который я использую: кликните сюда

решение1

То есть 0 разрешено, 1 не разрешено, 499 не разрешено, а 501 разрешено? Похоже на несмежную область. Так что это не чисто оптимизационная задача, а своего рода комбинаторная задача. Боюсь, Solver не справится с этим.

Вам следует проанализировать два варианта использования по отдельности:

  • Сумма равна нулю (фиксированное значение, простой расчет);
  • Сумма составляет 500 или больше (оптимизируйте в Solver, используя ограничение >=500);

а затем сравните эти два случая, используя формулу ЕСЛИ.


РЕДАКТИРОВАТЬ:

Я попытался использовать «двоичные» и «целочисленные» ограничения, как предлагал Карл, но они не сработали.

  • Создайте двоичную переменную 0-1 и непрерывную переменную >=500, а затем используйте IF, чтобы скопировать непрерывную переменную или записать 0 в значение покупки.
  • Создайте бинарную переменную 0-1 и непрерывную переменную >=500, а затем рассчитайте покупки как их произведение
  • Создайте целочисленную переменную >=499, а затем используйте IF, чтобы заменить 499 на 0 для значения покупки.

Во всех случаях результат часто был неверным и зависел от начальных условий. Видимо, Solver не любит такие вещи.

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

Лучшее, что я могу сделать, это следующее.

Я добавил бинарную переменную 0-1 и непрерывную переменную >=500 и рассчитал ежемесячные покупки с помощью IF. Но я оптимизировал только непрерывные переменные с помощью Solver. Бинарные переменные являются параметром. То есть мы выбираем месяцы, когда будет сделана покупка, затем используем Solver для расчета стоимости этих покупок, а затем отмечаем итоговую общую стоимость.

Это следует повторить для всех комбинаций покупок и непокупок. Количество таких комбинаций равно 2 6 = 64. Но на самом деле, если вы ничего не купите в январе, у вас останется отрицательный остаток на конец периода, что недопустимо. Поэтому допустимых комбинаций всего 32. Я добавил формулы для расчета двоичных значений из индекса комбинации, выполнил итерацию индекса 32 раза, каждый раз вручную запускал Solver и копировал результаты «только как значения» для каждой комбинации.

В результате минимальная стоимость составляет 4 625,00 €, и для достижения этой стоимости возможны две комбинации.

Вот файл, загруженный в Google Docs, со снимком экрана Solver.

Многократный запуск Solver вручную утомителен, я считаю, что это можно автоматизировать с помощью макросов.

решение2

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

-500B+X>=0 (никогда не опускаться ниже 500)

-MB+X<=0 (в сочетании с предыдущими силами ограничения 0, когда B равен 0)

B= Двоичная переменная1

M=Очень большое положительное число (больше, чем X, быть не может)

X= непрерывная переменная

[Редактировать]

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

введите описание изображения здесь

Связанный контент