【问题标题】:How to choose 9 values such that如何选择 9 个值使得
【发布时间】:2012-10-29 10:26:20
【问题描述】:

给定 9 个变量 x1 x2 x3 x4 x5 x6 x7 x8 x9,我想将实数分配给它们:

exactly 1 pair among them sums to 2
exactly 2 pairs among them sum to 3
exactly 3 pairs among them sum to 4
exactly 4 pairs among them sum to 5
exactly 5 pairs among them sum to 6
exactly 6 pairs among them sum to 7
exactly 5 pairs among them sum to 8
exactly 4 pairs among them sum to 9
exactly 3 pairs among them sum to 10
exactly 2 pairs among them sum to 11
and exactly 1 pair among them sums to 12

能否以某种方式将其建模为约束满足问题?或者如何解决这个问题?

谢谢,

【问题讨论】:

  • 您想要所有解决方案的描述吗?还是仅仅一个解决方案就足够了?
  • 其实手动解决这个问题并不太难:对xi排序,注意x1 + x2 = 2和x1 + x3 = 3。然后x2 + x3
  • 一个解决方案就足够了。抱歉,为什么 x2+x3 = 4 不能成立?我看不出有任何矛盾出现。如果我遗漏了什么,请纠正我。
  • 你是对的;我的错——似乎没有任何矛盾。正如@hardmath 所说,可以推动这些想法以表明存在解决问题的独特解决方案。

标签: math numbers logic constraints


【解决方案1】:

由于您要求 1 对具有一定的总和,因此计数的变量必须是 无序对。此外,由于指定了 36 个总和,我们排除(我假设)向自身添加一个变量(因此需要 36 个不一定不同的总和)。

您在问一个表面上的编程问题,即它是否可以通过约束编程来解决。约束编程可以产生有限域的答案。在实数域中,如果没有进一步的洞察力,将有无数种可能性进行检查。

在搜索中,可以假设变量是按升序排列的,这会使这些变量的“加法表”的行和列也按升序排列。现在我们至少有一个有限的问题要探索。这张表格的上下三角形是对称的,所以我们只需要找出其中一半或另一半是否可以填写即可。

这足够暗示吗?我注意到表中 2 和 12 条目的位置是确定的(作为两个最小和两个最大的总和)变量。我们可以像这样可视化加法表的上半部分:

  _  2  ?  ?  ?  ?  ?  ?  ?
     _  ?  ?  ?  ?  ?  ?  ?
        _  ?  ?  ?  ?  ?  ?
           _  ?  ?  ?  ?  ?
              _  ?  ?  ?  ?
                 _  ?  ?  ?
                    _  ?  ?
                       _ 12
                          _

我们可以给出一个相当简单的 Prolog 程序,它逐行选择条目,使用的事实是每行中第一个打开的条目必须是可用的最小条目(因为以后不会出现使用该条目的机会,如果在那里使用大的)以及连续行但对应列中的条目之间的差异在该行中是一个常数(包括对角线和下半部分)。

要看到这一点,请考虑第 i 行和第 j 列减去第 i 行和第 j 列:

(x_i + x_j) - (x_i' + x_j)  =  x_i - x_i'

差异不取决于列!我们在这些行之间的每一列中得到相同的差异,例如如果第 j 列更改为第 j 列(例如)。

将这些想法推得足够远,可以让人们手动解决问题。

【讨论】:

  • 这里有一些不错的想法。还可能需要注意的是,对于某个正整数 n,所有 9 个数字必须采用 n / 8 的形式。例如,8x1 = (x1 + x2) + (x1 + x3) + ... + (x1 + x9) - (x2 + x3) - (x4 + x5) - (x6 + x7) - (x8 + x9),每个括号对是一个整数。对于正数,最多 xi 之一可以
  • @MarkDickinson:由于加法表 (x1 + x1),(x2 + x2),...,(x9 + x9) 的对角线项也是整数,因此数字的分母(最低限度)不得大于 2。例如,(x1 + x1) + (x2 + x9) = (x1 + x2) + (x1 + x9) 和三个四个整数中的一个使另一个项成为整数。
  • 是的,很抱歉错过了这个事实:我们将在不将两个相同的 xi 配对在一起的情况下计算 36 对明智的总和。那个“加法表”绝对看起来像是一种更有条理的解决问题的方法。但是,您能否在您的第二个观察中进一步说明 - “连续行中的条目但相应列中的条目之间的差异在该行中是一个常数”?我似乎无法解释为什么。
  • @hardmath:是的。并且 all xi 是整数,或者对于某个奇数 n,它们是 n/2 形式的 all。事实证明,原来的问题有一个独特的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 2012-02-21
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2019-09-29
  • 2021-09-10
相关资源
最近更新 更多