算法优化锦标赛。 - 页 60

 
Yuri Evseenkov:
也就是说,可以传递一个空数组,如果所有的参数都等于零,就可以找出FF的值。

0.0是否属于[-10.0;10.0] 范围?- 是的,确实如此。因此,你可以从充满0.0值的数组中找出FF值的参数。

一般来说,没有人禁止你向FF输入绝对的数字,但是你只能在[-10.0;10.0] 的范围内得到一个充分的答案,而超出这个范围的数字将被切断到这些界限。如果你不考虑这一点,那么你的算法可以认为他在一个光滑的绿色表面上得到了,因为FF的值将永远是给定的FF的最小值 (任何,但不改变),并在广阔的实数中无限地徘徊(直到他的过程不会停止检查器)。

 
Andrey Dik:

0.0是否属于[-10.0;10.0] 范围?- 是的,确实如此。因此,你可以从充满0.0值的数组中找出FF值的参数。

一般来说,没有人禁止你向FF输入绝对的数字,但是你只能在[-10.0;10.0] 的范围内得到一个充分的答案,而超出这个范围的数字将被切断到这些界限。如果你不考虑这一点,那么你的算法可以认为得到了一个光滑的grizontalnuyu表面,因为FF的值将总是发出一个最小值 (任何,但不改变)为FF,并无限地徘徊在广阔的实数(直到他的过程不会停止检查器)。

明白了。谢谢。我计划在前4次调用时,数组中分别填入-10.0、0.0、10.0和2.7。我希望我的蟑螂能达到2.718,但步骤是0.1。你不能这样做。
 
Dmitry Fedoseev:

好了,我走了,呆在你安静的 "道米 "世界里。把它从参与者中划掉。

当然,我会向在座的每一位带着盔甲球的人解释。在第二个版本的脚本中,你不需要导入FF(),因为那里也导入了 参与者函数,所以FF()在参与者函数中是看不到的。FF()函数必须在成员库中被导入。即使是这种微不足道的废话的例子也被错误地呈现出来。我知道,我知道,你会说这很清楚。但如果这么清楚,为什么不提供正确的例子呢?还摆出一副我才是白痴的表情。

拜拜了。

迪姆,你至少应该在上讲台竞争之前检查过出口功能的操作。例如,我在发布我的原型之前,自然要检查其工作能力。当然,它也是有效的,也就是说,没有自定义库加载自己的函数实例。

MT运行环境的工作方式一般与你想象的不同。 只有一个 库的实例,只有一个变量的实例被加载到检查脚本的地址空间,也就是说,每个人都将只使用一个特定的ff及其特定参数。如果你不相信我,请下载我的例子,看看它。

 
Vasiliy Sokolov:

迪米特里只是没有看到,有两个算法库的选项也给了会员。而第二个 FF功能导入(如他所说)。而第一个人没有。

 
Vasiliy Sokolov:

迪姆,至少在你在讲台上大肆宣扬之前,你应该检查过出口职能部门的工作。否则就会变成从一系列"我没有看,但我判断 " 我,例如,在发布原型之前,当然要检查其性能。当然,它也是有效的,也就是说,没有自定义库加载自己的函数实例。

MT运行环境的工作方式一般与你想象的不同。 只有一个 库的实例,只有一个变量的实例被加载到检查脚本的地址空间,也就是说,每个人都将只使用一个特定的ff及其特定参数。如果你不相信我,请下载我的例子,看看它。

我已经说过关于双倍进口 的一个例子(找不到我的帖子了,这里有很多)。是的,这就是为什么有可能通过成员算法来控制FF的调用。如果脚本和算法调用了FF的每一个实例,那么冠军就不会发生,因为不可能检查算法是否真的像它所说的那样多次调用FF。

...

虽然,你可能可以通过算法中的一次导入来完成,我认为不可能运行*.ex5,卸载,再运行,来重置计数器(聪明的参赛者计划),但那样的话,你需要让参赛者自己调用整个统计,其他的可能性也需要参赛者考虑输出结果,这对参赛者是一个额外的复杂性。脚本方面更容易要求提供所有关于他们是否使用FF的必要信息。

但无论如何,在我们的案例中,双重进口仍然不能被认为是一个错误。

 

Andrey Dik:

你不需要知道这个。保持在[-10.0;10.0]范围内,你就不会有问题。


0.0是否属于[-10.0;10.0] 范围?- 是的,确实如此。因此,你可以从充满0.0值的数组中找出FF的参数值。

事实上,没有人禁止你把任何数字输入FF,但你只能在[-10.0;10.0] 的范围内得到一个适当的答案,而超出这个范围的数字将被切断到这些限制。如果你不考虑这一点,那么你的算法可以认为他在一个光滑的绿色表面上得到了,因为FF的值将总是给定FF的最小值 (任何,但不改变),并无休止地在广阔的实数中徘徊(直到他的过程不会停止检查器)。

为了不麻烦剪裁边界,不限制算法,我们可以在FF中增加一行。

if(array[ArrayMaximum(array)]>10.0 || array[ArrayMinimum(array)]<-10.0) return(0.0);
 
Sergey Chalyshev:

为了不麻烦剪裁边界,不限制算法,你可以在FF中添加一行。

为什么返回(0.0);?

或者更准确地说,为什么是0.0?

 
Andrey Dik:

为什么返回(0.0);?

或者更准确地说,为什么是0.0?

如果我们只寻找最大值,那么正确答案是

return(-DBL_MAX);
 
Sergey Chalyshev:

如果我们只寻找最大值,那么正确的是

重点是,在设计阶段,有可能得到带有不连续的 "表面",峰值为无穷大(向下或向上),但FF应该在输出时返回正确的值,所以所有的边界条件已经在FF中被考虑了,不会因为FF的错误而导致崩溃。

这就是为什么我认为将参数削减到可接受的限度,并以这样的参数计算FF,然后输出你得到的结果,比在不正确的一个参数下有意输出-DBL_MAX要好。

参与者知道参数的限制,必须遵守它们,否则有很多问题在每个特定的算法案例中都很难回答。就像现在这样,我们把所有的算法放在一个公平的竞争环境中。

嗯。....,会被问到 "在设计阶段怎么会这样?!你说过没有人会知道FF的!!"....对于那些要问这样一个问题的人来说--先阅读一下这个主题。

 
为什么范围内的数字是小数?你可以从-10.0到10,以0.1为增量,而不是从-100到100,以1为增量。