【问题标题】:Can this specific Linear Program constraint be expressed?这个特定的线性规划约束可以表达吗?
【发布时间】:2014-10-25 14:51:04
【问题描述】:

感谢您的宝贵时间。

我有一个线性程序,但不知道如何表达一种约束形式,即使它是可能的。也许这里有人知道解决方案。

一家公司组装并销售由 3 种成分 a、b 和 c 组成的混合物,其中 a = b = c。
每种成分可以来自 2 个工厂:f1 和 f2。
每种原料的成本整天都在波动,每个工厂之间的成本也不同。
每个工厂以一对夫妇的形式提供每种成分的成本:(成本,可用数量)。

我想表达的约束(不影响现有目标函数)但我不知道如何表达:
避免选择高于我的售价的制造成本 .

例如在时间 t,成本可能是:

- for ingredient a :  
f1 : (10$, 5.1), (11$, 10.2), (13$, 20.5)  
f2 : (11$, 1.), (12$, 15.2), (13$, 6.9)  
- for ingredient b :  
f1 : (15$, 8.3), (16$, 20.), (18$, 10.7)  
f2 : (15$, 4.2), (16$, 15.1), (18$, 19.3)  
- for ingredient c :  
f1 : (31$, 2.), (34$, 3.5), (37$, 14.9)  
f2 : (30$, 4.7), (32$, 9.2), (35$, 12.4) 

我想为两个输入常量获得最佳重新分区:maximumAllowedQuantity 和 maximumAllowedCost。
但目前我只处理 maximumAllowedQuantity 并且我也想处理 maximumAllowedCost (这是我的问题的目的)。

由每个成本的金额组成的最终解决方案将在输出变量中:

amountAF1_1, amountAF1_2, amountAF1_3  
amountAF2_1, amountAF2_2, amountAF2_3  
amountBF1_1, amountBF1_2, amountBF1_3  
amountBF2_1, amountBF2_2, amountBF2_3  
amountCF1_1, amountCF1_2, amountCF1_3  
amountCF2_1, amountCF2_2, amountCF2_3  

例如使用提供的示例数据,对于输入 maximumAllowedQuantity = 15(没有 maximumAllowedCost 约束,因为我不知道如何制定它,这就是我要问的),基于当前的一些目标(例如: 我更喜欢以相同的总成本在工厂之间平均分配金额,而不是偏袒一家工厂),
我可以得到:

amountAF1_1 = 5.1, amountAF1_2 = 4.9, amountAF1_3 = 0.  
amountAF2_1 = 0., amountAF2_2 = 5., amountAF2_3 = 0.  
amountBF1_1 = 5., amountBF1_2 = 0., amountBF1_3 = 0.  
amountBF2_1 = 4.2, amountBF2_2 = 5.8, amountBF2_3 = 0.  
amountCF1_1 = 2., amountCF1_2 = 3.5, amountCF1_3 = 2.  
amountCF2_1 = 4.7, amountCF2_2 = 2.8, amountCF2_3 = 0.  

我可以在成本方面总结为:

5.1a at 10$, 4.9a at 11$, 5.0a at 12$,  
9.2b at 15$, 5.8b at 16$,  
4.7c at 30$, 2.0c at 31$, 2.8c at 32$, 3.5c at 34$, 2.0c at 37$

如果我们按成本分解得到的混合物,我们会得到:

4.7 mixtures at 10 + 15 + 30 = 55$,  
0.4 mixtures at 10 + 15 + 31 = 56$,  
1.6 mixtures at 11 + 15 + 31 = 57$,  
2.5 mixtures at 11 + 15 + 32 = 58$,  
0.3 mixtures at 11 + 16 + 32 = 59$,  
0.5 mixtures at 11 + 16 + 34 = 61$,  
3.0 mixtures at 12 + 16 + 34 = 62$,  
2.0 mixtures at 12 + 16 + 37 = 65$, 

这里的最高费用是 65 美元。
但是如果我的售价是 60$,为了避免亏本:
如何添加约束 maximumAllowedCost = 60$ ?

nb:我们不能简单地采用先前的结果(没有 maximumAllowedCost 约束)并删除成本 > 60 美元的金额,因为如果总数量较小,我的目标函数将为成本 ...

谢谢

【问题讨论】:

    标签: mathematical-optimization linear-programming nonlinear-optimization integer-programming


    【解决方案1】:

    让我重申你的问题。每个工厂f 为您提供ith 成分的出价列表(价格数量对)。让我们将jth 出价写(并索引)为

     (price[j, f, i], quantity[j, f, i])
    

    听起来您的目标是决定接受哪些出价,但受制于获利的限制。

    x[j, f, i] 代表您从工厂f 购买的配料i 的投标数量j。您不能购买负数量的成分,并且您不能购买超过工厂在该出价中提供的数量,所以我们有

     0 <= x[j, f, i] <= quantity[j, f, i] for all j, f, i
    

    xs 是您的决策变量。

    您接受jth 出价所支付的费用是price[j, f,i] * x[j, f, i]

    因此,您为原料支付给所有工厂的总成本由下式给出

    sum_{j, f, i} price[j, f, i]*x[j, f, i]
    

    m 代表您使用这些成分创建的混合物的数量。 m 将是一个决策变量。该混合物由等量的每种成分组成。所以你可以创造的混合物的数量受到最稀缺的成分的限制。那是

    m <= sum_{j, f} x[j,f,i] for all i
    

    你卖出一单位的混合物赚了 60 美元(比方说)。所以你的收入是60*m

    您获得的利润是收入 - 成本或

    60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i]
    

    为确保制造成本低于或等于您的售价,您只需确保您的利润为非负数。或者

    60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i] >= 0
    

    这些是您的限制条件,您可以设置任何您喜欢的目标。例如,您可能希望最大化您的利润,同时尝试在工厂之间尽可能平均地分配您的采购。

    为此,让y[f] 代表从工厂f 购买的数量。那么

    y[f] == sum_{j, i} x[j, f, i]  for all f
    

    对于每对工厂f1, f2,我们可以将购买数量的差异计算为z[f1, f2],其中

    z[f1, f2] >= y[f1] - y[f2]  for all factory pairs (f1, f2)
    z[f1, f2] >= y[f2] - y[f1]  for all factory pairs (f1, f2)
    

    这给了我们以下线性程序

    minimize      -p + sum_{all factory pairs f1, f2}  z[f1, f2]
    x,m,y,z,p
    
    subject to    p == 60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i]
                  y[f] == sum_{j, i} x[j, f, i] for all f
                  m <= sum_{j, f} x[j, f, i] for all i
                  z[f1, f2] >= y[f1] - y[f2] for all factory pairs (f1, f2)
                  z[f2, f1] >= y[f2] - y[f1] for all factory pairs (f1, f2)
                  x[j, f, i] <= quantity[j, f, i] for all j, f, i                   
                  0 <= x[j, f, i] for all j, f, i
                  0 <= m
                  0 <= y[f] for all f
                  0 <= p
    

    【讨论】:

    • 非常感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多