如何洗牌八个项目以接近最大熵?

How to shuffle eight items to approximate maximum entropy?

提问人:Mathieu 提问时间:3/19/2018 最后编辑:vlad_tepeschMathieu 更新时间:4/11/2018 访问量:126

问:

我需要在 5 天内重复分析 8 个化学样品(每个样品每天分析一次)。我想每天生成伪随机样本序列,以实现以下目标:

  • 避免日常序列位置的偏差(例如,避免一些样品主要在早上处理)
  • 避免在不同日期重复样品对(例如 在第 1 天和第 2 天)1234567887654321
  • 通常将两个给定样本之间的距离从一天随机化到另一天

我可能把上述条件说得不好,但总体思路是尽量减少系统性影响,如每天的样品交叉污染和/或分析漂移。我可以随机随机地打乱每个序列,但由于生成的序列数量很少(N=5 与 40,320 种可能的组合),我不太可能接近最大熵之类的东西。

有什么想法吗?我怀疑这是分析科学中的一个常见问题,已经解决了,但我不知道该去哪里寻找。

随机 语言不可知组合 数学

评论

0赞 sascha 3/19/2018
感觉很宽广。尝试用数学术语来表述它。然后还有:你真的需要一个随机结果吗?或者你能用你的条件/目标优化一些模型,这些模型总是会产生相同的输出吗?
0赞 Arndt Jonasson 3/19/2018
分析科学,或统计学,但我也不知道该去哪里看。
0赞 Arndt Jonasson 3/19/2018
这并不能解决问题,但我很感兴趣:这些约束是否适用于整个五天,或者例如,在第 1 天和第 5 天都12345678序列是否可以?
0赞 Mathieu 3/23/2018
不,那不行。这个想法是拥有一些近似随机性的东西,同时仍然最小化简单的重复模式。

答:

0赞 vlad_tepesch 4/11/2018 #1

只要想想:

您可能使用的基本指标是 Levenshtein 距离或一些轻微的修改(可能

myDist(w1, w2) = min(levD(w1, w2), levD(w1.reversed(), w2))

)

由于您想防止任何一对日子之间的近距离, 总体指标可以是两天之间样本订单的任意组合的总和。

Similarity = myDist(day1, day2)
           + myDist(day1, day3)
           + myDist(day1, day4)
           + myDist(day1, day5)
           + myDist(day2, day3)
           + myDist(day2, day4)
           + myDist(day2, day5)
           + myDist(day3, day4)
           + myDist(day3, day5)
           + myDist(day4, day5)

仍然缺少,这是启发式的如何创建示例订单。

你的问题让我想起了一些最快的路径查找问题,但更困难的是,每个选定的节点都会影响整个图的权重。所以这要困难得多。

也许可以创建一个包含每对组合之间所有距离的表(其可交换的,只有三角形(没有恒等对角线)矩阵需要(~1GB 内存)) 这可能有助于加快速度。myDist8!

也许从这个矩阵中获取最大值,并认为值低于某个阈值的每个组合同样没有价值,以减少搜索空间。

构建起始集。 使用 12345678 作为修复 day1,因为第一天无关紧要。永远不要改变这一点。 然后重复,直到选择 n 天:

  • 添加距当前点最远的点。
  • 如果有多个相等的可能性,请使用与前几天相距最远的那个。

现在迭代改进解决方案 - 也许使用一些破坏和重新创建的方法。您应该始终备份您找到的绝对最大值,并且您可以根据需要运行任意数量的迭代(并且您有时间)

  1. 选择与其他日子距离最小的(一两天)天
  2. 也许蛮力是这两天的最佳(就总距离而言)组合。
  3. 重复
    • 如果优化卡住了(只选择了相同的 2 天或距离根本没有变小)
    • 随机更改一两天为随机订单。
    • 可以完全随机(除了第 1 天)可以选择起始集