楼主 chrisfang |
九宫格问题是一个很古老的数学问题,就是要求将1~9九个数字分别填入3行3列的九个格子之中,使得其各行、各列、各对角线上三个数字相加的和均为15。 对于这个问题,可以使用Excel中的规划求解工具进行运算。具体设计步骤如下: 1,首先,假定九宫格位于A1:B3单元格区域中,然后通过公式对其各行、各列、各对角线进行求和,形成8个求和公式,这8个求和公式将被用作规划求解中的约束条件。 如下图所示,例如E4单元格中公式为=A1+B1+C1 2,九宫格中可以填入的数字为1~9,每个数字仅可使用一次并且必须被使用一次,可以制作一张二维表,将九个格子中每个数字的使用情况详细列出,以数字0和1表示是否被选取,此区域将作为规划求解的可变单元格区域。如下图所示。 对于这个二维表格的纵向每一列来说,相当于每个数字被某个九宫单元格所选取的情况,例如第一列即数字1被选取的情况,此列数值只有唯一一个等于1,表示数字1只能被选中1次,所以可以将此列数值求和,形成数字1被使用的唯一性的校验。 对于这个二维表格的横向每一行来说,相当于每个九宫单元格选取不同数字的情况,例如第一行即A1单元格选取了某个数字,此行数值也有且仅有一个等于1,表示A1单元格中只能填入一个数字,所以可以将此行数值进行求和,形成A1单元格选取数字的唯一性的校验。 通过以上横向和纵向的唯一性校验,可以形成规划求解所需的另外18组约束条件。 3,根据上面的二维表格,可以得到九宫格中各个单元格的实际选取数字,在T4单元格中输入公式=SUMPRODUCT($J$3:$R$3,J4:R4)并向下复制,可以在T列形成九宫格数字的具体取值。为了更好地在九宫格中显示结果,可以在A1:B3单元格中对T列数据进行链接引用。 4,准备好以上这些规划求解的可变单元格区域和约束条件公式以后,可以开始进行具体的规划求解设置,其设置方法如下图所示: 选项中,“设置目标”留空(在规划求解中,目标值和约束值可以互相转换,对于此例,可以不舍定具体目标值,而将所有充分必要的约束值设定完整即可)。 可变单元格区域为:$J$4:$R$12 约束条件包括8组和值为15的求和公式(E4:F6、G4:G5) 18组唯一性校验的公式(J13:R13、S4:S12) 还有可变单元格的取值为二进制BIN,表示可变单元格数字可以在0和1之间变化,作为1~9数字是否被选取的标志。 最后注意选择“单纯线性规划”选项。 5,设定完成后,单击“求解”按钮可以开始规划求解工作,找到其中一组解时会弹出对话框: 对于九宫格问题,包含的可能解法有许多,如需寻求更多种答案,可尝试改变可变单元格区域的初值,进行再次求解。 规划求解之九宫格1.rar |
2楼 chrisfang |
在Excel 2010中,规划求解的选项又有新的改变,上述九宫格问题也可以通过以下简化方法进行求解: 1,参照上面帖子中的步骤1,设定九宫格布局和各行、各列、各对角线的求和公式: 2,打开规划求解,设定参数如下图: 其中,目标值仍留空。可变单元格区域则直接设定为九宫格所在区域。 约束条件包括以下几项: 8组求和公式和值为15(E4:F6,G4:G5) 可变单元格各项不同(Alldifferent) 可变单元格取值范围>=1,且<=9。 最后注意选择“单纯线性规划”选项。 3,设定完成后单击“求解”按钮进行求解工作,找到答案时显示如下: 规划求解之九宫格2.rar |
3楼 dawin2046 |
2010的alldifferent挺不错的。 |