Mathematica的最小化功能

时间:2011-04-19 14:25:34

标签: wolfram-mathematica puzzle

Mathematica的Minimize函数是否允许像Mod [x,2] == 0这样的约束?我正在尝试用Mathematica解决MinuteMath难题:

  

四个不同的正整数的最小平均值是多少?

我的“解决方案”看起来像这样:

vars = Subscript[x, #] & /@ Range[4];
cond = Apply[And, Mod[#, 2] == 0 & /@ vars] && 
   (0 < Subscript[x, 1]) &&
   Apply[And, Table[Subscript[x, i] < Subscript[x, i + 1], {i, 1, 3}]];
Minimize[{Mean[vars], cond}, vars, Integers] 

Minimize返回未评估。其他问题:我可以使用EvenQ来定义约束吗?问题是,EvenQ[x]为未定义的表达式False返回x

3 个答案:

答案 0 :(得分:5)

显然,这不需要数学,但是,在回答你的问题时,Minimize似乎不喜欢数学。你可以将它构建到公式中,如下所示:

Minimize[{(2 x1 + 2 x2 + 2 x3 + 2 x4)/4,
  0 < x1 < x2 < x3 < x4}, {x1, x2, x3, x4}, Integers]

答案 1 :(得分:4)

这个问题明显有些过分,但有助于展示一些技巧。

请注意:

 Exists[x, Element[x, Integers] && n x == y]

可以用作

的替代方案
  Mod[y,n] == 0

所以:

Minimize[{(x1 + x2 + x3 + x4)/4, 0 < x1 < x2 < x3 < x4 && 
   Exists[x, Element[x, Integers] && 2 x == x1] &&
   Exists[x, Element[x, Integers] && 2 x == x2] &&
   Exists[x, Element[x, Integers] && 2 x == x3] &&
   Exists[x, Element[x, Integers] && 2 x == x4]
  },
 {x1, x2, x3, x4}, Integers]  

-> {5, {x1 -> 2, x2 -> 4, x3 -> 6, x4 -> 8}}  

或许更优雅:

s = Array[x, 4];  
Minimize[{  
  Total@s,  
  Less @@ ({0} \[Union] s) &&  
   And @@ (Exists[y, Element[y, Integers] && 2 y == #] & /@ s)},
s, Integers]

--> {20, {x[1] -> 2, x[2] -> 4, x[3] -> 6, x[4] -> 8}}

答案 2 :(得分:0)

最小化不适用于此问题,它给出了错误的解决方案:

2 4 8 10

好的解决方案是:

2 4 6 12

“选择”接受Mod功能要比“最小化”要好
最小化给出了错误的解决方案。

播放此程序,请参阅:

Res=Select[Permutations[Range@20 {4}],Mod[ #[[1]],2]==0 &&Mod[ #[[2]],2]==0&&Mod[#[[3]],2]==0 &&Mod[#[[4]],2]==0&&Mod[(#[[1]]+#[[2]]+#[[3]]+#[[4]])/4,2]==0 &];Sort[Res,Less];Res[[1]]