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

时间:2013-10-08 14:34:30

标签: 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 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的长度相同。

有关如何以正确的格式解决此问题的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

呼!