最小化多变量循环迭代函数

2024-09-30 22:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图最小化存储在array中的80个变量的函数f。该函数由两个嵌套循环定义:外部一个索引array,由i定义,而内部循环执行array[i]次,并将计算结果添加到运行总数中。计算依赖于一些条件x和{},并且每次执行时都会略有变化,这就是为什么我需要循环结构。下面是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])并抛出最小值{}时,程序会抱怨,因为它无法执行定义f不确定次数的循环。在

有鉴于此,我的问题如下:

How do I minimize a multivariate function whose parameters describe the number of times a given loop is to be iterated?

我最初试图在Mathematica中实现这一点,但是发现我无法通过上面的过程定义f。我能做的最好的就是告诉Mathematica执行上面的循环,然后在计算了total之后定义f[array_] := total。当我运行我的代码时,Mathematica自然声称它不能计算f,甚至在它执行我的命令到NMinimize[{f[array] array ϵ Integers}, array]之前就抛出了一个错误。Mathematica试图在NMinimize中调用之前对f求值,这表明我不太了解Mathematica中函数是如何工作的。任何帮助解决这种情况将不胜感激!在


Tags: 函数infor定义rangeresult条件结构
1条回答
网友
1楼 · 发布于 2024-09-30 22:20:43

如前所述,你的函数有一个解析最小值,不需要数值优化。不幸的是,StackOverflow不让我展示它的数学(如果您在MathExchange上询问它,我可以提供一个派生),但是给定一个数组A = [a0 a1 ... an],其中每个{}都是一个正整数,而一个数组Y = [0 1 ... n]你发布的函数可以简化为下面的矩阵乘法A * (A - 1 + Y)',其中'表示矩阵转置,*表示矩阵乘法。因此,简单地说,当每个ai最小化时,函数被最小化。因此,如果这是一个更大的优化的一部分,那么您的任务应该集中在寻找A中每个元素的最小值(如果元素本身是受约束的)。在

相关问题 更多 >