【问题标题】:How to generate an optimal order of multiple elements based on pairwise element score values如何基于成对元素得分值生成多个元素的最佳顺序
【发布时间】:2015-07-26 02:49:53
【问题描述】:

我有很多元素,比如说[a, b, c, d],对于每个配对组合我都有一个分数:

[['d-a', 0], ['a-b', 0], ['b-a', 0],
 ['a-c', 2], ['c-a', 0], ['a-d', 2],
 ['d-b', 1], ['b-c', 2], ['c-b', 0],
 ['b-d', 2], ['d-c', 2], ['c-d', 2]]

我正在寻找一种在 Python 中将这些元素按连续顺序排列的方法,以使这些分数的总和最小化。每个单元必须出现一次且仅出现一次。请注意,两个元素的连续性也很重要,即'd-a' = 0'a-d' = 2

我将非常感谢您的回答。

谢谢

西蒙

【问题讨论】:

  • 对不起,我不清楚任务。请提供一些示例输出并向我们展示您到目前为止所做的尝试!
  • 如果我理解得很好,你想找到一个['a', 'b', 'c', 'd'] 的排列,它可以最小化分数的总和。而['c', 'b', 'd', 'a']的分数之和,例如,score('c', 'b') + score('c', 'd') + score('c', 'a') + score('b', 'd') + score('b', 'a') + score('d', 'a')。是这样吗?

标签: python optimization mathematical-optimization


【解决方案1】:
elements = ['a', 'b', 'c', 'd']
scores = [['d-a', 0], ['a-b', 0], ['b-a', 0], ['a-c', 2], ['c-a', 0], ['a-d', 2],
          ['d-b', 1], ['b-c', 2], ['c-b', 0], ['b-d', 2], ['d-c', 2], ['c-d', 2]]

s = dict(scores)
print(min(itertools.permutations(elements),
          key=lambda p: sum(s[a+'-'+b] for a, b in zip(p, p[1:]))))

打印('c', 'a', 'b', 'd')

【讨论】:

  • 太棒了!这正是我一直在寻找的。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2017-11-26
相关资源
最近更新 更多