optimization - 将条件语句转换为线性约束
问题描述
我正在尝试将下面的第三个条件转换为线性约束。出于说明目的,我已经包含了完整的问题和我的进展。
一家制造商正在考虑生产三种产品 a、b、c。每种产品的材料、人工和利润如下。
产品:(投入材料数量、工时、利润)
一个:(3,6,200)
乙:(6,5,300)
c: (10,8,400)
目前,有 12,000 单位的输入材料和 12,000 小时的劳动力可用。指定了以下附加限制。
如果公司决定生产“a”,那么它必须至少生产 100 个单位。
如果公司决定生产“b”型汽车,那么它必须至少生产 80 辆。
如果公司决定生产“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 在 {0,1},Yb 在 {0,1},Yc 在 {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 的同时产生。
推荐阅读
- python - Pandas:根据 DataFrame 中的条件删除字符
- ios - 在 Swift 中使用协议扩展结构
- blazor - 在 Blazor 中渲染文件导致新选项卡
- jmeter - jmeter 登录测试 splunk 在 RHEL 8
- maven - 模块“xxx”是从 Maven 导入的。重新导入后对其配置所做的任何更改都可能丢失
- mongodb - 为什么 mongodb 的 findOneAndUpdate 在指定时会更新我的所有布尔字段?
- nuxt.js - Nuxt.js - 自动删除 URL 查询
- python - 如何在文本分类中使用 pos_tag
- mongodb - 在仍然使用 MongoDB 存储所有用户数据的同时,将 NextAuth 与任何身份验证提供程序(例如 AWS Cognito)集成的正确方法是什么?
- opencv - 如何处理“AWS Kinesis Video Stream(kvs) -> gstreamer+opencv image processing -> kvs”流程中的gstreamer?