一千萬個為什麽

搜索

如何在一組離散點上找到函數的最大值?

如何在一組離散點上找到函數的最大值?例如,找到最大值的最佳方法是什麽

-2 a - 2 b - 2 c - 2 d - 2 e - 2 f + e (-2 + d + f) - 2 g + f (-2 + a + e + g) - 
 2 h + c (-2 + b + d + h) - 2 i - 2 j + a (-2 + b + f + j) + i (-2 + h + j) + 
 h (-2 + c + g + i + j) - 2 k + d (-2 + c + e + k) + j (-2 + a + h + i + k) - 
 2 l + g (-2 + f + h + l) + k (-2 + d + j + l) - 2 m + (-2 + b + l) m + l 
 (-2 + b + g + k + m) + b (-2 + a + c + l + m)

其中$ a,b,c,d,e,f,g,h,i,j,k,l,m \ in \ { - 1,1 \} $?任何幫助或建議將不勝感激!

最佳答案

Since the expression is slightly involved I'd put it in Table and write its all values for {a, {-1, 1}}, {b, {-1, 1}},..., {m, {-1, 1}}

它可以這樣做

With[{iter = 
      Sequence @@ Table[{var, {-1, 1}}, 
                        {var, {a, b, c, d, e, f, g, h, i, j, k, l, m}}]}, 
     With[{tab = 
           Table[{ -2 a - 2 b - 2 c - 2 d - 2 e - 2 f + e (-2 + d + f) - 2 g 
                   + f (-2 + a + e + g) - 2 h + c (-2 + b + d + h) - 2 i - 2 j 
                   + a (-2 + b + f + j) + i (-2 + h + j) + h (-2 + c + g + i + j) 
                   - 2 k + d (-2 + c + e + k) + j (-2 + a + h + i + k) - 2 l 
                   + g (-2 + f + h + l) + k (-2 + d + j + l) - 2 m + (-2 + b + l) m 
                   + l (-2 + b + g + k + m) + b (-2 + a + c + l + m), 
                  {a, b, c, d, e, f, g, h, i, j, k, l, m}}, iter]}, 

           Cases[tab, {tab//Max, {___}}, Infinity]
         ]
    ]
  {{92,{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }}
</代碼> 

在更一般的情況下,您應該考慮將表達式編寫為純函數並使用例如 InnerOuterTuples 。什麽是最好的方法取決於各種問題,例如底層參數空間的大小等。

轉載註明原文: 如何在一組離散點上找到函數的最大值?