【问题标题】:Mathematica, maximize element extraction from listMathematica,从列表中最大化元素提取
【发布时间】:2012-01-22 14:07:14
【问题描述】:

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

例如:

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 的满意度为 4。

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

我最大的问题是将满意度矩阵与选择的班次联系起来。
我无法在方法 NMaximize 中使用一个函数,该函数采用所选班次和员工并返回满意度,因此对所有月份的天数进行求和。 我需要最大化这样的东西:

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

你知道我怎样才能用mathematica写这个吗?
我为这个问题苦苦挣扎了好几天,但我无法解决这个问题。 我需要输入将所选班次与满意度矩阵联系起来。

非常感谢!!

【问题讨论】:

  • 请查看我的回答并告诉我它是否可以解决您的问题,或者您是否需要其他方法。
  • @user:这个网站是用来回答单个问题的,follow-up 问题并不真正适合模型。这不是一个论坛。另外,您能否为您的代码使用代码块 - 要获得帮助,请在编辑问题时按问号。最后,在multiple locations发同样的问题有点失礼。
  • @user1114020 这是一个令人困惑的问题。你几乎没有说约束的性质,甚至矩阵代表什么。有四班吗?每行是否表示不同的员工?有多少员工?每班需要多少个?它们是否可以互换(至少对于具有类似任务的人来说)?如果您提供对问题的真实描述,您将更有可能得到合理的答复。另外,如果我没记错的话,所需的方法并不简单(看起来可能需要整数或约束满足编程)。
  • @Daniel 我没有插入更多细节,以免使我的问题过于复杂。我想知道您如何在 Mathematica 中编写我的目标函数和相关的满意度矩阵。我的问题是在 Mathematica 中翻译它。我正在使用目标编程。但是这里所有请求详细信息:1)轮班是 19,但为了简化考虑它们 4。2)是的,每个行矩阵表示不同的员工(应该是 20,但为了简化只考虑 2。3 ) 取决于该月的星期几。
  • @Simon 我真的很抱歉我的错误。在下一篇文章中,我会按照你告诉我的去做。

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


【解决方案1】:

如果您不需要找到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}

【讨论】:

    【解决方案2】:

    回答您更新的问题:

    如果你有:

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

    然后

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

    给你:

    {4, 3, 5, 2}
    

    这是每个员工首选班次的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多