使用Mathematica进行优化:在目标函数中使用BinCounts

时间:2009-10-05 21:36:00

标签: wolfram-mathematica mathematical-optimization

使用Mathematica,我需要优化一个用BinCounts定义的函数; 我希望最大化的参数定义了bin cutpoints。

我认为问题在于Mathematica扩展了目标函数 在他们被赋予数字之前的论据方面 值,所以BinCounts抱怨bin规范不是“a 列表包含实际值,Infinity和-Infinity“。

我认为以下是我所做的事情的最小例子 试图去做和发生了什么。我非常感谢你的建议 如何解决这个问题。

In[1]:= data = RandomReal[1, 30]; (* Make some test data. *)

In[2]:= f[a_, b_, c_] := BinCounts[data, {{0, a, b, c, 1}}] (* Shorthand to use below… *)

In[12]:= g[a_, b_, c_] := Max[f[a, b, c]] - Min[f[a, b, c]] (* Objective function. *)

In[13]:= NMaximize[{g[a, b, c], 0 < a < b < c < 1}, {a, b, c}] (* Try to oprimize. *)

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >>

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >>

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >>

During evaluation of In[13]:= General::stop: Further output of BinCounts::cvals will be suppressed during this calculation. >>

Out[13]= {0., {a -> 0., b -> 0., c -> 1.}}

1 个答案:

答案 0 :(得分:3)

解决方案只是指定目标函数仅根据数值参数定义,如下所示:

g[a_?NumericQ, b_?NumericQ, c_?NumericQ] := Max[f[a, b, c]] - Min[f[a, b, c]]