我有一个相当复杂的优化问题设置我通过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的长度相同。
有关如何以正确的格式解决此问题的任何想法?谢谢!
答案 0 :(得分:1)
知道了!我只需要操纵适应度函数,使其使用x5作为行向量,即使它是所有约束中的列向量
myfun = @(x5) 0.5 * (norm(x5 * C' - d'))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128)))^2;
呼!