0

我認爲這是mathematica專家的一個簡單問題。 如何從給出索引的列表中提取值最大化?必須尊重某些約束?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具有滿意4相對於移1.

我的模型必須爲所有月份選擇正確的班次,以便通過尊重某些限制來最大化員工滿意度。

我最大的問題是與選定的班次相關的滿意度矩陣。
我不能在方法中使用NMaximize一個函數,它將選擇的班次和員工並返回滿意度,並在所有月份進行總結。 我需要最大限度地是這樣的:

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

你知道我怎麼可以這樣寫數學中?
我正在努力解決這個問題好幾天,但我無法解決這個問題。 我需要輸入將選定的班次與滿意度矩陣關聯起來。

非常感謝!

+0

請檢查我的答案,並告訴我它是否解決了您的問題,或者如果您尋求其他方法。 –

+0

@user:這個網站是爲單個問題提供答案,[後續](http://meta.stackexchange.com/q/19457/156389)問題並不真正適合模型。這不是一個論壇。另外,您是否可以爲代碼使用代碼塊 - 要獲得幫助,請在編輯問題時按下問號。最後,在[多個地點]發佈相同的問題有點粗魯(http://www.physicsforums.com/showthread.php?t=569736)。 – Simon

+0

@ user1114020這是一個令人困惑的問題。你幾乎沒有提到約束的性質,甚至幾乎沒有什麼矩陣表示。有四班倒嗎?每行是否表示不同的員工?那裏有多少名員工?每班有多少人需要?它們是可以互換的(至少對於那些具有類似任務的)?如果你提供一個現實的問題描述,你將更有可能得到合理的迴應。另外,如果我沒有弄錯,所需的方法將不會很簡單(看起來像整數或約束滿足編程可能是需要的)。 –

回答

3

如果你不需要找x的值,那麼我建議你只是提取列表的可接受的範圍,然後找到該Max

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

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

如果你有特別毛茸茸的約束,那麼你可能需要像皮克:

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

Pick[list, [email protected]@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[[email protected]@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} 
+0

非常感謝,非常有用。請閱讀我更新的問題 – Parzio

2

回答您的更新問題:

如果您有:

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

然後

(Tally /@ [email protected])[[All, 1, 1]] 

爲您提供:

{4, 3, 5, 2} 

我與每位員工的首選轉變的列表。