dmolina / cec2013lsgo

Package for using CEC'2013 Large Scale Global Optimization benchmark in Python, this benchmark is used also in CEC'2014 and in CEC'2015
GNU General Public License v3.0
29 stars 14 forks source link

Are there any problems with F14? #3

Open Wukong-SCUT opened 3 months ago

Wukong-SCUT commented 3 months ago

The optimal point in F14 should be the point provided in the xopt file, but in fact it is not the case. I personally think it is because F14 itself has the attribute of overlap. It should provide a 905-dimensional vector like F13, and then form a 1000-dimensional vector based on overlap. But this is not the case in the code. Instead, xopt with 1000 dimensions is provided. In this way, even if xopt is input, the vector obtained after expanding the first 905 dimensions of xopt is not a shift vector, so it is not the optimal point. And such an optimal point cannot be achieved. 1000-dimensional xopt means that one dimension requires two values ​​​​in different sub_sizes.

dmolina commented 3 months ago

Dear @Wukong-SCUT, actually this is a benchmark for a previous competition in 2013 for Large Scale Global Optimization. The idea of the benchmark is to be able to reproduce comparisons and also to compare results directly between algorithms. Thus, it is difficult to change any behavior for any function. However, if you write me a more detailed explanaition, we could work on that for next comparisons. Thanks in advance for your comments.

Wukong-SCUT commented 3 months ago

已收到,感谢您的来信。       ——悟空同学

Wukong-SCUT commented 3 months ago

Thank you for your professional reply. Here I give a detailed explanation of some of my ideas:

You can see the picture below. This is the key calculation step of the F14 function. It is first processed by rotateVectorConflict. image

Okay, so let's take a look at the function rotateVectorConflict, which is shown in the picture below. image This picture contains the code for how to get z, which is more critical. image

Note that for F14, the dimension of x is 905, which means it is overlapped, but OvertorVec is a matrix divided by 1000-dimensional vectors into subspace sizes. Therefore, the meaning of this code is to expand the dimension of x to 1000, and then divide the dimension into subspaces and then compare it with OvectorVec to achieve the purpose of translation.

Because x is expanded from 905 dimensions to 1000 dimensions. Therefore, for the overlapped dimension, the values ​​in different subspaces are the same. But this is not the case for OvectorVec. The values ​​of overlapped dimensions in different subspaces are different. Therefore, even if the x^opt vector is brought into the function, the optimal value 0 cannot be obtained, which is also inconsistent with the original paper.

The above are my personal thoughts. I may not understand them well. Please forgive me. I can understand that the original intention is to make the overlapped dimensions have different effects in each subspace, so this operation is performed. But this makes it impossible to obtain the optimal value, because it is impossible for anyone to input a 905-dimensional vector, and the overlapped dimensions after expansion are different in different subspaces.

So my idea is to change the dimension of X to 1000, but remind users that they need to pay attention to overlap, so that people can find the optimal value of the dimension in different components based on conflict. Otherwise, it seems that we can't find the optimal value, and we don't even know what the possible optimal value of the 905-dimensional x input would be.

The above are some of my personal thoughts. There may be many misunderstandings. Please forgive me. Thank you again for your professional answer. I am very concerned about the development of the LSGO field. If you have a new Benchmark release, please let me know. Thank you again!