将条件语句转换为线性约束

罗伊

我正在尝试将下面的第三个条件转换为线性约束。为了说明的目的,我已经包括了完整的问题和我的进展。

一家制造商正在考虑生产三种产品 a、b、c。每种产品的材料、人工和利润如下。

产品:(投入材料的数量、工时、利润)

一:(3,6,200)

乙:(6,5,300)

c: (10,8,400)

目前,可提供 12,000 单位的输入材料和 12,000 小时的劳动力。指定了以下附加限制。

  1. 如果公司决定生产“a”,那么它必须至少生产 100 件。

  2. 如果公司决定生产“b”型汽车,那么它必须至少生产 80 辆汽车。

  3. 如果公司决定生产“c”,那么它最多可以生产 120 个单位的“a”和“b”(如果生产“c”,我将其解释为 a + b <= 120,并且 a + b否则受材料和劳动力限制)。

我需要制定一个整数线性程序来最大化公司的利润,同时满足劳动力和材料限制以及上面列出的 3 个附加限制。

到目前为止,我已经完成了以下工作。

我将 Xa、Xb 和 Xc 指定为生产的 a、b 和 c 的数量。我引入二进制变量如下:

如果 Xa > 0,则 Ya = 1,否则为 0。

如果 Xb > 0,则 Yb = 1,否则为 0。

如果 Xc > 0,则 Yc = 1,否则为 0。

那么问题来了:

最大化 200Xa + 300Xb + 400Xc

英石

Xa >= 0, Xb >= 0, Xc >= 0

Ya in {0,1},Yb in {0,1},Yc in {0,1}

3Xa + 6Xb + 10Xc < = 12,000

6Xa + 5Xb + 8Xc < = 12,000

Xa >= 100Ya

Xb >= 80Yb

我如何制定最后一个附加约束?

更新:

经过一些进一步的研究。Xa + Xb <= 120 + M(1-Yc)。其中 M 足够大,Xa + Xb 不会超出材料和劳动力限制而受到人为约束。留下这个以防其他人可能会得到帮助。

罗伊

经过一些进一步的研究。Xa + Xb <= 120 + M(1-Yc)。其中 M >= 12000/5 - 120 = 2280。

另外添加:

Ya + Yb + Yc <= 2

由于问题设置同时限制了 Xa、Xb 和 Xc 的产生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

cvxpy:将非线性约束转换为等效线性约束

来自分类Dev

如何将条件约束转换为Cplex的Concert C ++?

来自分类Dev

将曲线转换为线性

来自分类Dev

将嵌套的条件If语句转换为复杂的NSCompoundPredicate

来自分类Dev

将SQL语句转换为休眠条件或投影

来自分类Dev

将字符串转换为条件和语句

来自分类Dev

如何将其转换为一组线性约束?

来自分类Dev

将线性回归从Matlab转换为Python

来自分类Dev

将线性比例转换为对数

来自分类Dev

将表转换为分层与线性

来自分类Dev

将shell语句转换为OR

来自分类Dev

将IF语句转换为CASE

来自分类Dev

将shell语句转换为OR

来自分类Dev

将语句转换为联接

来自分类Dev

将if语句转换为switch语句

来自分类Dev

将MERGE语句转换为UPDATE语句

来自分类Dev

线性规划条件约束

来自分类Dev

如何将特殊选择从sql语句转换为条件API

来自分类Dev

使用if else条件将SQL UPDATE语句转换为php(codeigniter)

来自分类Dev

将SQL语句转换为Rails ActiveRecord

来自分类Dev

将循环语句转换为linq模式

来自分类Dev

SELECT语句将列转换为行

来自分类Dev

将if-elseif语句转换为字典

来自分类Dev

将ereg语句转换为preg

来自分类Dev

将SQL语句转换为Linq

来自分类Dev

将PHP数组转换为SQL语句?

来自分类Dev

将if ... else语句转换为for循环

来自分类Dev

将SQL Case语句转换为Spark

来自分类Dev

将Lambda函数转换为if else语句