Excel 求解器:将约束定义为零或大于

Excel 求解器:将约束定义为零或大于

我正在创建一个模型来优化采购订单。

订购金额必须大于500或等于零。

如何在规划求解中定义这样的约束?

我尝试了二元约束,也尝试了几种不同的公式,但似乎没有任何效果。

基本上,我需要能够OR在 Solver 中表达,我该怎么做?

编辑:在以下链接中您可以看到我正在使用的 Excel 文件: 点击这里

答案1

那么 0 是允许的,1 是不允许的,499 是不允许的,而 501 是允许的?看起来像是一个不连续的区域。所以这不是一个纯粹的优化问题,而是一种组合问题。恐怕 Solver 无法处理这个问题。

您应该分别分析两个用例:

  • 金额为零(固定值,简单计算);
  • 数量为 500 或更大(使用约束 >=500 在规划求解中进行优化);

然后使用 IF 公式比较这两种情况。


编辑:

我尝试按照卡尔的建议使用“二进制”和“整数”约束,但它们不起作用。

  • 创建一个二进制变量 0-1 和一个连续变量 >=500,然后使用 IF 复制连续变量或将 0 写入购买值
  • 创建一个二进制变量 0-1 和一个连续变量 >=500,然后将购买量计算为它们的乘积
  • 创建一个整数变量 >=499,然后使用 IF 将 499 替换为 0 作为购买值

在所有情况下,结果通常都是错误的,并且取决于初始条件。显然,求解器不喜欢这样的事情。

然后我想到将上述建议应用于所有六个购买值,并独立优化它们,例如,通过优化所有月份的成本总和。但事实证明它们并不独立:期初库存取决于上个月,一个月的最佳购买取决于上个月是否进行了购买。因此,不可能为每个月添加一个简单的 IF。

我能做的最好的事情如下。

我添加了一个二进制变量 0-1 和一个连续变量 >=500,并使用 IF 计算了每个月的购买量。但我仅使用 Solver 优化了连续变量。二进制变量是一个参数。也就是说,我们选择进行购买的月份,然后使用 Solver 计算这些购买的价值,然后记下最终的总成本。

对所有购买和非购买的组合都应重复此操作。这些组合的数量为 2 6 =64。但实际上,如果您在一月份没有购买任何东西,那么您最终会得到负的期末库存,这是不允许的。因此只有 32 个有效组合。我添加了公式来计算组合索引中的二进制值,迭代索引 32 次,每次手动启动求解器并为每个组合复制结果“仅作为值”。

结果是最低成本为 4 625,00 €,并且有两种组合可以达到该值。

这是上传到 Google Docs 的文件,其中包含求解器屏幕截图。

手动多次启动求解器很繁琐,我相信可以使用宏来实现自动化。

答案2

通过添加约束来创建二进制变量,该约束表明变量的值(在目标函数中)是二进制的。目标函数中此变量的系数必须为 0。然后,您可以像平常一样添加以下约束:

-500B+X>=0(永不低于 500)

-MB+X<=0(与之前的约束相结合,当 B 为 0 时强制为 0)

B=二进制变量1

M = 非常大的正数(大于 X)

X=连续变量

[编辑]

我知道你想做这样的事情(我也在你的表格文件中做了一些更改,但我不能在这里分享我处理的 excel 文件):

在此处输入图片描述

相关内容