比较MATLAB fmincon和ga(遗传算法)结果:遗传算法的问题

比较MATLAB fmincon和ga(遗传算法)结果:遗传算法的问题,matlab,mathematical-optimization,genetic-algorithm,Matlab,Mathematical Optimization,Genetic Algorithm,我有一个相当复杂的优化问题,我已经通过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

我有一个相当复杂的优化问题,我已经通过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的长度相同


关于如何使问题以正确的格式解决,您有什么想法吗?谢谢

明白了!我只需要操纵适应度函数,使其使用x5作为行向量,即使它在所有约束中都是列向量

myfun = @(x5) 0.5 * (norm(x5 * C' - d'))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128)))^2;

明白了!我只需要操纵适应度函数,使其使用x5作为行向量,即使它在所有约束中都是列向量

myfun = @(x5) 0.5 * (norm(x5 * C' - d'))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128)))^2;

您对
NVAR
的价值是多少?mtimes错误意味着MATLAB抱怨矩阵乘法中第一个矩阵的列数不等于第二个矩阵的行数。nvars=128。这是一个常数,所以我不知道这会导致错误。谢谢。我的收件箱里有一条评论,我在这里没有看到,上面写着“你能用nvars=1试试吗?”。我这样做了,它消除了mtimes错误,但是我得到了另一个维度不匹配错误:???在49处使用==>Prepreprelinearconstr时出错A中的列数必须与X0的长度相同。是的,我在第二次考虑时删除了它nvars=128应该是好的。您对nvars的值是多少?mtimes错误意味着MATLAB抱怨矩阵乘法中第一个矩阵的列数不等于第二个矩阵的行数。nvars=128。这是一个常数,所以我不知道这会导致错误。谢谢。我的收件箱里有一条评论,我在这里没有看到,上面写着“你能用nvars=1试试吗?”。我这样做了,它消除了mtimes错误,但是我得到了另一个维度不匹配错误:???在49处使用==>Prepreprelinearconstr时出错A中的列数必须与X0的长度相同。是的,我删除了它,因为经过再三考虑,nvars=128应该是好的。