Math 如何选择9个值,以便

Math 如何选择9个值,以便,math,numbers,logic,constraints,Math,Numbers,Logic,Constraints,给定9个变量x1x2x3x4x5x6x7x8x9,我想给它们分配实数: 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

给定9个变量x1x2x3x4x5x6x7x8x9,我想给它们分配实数:

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
这是否可以建模为约束满足问题?或者如何着手解决这个问题


谢谢,

既然您要求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'(例如)


将这些想法推广到足够远的地方,就可以用手解决问题。

是否要描述所有解决方案?或者仅仅是一个单一的解决方案足够好?实际上,用手解决这个问题并不难:请命令席,注意x1+x2=2,x1+x3=3。然后x2+x3<(x1+x2)+(x1+x3)=5,所以它是3或4。你很快就会发现,这两种选择都没有解决方案。所以没有解决方案,一个解决方案就足够了。对不起,为什么x2+x3=4不能保持?我看不出有任何矛盾出现。如果我遗漏了什么,请纠正我。你是对的;我的错——似乎没有任何矛盾。正如@hardmath所说的,这些想法可以被推广到实践中去,以表明这个问题有一个独特的解决方案。这里有一些不错的想法。请注意,对于某些正整数
n
,所有9个数字的格式都必须为
n/8
。例如,
8x1=(x1+x2)+(x1+x3)+……+(x1+x9)-(x2+x3)-(x4+x5)-(x6+x7)-(x8+x9)
,每个括号内的对都是一个整数。对于正性,至多一个席可以是@ MalkDikns:因为加法表<代码>(x1+x1)、(x2+x2)、…(x9+x9)< /代码>的对角线条目也是整数,所以数字必须不具有大于2的分母(最低值)。例如,
(x1+x1)+(x2+x9)=(x1+x2)+(x1+x9)
,四个整数中的三个使另一个项成为整数。是的,很抱歉忽略了这一事实:我们要计算36个成对和,而不是将两个相同的xi配对在一起。“加法表”看起来绝对像是解决问题的一种更结构化的方法。然而,请您进一步说明您的第二个观察结果——“连续行中的条目与对应列之间的差异在该行中是一个常数这一事实”好吗?我似乎无法解释为什么。@hardmath:是的。要么所有的xi都是整数,要么它们的形式都是n/2,对于一些奇数整数n。原来,原来的问题有一个独特的解决方案。