Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最大化功能:什么方法?_Python_Language Agnostic_Max_Mathematical Optimization - Fatal编程技术网

Python 最大化功能:什么方法?

Python 最大化功能:什么方法?,python,language-agnostic,max,mathematical-optimization,Python,Language Agnostic,Max,Mathematical Optimization,我有一个类似这样的函数:f(x)=min(f_1(x_1),…,f_n(x_n))其中n大约是10,所有f_I都是正单调的,平滑的,它们的值几乎总是(对于所有x_I对于所有f_I)的差异小于10倍。因此,它们似乎非常适合分析。 有这样的限制时,最大化it的最佳(快速)方法是什么: -所有x_i都是整数且小于~100 -所有x_i的乘积应位于指定值附近(假设,不超过该值的10%) 任何语言的算法描述都是值得赞赏的,但如果是Python,那么它的性能会好十倍:) 注:早些时候,我研究过遗传算法,并首

我有一个类似这样的函数:
f(x)=min(f_1(x_1),…,f_n(x_n))
其中
n
大约是10,所有
f_I
都是正单调的,平滑的,它们的值几乎总是(对于所有
x_I
对于所有
f_I
)的差异小于10倍。因此,它们似乎非常适合分析。
有这样的限制时,最大化it的最佳(快速)方法是什么:
-所有
x_i
都是整数且小于~100
-所有
x_i
的乘积应位于指定值附近(假设,不超过该值的10%)

任何语言的算法描述都是值得赞赏的,但如果是Python,那么它的性能会好十倍:)


注:早些时候,我研究过遗传算法,并首次将其应用于这项任务。然而,这似乎不是最好的选择:GAs的速度非常慢,我也无法想出有效的交叉操作来解决这个问题。

我没有立即看到比随机选择一个起点、用每个输入x_I评估每个函数f_I、确定最小输入更好的解决方案,然后增加得到最低结果的函数的输入。它并不优雅,也不复杂,但它是一种很好的基本暴力方法

int (**f_is)(int n);

//...

int xs[10];

//...

while(true) {
    int i = 0;

    int cmin = f_is[0](i);
    int cminIndex = 0;

    for(i = 1; i < 10; ++i) {
        int cfunc = (f_is[i])(i);

        if(cmin < cfunc) {
            cmin = cfunc;
            cminIndex = i;
        }
    }

    ++xs[cminIndex];
}
int(**f_is)(int n);
//...
int-xs[10];
//...
while(true){
int i=0;
int cmin=f_为[0](i);
int-cminIndex=0;
对于(i=1;i<10;++i){
int cfunc=(f_是[i])(i);
如果(cmin

编辑:还有两件事:如果并行计算f_i(n_i)和join并取min,速度会快得多,但仍然需要一种方法将产生最小值的函数的索引传递回调用方。我推荐Haskell作为一种很好的语言来编写这篇文章,因为它比python快得多,在某些情况下,您可以不费吹灰之力就获得很好的并发支持。

您的f_I函数看起来像什么,它们做什么?嗯,单调的定义又是什么?如果它的意思和我想的一样,
min(f_1(x),f_1(x+abs(C))==f_1(x)
。这难道不是一个简单的问题吗?我想他是说每个函数都是单调的,有n个不同的函数。@kojiro我是说每个函数都是单调的(你所写的当然是真的),它们之间没有(简单的)关系。@Cherma,那么根本没有办法概括出一个解决方案
lambda x:x
lambda x:2*x
都是正单调函数,但它是
f_1
f_2
?与这个问题无关,但在你回答之后,我开始学习haskell。关于它有很多有趣的事情,但是你对它的表现的评论是决定性的因素。很高兴听到我的评论带来了不同。Haskell确实是一种优秀的、扩展思维的语言。