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

Optimization 将条件语句转换为线性约束,optimization,linear-programming,convex-optimization,mixed-integer-programming,Optimization,Linear Programming,Convex Optimization,Mixed Integer Programming,我正在尝试将下面的第三个条件转换为线性约束。为了便于说明,我已经包括了全部问题和我的进度 一家制造商正在考虑生产三种产品a、b、c。每种产品的材料、劳动力和利润如下所示 产品:(投入材料数量、工时、利润) 甲:(3,6200) b:(6,5300) 丙:(108400) 目前,投入材料12000单位,劳动力12000小时。具体规定了以下附加限制 如果公司决定生产“a”,那么它必须生产至少100台 如果公司决定生产“b”车,那么它必须至少生产80辆 如果公司决定生产“c”,那么它最多可以生产120

我正在尝试将下面的第三个条件转换为线性约束。为了便于说明,我已经包括了全部问题和我的进度

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

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

甲:(3,6200)

b:(6,5300)

丙:(108400)

目前,投入材料12000单位,劳动力12000小时。具体规定了以下附加限制

  • 如果公司决定生产“a”,那么它必须生产至少100台

  • 如果公司决定生产“b”车,那么它必须至少生产80辆

  • 如果公司决定生产“c”,那么它最多可以生产120个单位的“a”和“b”(我解释为a+b 0,否则为0)

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

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

    问题是:

    最大化200Xa+300Xb+400Xc

    s、 t

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

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

    3Xa+6Xb+10Xc<=12000

    6Xa+5Xb+8Xc<=12000

    Xa>=100Ya

    Xb>=80Yb

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

    更新:


    经过进一步研究。Xa+Xb经过进一步研究。Xa+Xb=12000/5-120=2280

    另外添加:


    Ya+Yb+Yc经过进一步研究。Xa+Xb请发布您的更新作为答案并接受它(它是正确的)。请注意,传统上,
    M
    值被选为最小值,不会切断任何可行的解决方案。实际值取决于您的问题结构。这里,
    M=min{12000/31200/5}-120是一个很好的候选人(为什么?)现在,现代求解者在细化大M值方面做得相当好,但仍然使用小的大M来解决问题不会有什么坏处。还要注意的是,在您当前的公式中,您可能有
    Ya=Yb=0
    Xa,Xb>0
    的最优解。您已经强制执行了
    Ya=1-->Xa>=100
    ,但您没有强制
    Ya=0-->Xa=0
    。我相信你会明白这一点:)最后,似乎你无法在正水平上产生所有A、B和C,因此我们还可以添加
    Ya+Yb+Yc