What is the bug in this code with Integer Genetic algorithm solver?
2 ビュー (過去 30 日間)
古いコメントを表示
Thanigaivel Raja T
2016 年 9 月 10 日
コメント済み: Walter Roberson
2016 年 9 月 12 日
Example Code:
F = [1 2 3 4 5 6 7 8 9];
H = [1 2 3 4 5 6 7 8 9];
K = [9 8 7 6 5 4 3 2 1];
S = @(x)[H(1:x(1)-1).'-K(1:x(1)-1).';
H(x(1):x(2)-1).'-K(x(1):x(2)-1).'-F(3:6).';
H(x(2):9).'-K(x(2):9).'];
A=ga(S,2,[1,-1;-1,1],[-4,4],[],[],[2,3],[8,9],[],[1,2]);
The errors that are displayed alternatively upon solving this:
Error using "-" Matrix dimensions must agree.
Subscripted assignment dimension mismatch.
Index exceeds matrix dimensions.
I dont find any examples on ga for handling array of values with indices being constrained to integers. So someone please shed some light on this.
Thanks in advance.
0 件のコメント
採用された回答
Walter Roberson
2016 年 9 月 10 日
You have
H(x(1):x(2)).'-K(x(1):x(2)).'-F(3:6).'
x(1) can be in the range 2 to 8, and x(2) can be 3 to 9 according to the LB and UB constraints. The LB and UB constraints are the only ones guaranteed to be satisfied at all times (others might only be satisfied at generation boundaries.) So x(1):x(2) can range from 8:3 (length 0) to 2:9 (length 8). But that expression, H(x(1):x(2)).'-K(x(1):x(2)).', which can be length anywhere from 0 to 8, must match the size of F(3:6) (length 4).
If your constraints are intended to enforce that x(2) = x(1) + 3 (so that F(3:6) will match on length) then rewrite your formula into one variable, substituting x(1)+3 for each occurrence of x(2).
The variable-length array extractions in your S formula are suspicious.
It appears to me that you have also neglected a fundamental fact: the objective function for ga() must return a scalar unless you have options with 'UseVectorized' set to true. You are returning a vector.
If you are wanting to do a pareto front calculation then you need to be using gamultiobj()
7 件のコメント
Walter Roberson
2016 年 9 月 12 日
You had
H(x(2):9).'-K(x(2):9).'
but x(2) = x(1)+3 so that line becomes
H(x(1)+3:9).'-K(x(1)+3:9).'
but you instead coded
H(x(1)+4:9).'-K(x(1)+4:9).'
Walter Roberson
2016 年 9 月 12 日
You only have a small number of valid x(1) values, with only 2, 3, 4, 5, and 6 being valid (it looks like to me.) There is no point in using ga() for something like that: just loop over all of the values calling your objective function and finding the minimum.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Genetic Algorithm についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!