Python 尽量减少输出的数量

Python 尽量减少输出的数量,python,pulp,Python,Pulp,对于线性优化问题,我想包括一个惩罚。如果总和大于0,则每个选项的罚金(罚金[(i)]应为1,如果罚金为零,则为0。有办法做到这一点吗 处罚的定义如下: penalties = {} for i in A: penalties[(i)]=(lpSum(choices[i][k] for k in B))/len(C) prob += Objective Function + sum(penalties) 例如: penalties[(0)]=0 penalties[(1)]=2 pen

对于线性优化问题,我想包括一个惩罚。如果总和大于0,则每个选项的罚金(罚金[(i)]应为1,如果罚金为零,则为0。有办法做到这一点吗

处罚的定义如下:

penalties = {}
for i in A: 
    penalties[(i)]=(lpSum(choices[i][k] for k in B))/len(C)
prob += Objective Function + sum(penalties)
例如:

penalties[(0)]=0
penalties[(1)]=2
penalties[(3)]=6
penalties[(4)]=0
罚款总额应为:

sum(penalties)=0+1+1+0= 2 

对。您需要做的是创建二进制变量:
使用第i行
。如果任何
选项[i][k]
对于行
i
(否则为0),则该变量的解释为
==1

目标函数中的惩罚项只需是
sum(用第i行[i]表示A中的i)

您最不需要的是强制执行上述规则的约束集:

for i in A:
    lpSum(choices[i][k] for k in B) <= use_ith_row[i]*M
A中的i的

谢谢你的回复。根据你的解释,我会这样做:
对A中的I使用第I行=np.zero(len(A)):if-lpSum(B中的k的选择[I][k])>=1:对第I行[I]=1 prob+=lpSum(B中的k的选择[I][k])你不需要if语句。这是内置于约束中的。如果
use ith_row
为1,则约束将不具有约束力。如果它是零,它将包含到0的选项。