Итак, 0 разрешено, 1 не разрешено, 499 не разрешено, а 501 разрешено? Выглядит как несмежная область. Так что это не просто проблема оптимизации, а своего рода комбинаторная проблема. Боюсь, Солвер не может справиться с этим.
Вы должны проанализировать два варианта использования отдельно:
- Сумма равна нулю (фиксированное значение, простой расчет);
- Сумма составляет 500 или больше (оптимизируйте в Солвере, используя ограничение> = 500);
и затем сравните эти два случая, используя формулу IF.
РЕДАКТИРОВАТЬ:
Я пытался использовать "двоичные" и "целочисленные" ограничения, как предложил Карл, но они не работали.
- Создайте двоичную переменную 0-1 и непрерывную переменную> = 500, а затем используйте IF, чтобы либо скопировать непрерывную переменную, либо записать 0 в значение покупки
- Создайте двоичную переменную 0-1 и непрерывную переменную> = 500, а затем рассчитайте покупки как их продукт
- Создайте целочисленную переменную> = 499, а затем используйте IF для замены 499 на 0 для значения покупок
Во всех случаях результат часто был неправильным и зависел от начальных условий. Видимо Солвер не любит такие вещи.
Затем я подумал о том, чтобы применить предложенное выше предложение ко всем шести значениям покупки и оптимизировать их независимо, например, путем оптимизации суммы затрат за все месяцы. Но оказывается, что они не являются независимыми: начальный запас зависит от предыдущего месяца, а оптимальная покупка за месяц зависит от того, была ли покупка совершена в предыдущем месяце. Поэтому невозможно добавить простой IF к каждому месяцу.
Лучшее, что я мог сделать, это следующее.
Я добавил двоичную переменную 0-1 и непрерывную переменную> = 500 и рассчитывал покупки за каждый месяц, используя IF. Но я оптимизировал только непрерывные переменные, используя Solver. Бинарные переменные являются параметром. То есть мы выбираем месяцы, когда будет совершена покупка, затем используем Солвер для расчета стоимости этих покупок и затем записываем итоговую общую стоимость.
Это следует повторить для всех комбинаций покупок и не покупок. Количество этих комбинаций составляет 2 6 = 64. Но на самом деле, если вы ничего не купите в январе, вы получите отрицательный закрывающий инвентарь, который не разрешен. Таким образом, есть только 32 допустимых комбинации. Я добавил формулы для вычисления двоичных значений по индексу комбинации, повторил индекс 32 раза, каждый раз вручную запускал Солвер и копировал результаты "только как значения" для каждой комбинации.
В результате минимальная стоимость составляет 4 625,00 €, и есть две комбинации для достижения этой величины.
Вот файл, загруженный в Документы Google, со скриншотом Solver.
Запуск Solver несколько раз вручную утомителен, я считаю, что его можно автоматизировать с помощью макросов.