我想盡量減少存儲在array
中的80個變量的函數f
。該函數由兩個嵌套循環定義:外部一個索引array
by i
,而內部循環執行array[i]
次,並將計算結果添加到運行總數。計算取決於一些條件x
和y
並且在每次執行時都會稍微改變,這就是爲什麼我需要循環結構。這裏是在Python最小工作示例:儘量減少循環迭代的多變量函數
def f[array]:
total = 0
x = 0
y = 0
for i in range(len(array)):
for j in range(array[i]):
result = 2*x + y
total = total + result
x = x+1
x = 0
y = y+1
return total
因此,舉例來說,print f([2,1])
返回3中,由於[(2 * 0)+ 0] + [(2 * 1)+ 0] + [(2 * 0 )+ 1] = 0 + 2 + 1 = 3.
我想查找使f
的值最小的條目array
。然而,當我告訴(例如)Mathematica儘量減少f([x1, x2, ..., x80])
並吐出最小值array
時,程序會抱怨,因爲它無法執行定義f
的循環的不確定次數。
鑑於此,我的問題是:
如何最小化多元函數,它的參數描述的次數給定的循環被重複?
我原本試圖在Mathematica中實現這一點,但發現我無法通過上述過程定義f
。我能做的最好的是告訴Mathematica執行上面的循環,然後在total
已被計算後定義f[array_] := total
。當我運行我的代碼時,Mathematica自然聲稱它不能評估f
,甚至在它執行我的命令NMinimize[{f[array] array ϵ Integers}, array]
之前拋出一個錯誤。 Mathematica試圖在NMinimize
之前調用f
這一事實表明我不太瞭解Mathematica中的函數是如何工作的。任何幫助解決這種情況將不勝感激!
首先,您可以查看[this](https://en.m.wikipedia.org/wiki/Mathematical_optimization)關於函數優化的Wikipedia頁面。鑑於你無法區分這個功能,很多可能的技術都變得不適用,這很遺憾。 – ForceBru
如果您可以創建一個具體的示例問題,這個問題可能比您的真實問題簡單十到二十倍,但它保留了問題的基本特徵,並且您可以編輯您的帖子以包含示例問題的完整定義和詳細信息,那麼有人可能會把你的例子放到他們的筆記本中,稍微調整記號和定義,並顯示一兩種方法來最小化這個例子。然後,您可能會將該技術映射回您真正的問題。 – Bill
@ForceBru是的,整數約束消除了許多數值方法,但我更關心的是如何讓程序在'f'上執行或多或少的_any_函數調用,因爲它的參數變成可變數量的循環迭代。 –