【问题标题】:A kind of brute-force attack一种蛮力攻击
【发布时间】:2016-12-12 15:31:45
【问题描述】:

为了在我的研究中完成一个项目,我必须解决一个关于 python 的问题,我需要一些帮助。

确实,我想浏览一个问题的所有可能性,并且我有想法,但这对我来说不是很清楚。

问题来了:

  • 233 200 134 167
  • 234 187 172 196
  • 237 220 133 163
  • 241 159 193 165

我们必须找到如何为每个进出站放置每辆卡车。 一列代表卡车的装载量和数字,产品数量。

例如,如果我们将卡车 A 放在第一个入站 (233),卡车 B 放在第二个入站 (187),卡车 C 放在第三个入站 (133),卡车 D 放在第四个入站 ( 165) 我们有 233+187+133+165=718

我们的目标是最小化这个总和。例如,如果我们只更改卡车 A 和卡车 B,我们的总和为 234+200+133+165=732,这并不比以前好。

那么,我们如何才能获得卡车放置的所有可能性的总和? 有 24 种可能性,我们已经将它们写在 excel 中,并且最好的可能性是卡车 A (234) 的位置,卡车 B (159) 的位置 4,卡车 C (134) 的位置 1 和卡车 D (163) 的位置 3,总和为690

我将使用列表,并且我知道我们如何获得列表中的数字,如何创建列表等。用列表的数量求和,但是我们如何获得我们可以进行的所有计算以excel为例,比如我之前写的两次。

此致,

【问题讨论】:

  • itertools.permutations(range(4)) 将生成数字 0..3 的 24 种可能排列(您可以将 range(1,5) 用于文本中的数字 1..4,但这远不便于索引列表)。

标签: list sum brute-force


【解决方案1】:

感谢您的“排列”。

但是,有了这个:

for elt in itertools.product([233,234,237,241],[200,187,220,159],[134,172,133,193],[167,196,163,165]):
print(elt)

我有这个答案(部分答案,不要全部答案,这么多可能性)

   (233, 200, 134, 167)(233, 200, 134, 196)(233, 200, 134, 163)(233, 200, 134, 165)(233, 200, 172, 167)(233, 200, 172, 196)(233, 200, 172, 163)
(233, 200, 172, 165)(233, 200, 133, 167)(233, 200, 133, 196)(233, 200, 133, 163(233, 200, 133, 165)(233, 200, 193, 167)(233, 200, 193, 196)(233, 200, 193, 163)(233, 200, 193, 165)(233, 187, 134, 167)(233, 187, 134, 196)(233, 187, 134, 163)(233, 187, 134, 165)(233, 187, 172, 167)(233, 187, 172, 196)(233, 187, 172, 163)(233, 187, 172, 165)(233, 187, 133, 167)(233, 187, 133, 196)

事实上,我们不能把 233 和 200 放在同一个列表中,因为它是同一辆卡车和同一辆卡车不能在两个不同的入站。所以我的问题是:我怎样才能改变功能产品(我认为问题来自这个功能)例如(233,187,133,165)(233,187,193,163)?

这里是功能产品:

def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
    result = [x+[y] for x in result for y in pool]
for prod in result:
    yield tuple(prod)

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2013-05-28
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多