问题描述
我正试图在PuLP中公式化此基于复杂矩阵的约束,以解决成本优化问题:
我有一个vars[(i,j)] for i in TruckTypes for j in Days
作为决策变量,它只能采用非负整数值。我正在尝试限制active
天的数量。
现在,由于Days
被表示为列,因此所有具有零值的列将是inactive
天,而所有其他列将是active
天。有6列表示星期一至星期六。例如下面的矩阵:
1 0 0 1 3 0
0 0 0 1 1 0
2 0 0 1 0 0
0 0 0 1 0 0
第2、3和6列为inactive
,第1,4和5列为active
。现在,如何为该决策变量制定约束条件,例如Number of active Days == 3
。
任何帮助将不胜感激。谢谢!
解决方法
考虑了一会儿..我想我已经破解了这个...
- 为活动天数创建一个虚拟的一维二元决策变量。 0-非活动1-活动。
ActiveDays = LpVariable.dicts('activedays',Days,0,1,LpBinary)
- 创建一个虚拟的非常大的常量。
M = 200000
- 添加第一个约束。
prob + = LpSum(m [j] for j in Days)== 3
-
添加第二个约束
for j in Days: prob += LpSum(vars[i][j] for i in TruckTypes) <= M*m[j]