Я пытаюсь минимизировать функцию f
из ~80 переменных, хранящихся в файле array
. Функция определяется двумя вложенными циклами: внешний цикл индексирует array
на 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.
Я хочу найти записи array
, которые минимизируют значение f
. Однако, когда я говорю (например) Mathematica свести к минимуму f([x1, x2, ..., x80])
и выдать минимизатор array
, программа жалуется, потому что она не может выполнить циклы, определяющие f
неопределенное количество раз.
В связи с этим мой вопрос следующий:
Как свести к минимуму многомерную функцию, параметры которой описывают количество итераций заданного цикла?
Первоначально я пытался реализовать это в системе Mathematica, но обнаружил, что не могу определить f
с помощью описанной выше процедуры. Лучшее, что я мог сделать, это сказать Mathematica, чтобы она выполнила описанные выше циклы, а затем определила f[array_] := total
после того, как total
было вычислено. Когда я запустил свой код, Mathematica, естественно, заявила, что не может вычислить f
, выдав ошибку еще до того, как выполнила мою команду на NMinimize[{f[array] array ϵ Integers}, array]
. Тот факт, что Mathematica пытается вычислить f
перед вызовом в NMinimize
, указывает на то, что я не совсем понимаю, как работают функции в Mathematica. Любая помощь в распутывании этой ситуации будет принята с благодарностью!
f
, поскольку ее параметры становятся переменными числами цикла итерации. - person David Grabovsky   schedule 03.06.2017array
равны 0. Внутренний цикл никогда не выполняется, и возвращается 0. Я что-то упускаю? - person JaminSore   schedule 03.06.2017array
должны быть целыми числами, большими или равными 1. Тем не менее, на самом деле не имеет значения, что такоеresult
; на самом деле функция может быть произвольно сложной. Моя проблема по-прежнему связана с реализацией фактического алгоритма минимизации, который принимает в качестве входных данных различные количества итераций внутреннего цикла вarray
. - person David Grabovsky   schedule 04.06.2017