麻烦书写纸浆约束

问题描述

我正在尝试解决LP问题,我有一个100行和2列的数据框(假设ab),我需要选择10行以便满足以下条件:

if a>=b then b/(a+b)>=0.2
if a<=b then a/(a+b)>=0.2

我尝试了以下步骤(假设数据帧为df

  1. 制作一个虚拟变量c,该变量在每行中仅包含值1,并表示每个唯一行的键。
  2. 然后key=list(df['key'])
  3. a=dict(zip(key,df['a']))
  4. b=dict(zip(key,df['b']))
  5. c=dict(zip(key,df['c']))
  6. var=LpVariable.dicts('keys',key,lowBound=0,cat='Binary')
  7. prob= *defined minimizing function*
  8. prob+=lpSum([c[i]*var[i] for i in key)<=10
  9. prob+=condition(lpSum([a[i]*var[i] for i in key),lpSum([b[i]*var[i] for i in key))=1
def condition(a,b):
   if a>=b and b/(a+b)>=0.2: return 1
   if a<=b and a/(a+b)>=0.2: return 1
   return 0

我在最后一步上遇到了麻烦。有什么解决方法吗?

注意:我知道可以使用其他方法或工具来解决此类问题,但是我对Pulp有所限制,因为这只是一个较大问题的一部分,因此任何有关此问题的指导都将有所帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)