2011-05-10 66 views
4

我有一个优化问题如下。数学编程问题

鉴于正整数,例如数组(y1 = 2, y2 = 3, y3 = 1, y4 = 4, y5 = 3),我的目标是最大化的函数f(x),其中f(x) = x if x + y <= mf(x) = 0否则这些值的总和。 (m是正整数)

例如,在该特定示例中上述(与m = 5),最佳x值为2,作为和将2 + 2 + 2 + 0 + 2 = 8,这是其它可能的值中的最高为x(隐含,可能x将范围从05

我当然可以详尽地制定并比较结果通过所有可能的x值的总和,并选择给出最高总和的X,条件是x的范围是相当小。但是,如果范围变大,则该方法可能变得非常昂贵。

我不知道是否有什么我可以从东西使用像线性规划,以更普遍,妥善解决这个问题。

+0

你回答了这个问题:http://en.wikipedia.org/wiki/Linear_programming#Standard_form。你能指出特定的问题,我可能看不到? – Igor 2011-05-10 00:59:44

+0

我不明白你的问题陈述。你在哪里获得y的价值? – ThomasMcLeod 2011-05-10 01:02:47

+1

你问了10个问题,从不投票。你收到的所有答案都不值得赞赏吗? – 2011-05-10 02:59:28

回答

3

没有必要线性规划在这里,只是一种和单次以确定最佳的X。

伪代码:

getBestX(m, Y) { 
    Y = sort(Y); 
    bestSum = 0; 
    bestX = 0; 

    for (i from 0 to length(Y)) { 
     x = m - Y[i]; 
     currSum = x * (i + 1); 
     if (currSum > bestSum) { 
      bestSum = currSum; 
      bestX = x; 
     } 
    } 

    return bestX; 
} 

注意每一个我们知道i,如果x = m - Y[i]然后f(x) = x每个元素直至并包括i,并f(x) = 0每个元素之后,因为Y是按升序排列。

+0

这是一个很好的解决方案,因为该排序提供了veredesmarald上面列出的不错的属性。虽然答案以编程的方式解决了这个问题,但我想知道我们如何能够在数学上解决这个数学问题。 – skyork 2011-05-10 13:24:52