我设置了一个相当复杂的优化问题,我通过 fmincon 解决了这个问题,像这样调用它
myfun = @(x5) 0.5 * (norm(C*x5 - d))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128),1))^2;
[x5, fval] = fmincon(myfun, initialGuess, -A, b, Aeq, beq, lb, []);
这些组件在这里打印的时间太长了,但这里是尺寸
C: 49 x 128
x5: 128 x 1
d: 49 x 1
timeIntervalMeanGlobal, powerAbsMaxMaxGlobal: constants
initialGuess: 128 x 1
A: 44541 x 128
b: 44541 x 1
Aeq: 24 x 128
beq: 24 x 1
lb: 128 x 1
这在代码中有效,但我没有得到我完全满意的结果。我想将它与 MATLAB 中的内置 ga 函数进行比较,该函数以类似的方式调用,但是当我尝试像这样运行它时出现错误
[x5, fval] = ga(myfun, nvars, -A, b, Aeq, beq, lb, []);
其中 nvars = 128。有一个长长的列表,大约有 8 个错误,以
???错误使用 ==> mtimes
内部矩阵尺寸必须一致。
并以
原因:
用户提供的适应度函数评估失败。GA 无法继续。
有人可以指导我如何正确调用 ga,并深入了解为什么当相同的代码不会导致 fmincon 错误时 ga 调用可能会发生此错误?我已经尝试了所有 MATLAB 帮助文件和示例,其中有一些不同的排列,但没有更好的运气。谢谢。
更新:我想我找到了问题,但我不知道如何解决它。ga 文档说“适应度函数应该接受长度为 nvars 的行向量”。在我的例子中,myfun 是适应度函数,但 x5 是列向量(lb 也是如此)。因此,虽然我在数学上知道 C*x5 = d 与 x5'*C' = d' 相同,即使对于非方阵也是如此,但我无法以这种方式为 ga 求解器制定问题。我试过了 - 它使它通过了适应度函数,但后来我得到了错误
A中的行数必须与b的长度相同。
关于如何以正确的格式为求解器解决此问题的任何想法?谢谢!