如何制定线性规划的初始投资?

时间:2018-12-26 08:12:27

标签: mathematical-optimization linear-programming

考虑此示例问题:

假设建立工厂生产铅笔的成本为1000,生产铅笔的成本为2000。每支铅笔的利润为10,每支笔的利润为12。每个月,工厂可产生100物品(钢笔或铅笔)。如何包括初始成本以最大化工厂的利润?

我能想到的:

<span style="visibility:hidden">value of the input</span>

其中b1和b2是二进制变量,指示是否生成笔或铅笔。但是我不知道如何将它们与x1和x2相关联,例如,如果x1> = 0则b1 = 1,否则b1 = 0

2 个答案:

答案 0 :(得分:1)

这是一个非常标准的固定费用问题。我相信从字面上看,有关整数编程的任何书籍都将涵盖这一点。

您只需要实现:

b(i) = 0 => x(i) = 0

“否则”部分不是必需的:目标将解决此问题。

根据您的情况,您可以轻松地将此含义写为线性约束:

x(i) <= 100*b(i)

答案 1 :(得分:1)

这是一个固定成本的整数程序。

让我们介绍以下变量:

  • x :连续生产的商品的单位数量
  • y :零一变量,指示是否产生固定成本
  • c :生产 X
  • 的单位收入
  • f :生产非零数量的 X 所产生的固定成本,无论生产多少单位
  • m :大量

具有固定成本的成本函数为:

Fixed cost cost function

我们将其转换为以下程序:

max cx - fy
s.t.   x<=my
       0<=x
       y={0,1}

请注意,如果 x = 0 ,则成本函数将设置 y = 0 以避免支付 f 。但是,如果 x> 0 ,则 x <= my 约束将强制 y = 1 。唯一的问题是 m 必须是 x 的上限。我们可以通过仔细考虑 x 可以采用的值,或者将 m 设置为非常大的数值来实现。

我们可以使用cvxpy解决程序,如下所示。请注意,如果 x1 + x2 <= 100 ,则最好什么也不产生。由于这很无聊,所以我将限制从100增加到了300。

#!/usr/bin/env python3

import cvxpy as cp

b1 = cp.Variable(boolean=True)
b2 = cp.Variable(boolean=True)

x1 = cp.Variable()
x2 = cp.Variable()

m = 100000 #A very large number

obj = 10*x1+12*x2 - 1000*b1 - 2000*b2

cons = []
cons += [x1>=0]
cons += [x2>=0]
cons += [x1+x2<=300]
cons += [x1<=m*b1]
cons += [x2<=m*b2]

prob = cp.Problem(cp.Maximize(obj), cons)

objval = prob.solve()

print("Objective value: {0}".format(objval))
print("x1 = {0}".format(x1.value))
print("x2 = {0}".format(x2.value))
print("b1 = {0}".format(b1.value))
print("b2 = {0}".format(b2.value))