【问题标题】:Writing tiered pricing as a linear program将分层定价编写为线性程序
【发布时间】:2018-10-24 14:26:26
【问题描述】:

有没有办法编写一个使用分层定价作为线性程序的成本函数?

supplier   volume A   price A   volume B   price B
1          0          $1        300        $2
2          0          $3        500        $1.50

我所说的分层定价是指供应商 1,前 300 公斤的价格为 1 美元,第二个 200 公斤的价格为 2 美元。 (如果我的体重超过 300 公斤,那么所有的单位都需要 2 美元)。这是我目前正在研究的成本函数。

cost = P1a * V1 + P1b * V1 + P2a * V2 + P2b * V2

s.t     V1+V2 = 1000
        V2 < 8000, V1 < 800
where
P1a = first price bracket for supplier 1
P1b = second price bracket for supplier 1
V1 = volume for supplier 1

如果在达到交易量 B 时所有交易量都变为价格 B,那么我可以添加一个二进制变量,使函数看起来像这样

cost = u * P1a * V1 + v * P1b * V1 + x * P2a * V2 + y * P2b * V2

s.t     u+v = 1, x+y = 1

u,v,x,y = 1 if price bracket is used, 0 if price bracket isnt used

有没有办法可以做类似的事情?

编辑: V1 和 V2 都是整数并且有一个设定的上限,比如说 800 公斤。还有一个需求约束,假设 V1 + V2 = 1000。

【问题讨论】:

    标签: linear-programming


    【解决方案1】:

    这似乎是可行的,只要有一个常数M&gt;=0,它是音量变量V1V2 的共同上限(例如,如果有限制V1+V2 &lt;=M)。 假设有这样一个M,让我们引入两个二进制变量b_1b_2,它们分别表示(意味着值为1)V1&gt;= 300V2&gt;=500

    300 * b_1 <= V1 <= 300 * (1 - b_1) + M* b_1
    500 * b_2 <= V2 <= 500 * (1 - b_2) + M* b_2
    

    现在我们引入非负变量a_1, h_1,它将V1分解成小于300的部分(用a_1表示)和包含超过部分的部分(用变量h_1表示):

    V1= a_1 + h_1
    h_1 <= M b_1
    300 b_1 <= a_1 <= 300  
    

    二进制变量的最后两个约束强制 h1 仅在 V1 &gt;= 300a_1V1 &gt;= 300 时将始终为 300 时为正。 让我们分别为V2 做同样的事情

    V2= a_2 + h_2
    h_2 <= M b_2
    500 b_2 <= a_2 <= 500  
    

    那么代价函数就是

    $1 * a_1 + $2 * h_1  + $3 * a_2 + $1.5 * h_2  
    `
    

    让我指出,这个解决方案在边界上可能不正确,例如当V1=300 时,因为二进制变量b_1 可能达到值0,因此a_1=0, h_1&gt;0。 但是,如果卷 V1V2 始终为整数值,则可以解决此问题,例如看 here

    *J.Doe 评论的附录

    如果V1 是一个整数,那么边界问题将由301 b_1 &lt;=V_1 &lt;=301 (1-b_1)+ M b_1 处理,而不是上面b_1 的定义条件。

    不,h_1 &lt; = M b_1 - a_1 无效,因为这意味着 V1 = a_1 + h_1 &lt;= M b_1 如果 V1 &gt;=300 意味着 V1 = 0 - 这是不正确的。

    是的,h_1 是第一个括号右上方的多余音量。

    如果我们有多个价格范围,我们将需要 2 个进一步的变量:一个表示数量,它代表当前价格范围和下一个价格范围之间 V1 的交易量份额。 如果交易量 V1 介于当前价格区间和下一个价格区间之间,则第二个变量应该是一个二进制指标变量 1

    【讨论】:

    • V1 和 V2 是整数并且有一个设置的上限(已编辑)。在这种情况下,不应该 h_1
    • 对您的评论进行了补充。请参见上文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多