我正在尝试向要使用ortools解决的MIP添加约束。
这是我的数据框:
index, type, num_value
a, new, 1
b, new, 2
c, old, 1
d, old, 3
e, new, 2
f, old, 2
目标是在索引列中找到3个项目,其中num_value的总和最大化。但是,现在我想为“类型”添加一个约束:在选择的3个项目中,其中一个必须为“旧”类型。
到目前为止,这是我的代码:
solver = pywraplp.Solver('simple mip', pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
index_to_int = {}
int_to_index = {}
cnt = 0
for i in df['index']:
index_to_int[i] = cnt
int_to_index[cnt] = i
cnt += 1
selected = [solver.BoolVar('item'+str(c)) for c in range(cnt)]
solver.Maximize(solver.Sum((i.num_value)*selected[index_to_int[i.index]] for i in df.itertuples()))
solver.Add(solver.Sum(selected)==3)
solver.Add(solver.Sum([df.loc[selected, 'type'])>1)
status = solver.Solve()
我认为“旧”类型的至少1个约束是错误的,因此我没有得到理想的结果。如何使用ortools进行指定?
答案 0 :(得分:0)
您不能使用>,需要使用> = ..并且我看不到最后一个方程式中出现“旧”字样。