我正在尝试以不同的变体解决社区中众所周知的以下测试问题:
在 3-dim 中放置 N = 15 个点。单位立方体,使得它们之间的最小距离最大,例如在排斥但受限电子的情况下。以下是要优化的函数的类似 Matlab 的非矢量化/矢量化形式(我们假设 n = 3*N):
---- 非矢量化 -------------------------------------------------------- ------
function d = balls(x)
d = 2.0;
for i = 1:14
for j = (i+1):15
s = (x(i)-x(j))^2 + (x(i+15)-x(j+15))^2 + (x(i+30)-x(j+30))^2;
s = sqrt(s);
if s < d, d = s; end
end
end
d = -d;
end
---- 向量化 --------------------------------------------- --------
function d = balls(x)
X = reshape(x, [], 3);
d = -min(pdist(X));
end
函数是连续的,但不是平滑的;基于梯度的方法将不起作用。多起点和随机方法也有问题,因为 45 维的搜索空间已经相当大了。边界也是一个问题,例如与将电子放置在没有边界的球体上的问题相比。
它将有许多局部最小值,例如置换球指数或互换尺寸。我猜所有这些局部最小值都具有相同的函数值,例如始终以相似配置结束的能级(这是真的吗?)。我只对这个最小值感兴趣,因此准确可靠地计算一个局部最小值就足够了。
通过多次重新启动应用 Matlab 的 fmincon(),我知道最小值将低于 -0.62 ......我仍然想更准确地计算这个值,并且只使用开源软件!请不要提示强大的商业求解器。