Mathematica,从列表中最大化元素提取

时间:2012-01-22 14:07:15

标签: wolfram-mathematica mathematical-optimization discrete-mathematics

我认为对于mathematica专家来说这是一个简单的问题。 在给定必须遵守某些约束的索引的情况下,如何从列表中最大化提取的值?

例如:

S = {4,2,3,5}

Maximize[{Extract[S,x], x<= 3, x>=1},{x}]

我希望返回4而不是此错误:

Extract::psl: "Position specification x in Extract[{4,2,3,5},x] is not an integer or a list of integers."

有人知道解决这个问题吗?

非常感谢。


非常感谢!!显示的最后一种方法是我正在寻找的,但应用于我的真正问题是行不通的。

我有以下问题:

在一个月的某一天,我必须最大限度地提高员工对某个班次的满意度。 我有矩阵满意度(员工,班次),并且是这样的:

S= {{4,3,5,2},{3,4,5,1}}

每个元素代表员工对某个班次的满意度,因此员工1对于班次1表示满意。

我的模型必须选择所有月份的正确班次,以便通过尊重某些约束来最大限度地提高员工满意度。

我最大的问题是关联满意度矩阵和所选择的班次 我无法在方法NMaximize中使用一个功能,该功能采取所选择的班次和员工,并返回满意度,从而对所有月份进行求和。 我需要最大化这样的事情:

Summation(from j=1 to j=31) getSatisfaction[1,chosenShift for that day)

你知道我怎样才能在mathematica中写这个? 我好几天都在努力解决这个问题,但我无法解决这个问题。 我需要输入来将选择的班次与满意度矩阵联系起来。

非常感谢!!

2 个答案:

答案 0 :(得分:3)

如果您不需要找到x的值,那么我建议您只提取列表的可接受范围,然后找到Max

s = {4,2,3,5};

s[[1 ;; 3]] // Max
4

如果你有特别毛茸茸的约束,那么你可能需要像Pick:

这样的东西
list = {5, 7, 1, 9, 3, 6, 2, 8, 4};

Pick[list, Range@Length@list, x_ /; x <= 7 && x >= 3 && Mod[7, x] == 1]
{1, 6} 

然后,您可以在返回的列表中使用Max


为了完整性,如果您需要x的值或流程中的其他详细信息,请采用以下方法:

list = {6, 5, 7, 3, 4, 2, 1, 8, 9};

pos = Cases[Range@Length@list, x_ /; x <= 7 && x >= 3 && Mod[7, x] == 1]

values = Part[list, pos]

maxpos = Part[pos, Ordering[values, -1]]
{3, 6}

{7, 2}

{3}

答案 1 :(得分:2)

回答您更新的问题:

如果你有:

shifts = {{4, 3, 5, 2}, {3, 4, 5, 1}, {4, 3, 5, 2}}

然后

(Tally /@ Transpose@shifts)[[All, 1, 1]]

给你:

{4, 3, 5, 2}

我列出了每个员工的首选班次。