Mathematica,NMinimize:涉及功能的平等约束是“无效的”

时间:2015-04-02 14:21:20

标签: math wolfram-mathematica mathematical-optimization

在Mathematica中,为了尝试解决优化问题,我已经定义了以下内容:

costVector := {710000, 610000, 650000, 910000, 720000, 570000} 

cost[x_] := Total[IntegerDigits[x, 2, 6]*costVector]

coverage[x_] := coveragex @@ IntegerDigits[x, 2, 6]

coveragex[a_ , b_, c_, d_, e_, f_ ] := 
 Complement[
  Union[a*{4, 5, 6}, b*{1, 5}, c*{5, 6, 7}, d*{1, 3, 4, 7}, 
   e*{2, 3, 5}, f*{2, 6}], {0}]

goal = {1, 2, 3, 4, 5, 6, 7}

总结问题:我想找到一个六位二进制值x,使得cost [x]尽可能小,同时满足调用coverage [x]给出指定整数列表的条件目标。为了找到这个值,我尝试以下列方式使用NMinimize:

NMinimize[{cost[x], {(coverage[x]) == goal,
        x <= 63, x >= 0}}, x]|

我的问题是我收到以下错误:

NMinimize::bcons: "The following constraints are not valid: {coveragex[x,2,6]==goal,x>=0,x<=63}. Constraints should be equalities, inequalities, or domain specifications involving the variables"

出于某种原因,Mathematica似乎认为将coverage [x]与目标进行比较的约束不是一个平等。我一直在试图找出原因。我刚刚做了某种语法错误,或者我是否以错误的方式使用NMinimize?这有可能吗?

1 个答案:

答案 0 :(得分:1)

2 6 可能性不是那么,所以我在所有可能性上都使用了一个简单的迭代:

MinimalBy[Select[Range[2^6 - 1], coverage[#] == goal &], cost]

我不太了解Mathematica以了解错误消息,但coverage[x,2,6]看起来像是错误的参数数量。我还担心NMinimize无法知道它只应该尝试整数,并且如果提供了非整数,其他事情就会破坏。但那只是在猜测。