简体   繁体   English

带有唯一零件的PULP优化仅计入目标函数?

[英]PULP Optimization with unique parts only counting towards objective function?

I'm hoping someone can get me started in the right direction. 我希望有人能帮助我朝正确的方向开始。 I have a pandas dataframe like this: 我有一个这样的熊猫数据框:

在此处输入图片说明

The columns are machines, and the rows are groups. 列是机器,行是组。 1 means that machine has that group, 0 means it does not. 1表示机器具有该组,0表示没有。 The real dataframe is much larger with more overlap in the groups. 实际数据帧更大,各组中有更多重叠。

What I need to be able to do is specify a limit on the number of machine columns chosen, while maximizing the number of unique groups selected. 我需要做的是指定所选计算机列的数量限制,同时最大化所选唯一组的数量。 So in example: what 3 machines could I select that would cover the most unique groups? 因此,在示例中:我可以选择哪三台机器来覆盖最独特的组? There's no penalty for selecting a group twice, but it doesn't help at all either. 两次选择一个组没有任何惩罚,但这也无济于事。

I've tried doing this with python's PuLP package, but I'm struggling to write an objective function that only rewards unique group contributions (it basically tries to maximize the total number of groups, not the unique). 我已经尝试使用python的PuLP软件包来做到这一点,但是我正在努力编写一个目标函数,该目标函数仅奖励唯一的组贡献(它基本上是试图最大化组的总数,而不是唯一的组)。

I'm real stuck here, any help is appreciated! 我真的被困在这里,不胜感激!

I think it is always useful to first write down a mathematical model. 我认为首先写下一个数学模型总是有用的。 Something like: 就像是:

在此处输入图片说明

This model can now easily be transcribed in PuLP. 现在可以轻松地在PuLP中转录该模型。 You can relax y to be continuous between 0 and 1 (this may help some solvers). 您可以放松y以使其在0到1之间连续(这可能对某些求解器有所帮助)。 The results for K=3 should look like: K=3的结果应类似于:

----     34 VARIABLE x.L  machine on/off

A 1.000,    C 1.000,    D 1.000


----     34 VARIABLE y.L  groups covered

group1 1.000,    group2 1.000,    group3 1.000,    group4 1.000


----     34 VARIABLE z.L     =        4.000  number of groups covered

Vary K to study the trade-offs (you could make some nice plots of K vs z ). 改变K来研究权衡(您可以绘制K z一些漂亮图)。

Note: this problem is a little bit like a set covering problem, and it solves very fast. 注意:这个问题有点像集合覆盖问题,而且解决起来非常快。 With 200 groups, 100 machines, K=20, random data in the data frame this solves in 2.5 seconds (the MIP model has 201 equations and 300 binary variables): 对于200组,100台机器,K = 20的数据帧,它在2.5秒内即可解决(MIP模型具有201个方程式和300个二进制变量):

----     27 VARIABLE x.L  machine on/off

m1   1.000,    m5   1.000,    m10  1.000,    m14  1.000,    m17  1.000,    m21  1.000,    m28  1.000,    m29  1.000
m36  1.000,    m41  1.000,    m50  1.000,    m52  1.000,    m79  1.000,    m81  1.000,    m82  1.000,    m83  1.000
m85  1.000,    m92  1.000,    m93  1.000,    m100 1.000


----     27 VARIABLE y.L  groups covered

group1   1.000,    group2   1.000,    group3   1.000,    group4   1.000,    group5   1.000,    group6   1.000
group7   1.000,    group8   1.000,    group10  1.000,    group11  1.000,    group12  1.000,    group13  1.000
group14  1.000,    group15  1.000,    group16  1.000,    group18  1.000,    group19  1.000,    group20  1.000
group21  1.000,    group22  1.000,    group23  1.000,    group25  1.000,    group26  1.000,    group28  1.000
group29  1.000,    group31  1.000,    group32  1.000,    group33  1.000,    group34  1.000,    group35  1.000
group37  1.000,    group38  1.000,    group39  1.000,    group40  1.000,    group41  1.000,    group42  1.000
group43  1.000,    group44  1.000,    group45  1.000,    group46  1.000,    group47  1.000,    group48  1.000
group49  1.000,    group50  1.000,    group51  1.000,    group52  1.000,    group53  1.000,    group54  1.000
group55  1.000,    group56  1.000,    group57  1.000,    group58  1.000,    group59  1.000,    group60  1.000
group62  1.000,    group63  1.000,    group64  1.000,    group65  1.000,    group67  1.000,    group68  1.000
group69  1.000,    group70  1.000,    group71  1.000,    group74  1.000,    group75  1.000,    group76  1.000
group77  1.000,    group78  1.000,    group79  1.000,    group80  1.000,    group81  1.000,    group82  1.000
group83  1.000,    group84  1.000,    group85  1.000,    group86  1.000,    group87  1.000,    group88  1.000
group89  1.000,    group90  1.000,    group91  1.000,    group92  1.000,    group94  1.000,    group95  1.000
group96  1.000,    group97  1.000,    group98  1.000,    group99  1.000,    group100 1.000,    group102 1.000
group103 1.000,    group104 1.000,    group105 1.000,    group106 1.000,    group107 1.000,    group108 1.000
group109 1.000,    group110 1.000,    group111 1.000,    group112 1.000,    group113 1.000,    group114 1.000
group115 1.000,    group116 1.000,    group117 1.000,    group118 1.000,    group119 1.000,    group120 1.000
group121 1.000,    group122 1.000,    group123 1.000,    group124 1.000,    group126 1.000,    group127 1.000
group128 1.000,    group129 1.000,    group130 1.000,    group131 1.000,    group132 1.000,    group133 1.000
group134 1.000,    group135 1.000,    group136 1.000,    group137 1.000,    group138 1.000,    group139 1.000
group140 1.000,    group141 1.000,    group142 1.000,    group143 1.000,    group144 1.000,    group146 1.000
group147 1.000,    group148 1.000,    group150 1.000,    group151 1.000,    group152 1.000,    group153 1.000
group155 1.000,    group156 1.000,    group157 1.000,    group158 1.000,    group159 1.000,    group160 1.000
group161 1.000,    group162 1.000,    group163 1.000,    group164 1.000,    group165 1.000,    group166 1.000
group167 1.000,    group168 1.000,    group169 1.000,    group170 1.000,    group171 1.000,    group173 1.000
group176 1.000,    group177 1.000,    group178 1.000,    group179 1.000,    group180 1.000,    group181 1.000
group182 1.000,    group183 1.000,    group186 1.000,    group187 1.000,    group188 1.000,    group189 1.000
group190 1.000,    group191 1.000,    group192 1.000,    group194 1.000,    group196 1.000,    group197 1.000
group198 1.000,    group199 1.000,    group200 1.000


----     27 VARIABLE z.L        =      177.000  number of groups covered

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

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