繁体   English   中英

PuLP 打印仅非零的决策变量结果?

[英]PuLP print decision variable results that are Non-Zero only?

目前我正在使用 PuLP 解决零售分销问题。 CZe 代表客户,其中索引 DC 或 S1、S2 等是为该客户的需求提供服务的位置。 我想找到一种方法来仅打印具有非零分配量的决策变量......如果可能的话。

Service_1_('CZe_0004',_'DC_CA_FRESNO') = 0.0
Service_1_('CZe_0004',_'DC_IN_GREENWOOD') = 0.0
Service_1_('CZe_0004',_'DC_PA_CHAMBERSBURG') = 0.01
Service_1_('CZe_0004',_'DC_TX_DALLAS') = 0.0
Service_1_('CZe_0004',_'MFC_FL_JACKSONVILLE') = 0.0
Service_1_('CZe_0004',_'MFC_IL_ROMEOVILLE') = 0.0
Service_1_('CZe_0004',_'MFC_SC_GREER') = 0.0
Service_1_('CZe_0004',_'S1') = 0.0
Service_1_('CZe_0004',_'S10') = 0.0
Service_1_('CZe_0004',_'S11') = 0.0
Service_1_('CZe_0004',_'S12') = 0.0
Service_1_('CZe_0004',_'S13') = 0.0
Service_1_('CZe_0004',_'S14') = 0.0
Service_1_('CZe_0004',_'S15') = 0.0
Service_1_('CZe_0004',_'S16') = 0.0
Service_1_('CZe_0004',_'S17') = 0.0
Service_1_('CZe_0004',_'S18') = 0.0
Service_1_('CZe_0004',_'S19') = 0.0
Service_1_('CZe_0004',_'S2') = 0.0
Service_1_('CZe_0004',_'S20') = 0.0
Service_1_('CZe_0004',_'S21') = 0.0
Service_1_('CZe_0004',_'S22') = 0.0
Service_1_('CZe_0004',_'S23') = 0.0
Service_1_('CZe_0004',_'S24') = 0.0
Service_1_('CZe_0004',_'S25') = 0.0
Service_1_('CZe_0004',_'S26') = 0.0
Service_1_('CZe_0004',_'S27') = 0.0
Service_1_('CZe_0004',_'S3') = 0.0
Service_1_('CZe_0004',_'S4') = 0.0
Service_1_('CZe_0004',_'S5') = 0.0
Service_1_('CZe_0004',_'S6') = 0.0
Service_1_('CZe_0004',_'S7') = 0.0
Service_1_('CZe_0004',_'S8') = 0.0
Service_1_('CZe_0004',_'S9') = 0.0
Service_1_('CZe_0005',_'DC_CA_FRESNO') = 0.0
Service_1_('CZe_0005',_'DC_IN_GREENWOOD') = 0.0
Service_1_('CZe_0005',_'DC_PA_CHAMBERSBURG') = 0.01
Service_1_('CZe_0005',_'DC_TX_DALLAS') = 0.0
Service_1_('CZe_0005',_'MFC_FL_JACKSONVILLE') = 0.0
Service_1_('CZe_0005',_'MFC_IL_ROMEOVILLE') = 0.0
Service_1_('CZe_0005',_'MFC_SC_GREER') = 0.0
Service_1_('CZe_0005',_'S1') = 0.0
Service_1_('CZe_0005',_'S10') = 0.0
Service_1_('CZe_0005',_'S11') = 0.0
Service_1_('CZe_0005',_'S12') = 0.0
Service_1_('CZe_0005',_'S13') = 0.0
Service_1_('CZe_0005',_'S14') = 0.0
Service_1_('CZe_0005',_'S15') = 0.0
Service_1_('CZe_0005',_'S16') = 0.0
Service_1_('CZe_0005',_'S17') = 0.0
Service_1_('CZe_0005',_'S18') = 0.0
Service_1_('CZe_0005',_'S19') = 0.0
Service_1_('CZe_0005',_'S2') = 0.0
Service_1_('CZe_0005',_'S20') = 0.0
Service_1_('CZe_0005',_'S21') = 0.0
Service_1_('CZe_0005',_'S22') = 0.0
Service_1_('CZe_0005',_'S23') = 0.0
Service_1_('CZe_0005',_'S24') = 0.0
Service_1_('CZe_0005',_'S25') = 0.0
Service_1_('CZe_0005',_'S26') = 0.0
Service_1_('CZe_0005',_'S27') = 0.0
Service_1_('CZe_0005',_'S3') = 0.0
Service_1_('CZe_0005',_'S4') = 0.0
Service_1_('CZe_0005',_'S5') = 0.0
Service_1_('CZe_0005',_'S6') = 0.0
Service_1_('CZe_0005',_'S7') = 0.0
Service_1_('CZe_0005',_'S8') = 0.0
Service_1_('CZe_0005',_'S9') = 0.0

下面是我目前用来打印这个优化问题结果的代码行。

for v in problem.variables():
    print(v.name,"=",v.varValue)
    
#Print Optimal Solution
print("The cost of allocating demand equals",value(problem.objective))

你应该能够在你的打印循环中插入一个小的逻辑测试......我会建议一个小的“epsilon”值作为浮点值。

eps = 1e-4
for v in problem.variables():
    if v.varValue > eps:
        print(v.name,"=",v.varValue)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM