我想尽量减少存储在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_函数调用,因为它的参数变成可变数量的循环迭代。 –